Amazon RDS for SQL Server에 Database Mail 사용 - Amazon Relational Database Service

Amazon RDS for SQL Server에 Database Mail 사용

Database Mail을 사용하여 Amazon RDS for SQL Server 데이터베이스 인스턴스에서 사용자에게 이메일 메시지를 보낼 수 있습니다. 메시지에는 파일 및 쿼리 결과가 포함될 수 있습니다. Database Mail은 다음 구성 요소를 포함합니다.

  • 구성 및 보안 객체 – 이 객체는 프로파일과 계정을 생성하며 msdb 데이터베이스에 저장됩니다.

  • 메시징 객체 – 이 객체에는 메시지를 보내는 데 사용되는 sp_send_dbmail 저장 프로시저, 그리고 메시지에 대한 정보가 들어 있는 데이터 구조가 포함됩니다. 이들 객체는 msdb 데이터베이스에 저장됩니다.

  • 로깅 및 감사 객체 – Database Mail은 msdb 데이터베이스 및 Microsoft Windows 애플리케이션 이벤트 로그에 로깅 정보를 기록합니다.

  • Database Mail 실행 파일DatabaseMail.exemsdb 데이터베이스의 대기열에서 데이터를 읽고 이메일 메시지를 전송합니다.

RDS는 Web, Standard 및 Enterprise Edition의 모든 SQL Server 버전에 대해 데이터베이스 Database Mail지원합니다.

제한 사항

SQL Server DB 인스턴스에 Database Mail을 사용할 경우 다음 제한 사항이 적용됩니다.

  • Database Mail은 SQL Server Express Edition에 대해 지원되지 않습니다.

  • Database Mail 구성 파라미터 수정은 지원되지 않습니다. 사전 설정(기본값) 값을 보려면 sysmail_help_configure_sp 저장 프로시저를 사용합니다.

  • 첨부 파일은 완전하게 지원되지 않습니다. 자세한 내용은 첨부 파일 작업 섹션을 참조하세요.

  • 최대 첨부 파일 크기는 1MB입니다.

  • Database Mail에는 다중 AZ DB 인스턴스에 대한 추가 구성이 필요합니다. 자세한 내용은 다중 AZ 배포에 대한 고려 사항 섹션을 참조하세요.

  • 미리 정의된 운영자에게 이메일 메시지를 보내도록 SQL Server 에이전트를 구성하는 것은 지원되지 않습니다.

Database Mail 활성화

DB 인스턴스에 대해 Database Mail을 활성화하려면 다음 프로세스를 따릅니다.

  1. 새 파라미터 그룹을 생성해야 합니다.

  2. 파라미터 그룹을 수정하여 database mail xps 파라미터를 1로 설정합니다.

  3. 파라미터 그룹을 DB 인스턴스에 연결합니다.

Database Mail의 파라미터 그룹 생성

DB 인스턴스의 SQL Server 에디션 및 버전에 해당하는 database mail xps 파라미터의 파라미터 그룹을 생성합니다.

참고

기존 파라미터 그룹을 수정할 수도 있습니다. Database Mail을 활성화하는 파라미터 수정의 절차를 따르십시오.

다음 예에서는 SQL Server Standard Edition 2016에 대한 파라미터 그룹을 생성합니다.

파라미터 그룹을 생성하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 파라미터 그룹을 선택합니다.

  3. [Create parameter group]을 선택합니다.

  4. 서브넷 그룹 생성 창에서 다음을 수행합니다.

    1. 파라미터 그룹 패밀리에서 sqlserver-se-13.0을 선택합니다.

    2. 그룹 이름에 파라미터 그룹의 식별자(예: dbmail-sqlserver-se-13)를 입력합니다.

    3. 설명Database Mail XPs를 입력합니다.

  5. 생성(Create)을 선택합니다.

다음 예에서는 SQL Server Standard Edition 2016에 대한 파라미터 그룹을 생성합니다.

파라미터 그룹을 생성하려면
  • 다음 명령 중 하나를 사용합니다.

    대상 LinuxmacOS, 또는Unix:

    aws rds create-db-parameter-group \ --db-parameter-group-name dbmail-sqlserver-se-13 \ --db-parameter-group-family "sqlserver-se-13.0" \ --description "Database Mail XPs"

    Windows의 경우:

    aws rds create-db-parameter-group ^ --db-parameter-group-name dbmail-sqlserver-se-13 ^ --db-parameter-group-family "sqlserver-se-13.0" ^ --description "Database Mail XPs"

Database Mail을 활성화하는 파라미터 수정

SQL Server 에디션 및 DB 인스턴스의 버전에 해당하는 파라미터 그룹의 database mail xps 파라미터를 수정합니다.

Database Mail을 활성화하려면 database mail xps 파라미터를 1로 설정합니다.

다음 예에서는 SQL Server Standard Edition 2016에 대해 생성한 파라미터 그룹을 수정합니다.

파라미터 그룹을 수정하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 파라미터 그룹을 선택합니다.

  3. 파라미터 그룹(예: ssis-sqlserver-se-13)을 선택합니다.

  4. 파라미터에서 파라미터 목록을 mail로 필터링합니다.

  5. [database mail xps]를 선택합니다.

  6. 파라미터 편집을 선택합니다.

  7. 1를 입력합니다.

  8. Save changes(변경 사항 저장)를 선택합니다.

다음 예에서는 SQL Server Standard Edition 2016에 대해 생성한 파라미터 그룹을 수정합니다.

파라미터 그룹을 수정하려면
  • 다음 명령 중 하나를 사용합니다.

    대상 LinuxmacOS, 또는Unix:

    aws rds modify-db-parameter-group \ --db-parameter-group-name dbmail-sqlserver-se-13 \ --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"

    Windows의 경우:

    aws rds modify-db-parameter-group ^ --db-parameter-group-name dbmail-sqlserver-se-13 ^ --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"

파라미터 그룹과 DB 인스턴스 연결

AWS Management Console 또는 AWS CLI를 사용하여 Database Mail 파라미터 그룹을 DB 인스턴스와 연결할 수 있습니다.

Database Mail 파라미터 그룹을 신규 또는 기존 DB 인스턴스와 연결할 수 있습니다.

Database Mail 파라미터 그룹을 신규 또는 기존 DB 인스턴스와 연결할 수 있습니다.

Database Mail 파라미터 그룹을 사용하여 DB 인스턴스를 생성하려면
  • 파라미터 그룹을 생성할 때 사용한 것과 동일한 DB 엔진 유형과 메이저 버전을 지정합니다.

    대상 LinuxmacOS, 또는Unix:

    aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --db-instance-class db.m5.2xlarge \ --engine sqlserver-se \ --engine-version 13.00.5426.0.v1 \ --allocated-storage 100 \ --manage-master-user-password \ --master-username admin \ --storage-type gp2 \ --license-model li --db-parameter-group-name dbmail-sqlserver-se-13

    Windows의 경우:

    aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --db-instance-class db.m5.2xlarge ^ --engine sqlserver-se ^ --engine-version 13.00.5426.0.v1 ^ --allocated-storage 100 ^ --manage-master-user-password ^ --master-username admin ^ --storage-type gp2 ^ --license-model li ^ --db-parameter-group-name dbmail-sqlserver-se-13
DB 인스턴스를 수정하고 Database Mail 파라미터 그룹을 연결하려면
  • 다음 명령 중 하나를 사용합니다.

    대상 LinuxmacOS, 또는Unix:

    aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --db-parameter-group-name dbmail-sqlserver-se-13 \ --apply-immediately

    Windows의 경우:

    aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --db-parameter-group-name dbmail-sqlserver-se-13 ^ --apply-immediately

Database Mail 구성

Database Mail을 구성하려면 다음 태스크를 수행합니다.

  1. Database Mail 프로파일을 생성합니다.

  2. Database Mail 계정을 생성합니다.

  3. Database Mail 계정을 Database Mail 프로파일에 추가합니다.

  4. Database Mail 프로파일에 사용자를 추가합니다.

참고

Database Mail을 구성하려면 execute 데이터베이스의 저장 프로시저에 대한 msdb 권한이 있는지 확인합니다.

Database Mail 프로파일 생성

Database Mail 프로파일을 생성하려면 sysmail_add_profile_sp 저장 프로시저를 사용합니다. 다음 예제에서는 Notifications라는 프로파일을 생성합니다.

프로파일을 생성하려면
  • 다음 SQL 문을 사용합니다.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'Notifications', @description = 'Profile used for sending outgoing notifications using Amazon SES.'; GO

Database Mail 계정 생성

Database Mail 계정을 생성하려면 sysmail_add_account_sp 저장 프로시저를 사용합니다. 다음 예에서는 Amazon Simple Email Service를 사용하여 프라이빗 VPC 내의 RDS for SQL Server DB 인스턴스에서 SES라는 이름의 계정을 생성합니다.

Amazon SES를 사용하려면 다음 파라미터가 필요합니다.

계정을 생성하려면
  • 다음 SQL 문을 사용합니다.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_account_sp @account_name = 'SES', @description = 'Mail account for sending outgoing notifications.', @email_address = 'nobody@example.com', @display_name = 'Automated Mailer', @mailserver_name = 'vpce-0a1b2c3d4e5f-01234567.email-smtp.us-west-2.vpce.amazonaws.com', @port = 587, @enable_ssl = 1, @username = 'Smtp_Username', @password = 'Smtp_Password'; GO
    참고

    보안 모범 사례로 여기에 표시된 프롬프트 이외의 보안 인증 정보를 지정하는 것이 좋습니다.

Database Mail 프로파일에 Database Mail 계정 추가

Database Mail 계정을 Database Mail 프로파일에 추가하려면 sysmail_add_profileaccount_sp 저장 프로시저를 사용합니다. 다음 예에서는 SES 프로파일에 Notifications 계정을 추가합니다.

프로파일에 계정을 추가하려면
  • 다음 SQL 문을 사용합니다.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'Notifications', @account_name = 'SES', @sequence_number = 1; GO

Database Mail 프로파일에 사용자 추가

msdb 데이터베이스 보안 주체에 Database Mail 프로파일을 사용할 권한을 부여하려면 sysmail_add_principalprofile_sp 저장 프로시저를 사용합니다. 보안 주체는 SQL Server 리소스를 요청할 수 있는 엔터티입니다. 데이터베이스 보안 주체는 SQL Server 인증 사용자, Windows 인증 사용자 또는 Windows 인증 그룹에 매핑되어야 합니다.

다음 예에서는 Notifications 프로파일에 대한 퍼블릭 액세스 권한을 부여합니다.

프로파일에 사용자를 추가하려면
  • 다음 SQL 문을 사용합니다.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_principalprofile_sp @profile_name = 'Notifications', @principal_name = 'public', @is_default = 1; GO

Amazon RDS Database Mail에 대한 저장 프로시저 및 함수

Microsoft는 계정 및 프로필 생성, 나열, 업데이트, 삭제하는 등, Database Mail을 사용할 수 있도록 저장 프로시저를 제공합니다. 또한 RDS는 다음 표에 나와 있는 Database Mail용 저장 프로시저 및 함수도 제공합니다.

프로시저/함수 설명
rds_fn_sysmail_allitems 다른 사용자가 전송한 메시지를 포함하여 전송된 메시지를 표시합니다.
rds_fn_sysmail_event_log 다른 사용자가 전송한 메시지에 대한 이벤트를 포함하여 이벤트를 표시합니다.
rds_fn_sysmail_mailattachments 다른 사용자가 전송한 메시지의 첨부 파일을 포함하여 첨부 파일을 표시합니다.
rds_sysmail_control 메일 대기열을 시작하고 중지합니다(DatabaseMail.exe 프로세스).
rds_sysmail_delete_mailitems_sp Database Mail 내부 테이블에서 모든 사용자가 보낸 이메일 메시지를 삭제합니다.

Database Mail을 사용하여 이메일 메시지 보내기

sp_send_dbmail 저장 프로시저를 사용하여 Database Mail을 통해 이메일 메시지를 보낼 수 있습니다.

사용량

EXEC msdb.dbo.sp_send_dbmail @profile_name = 'profile_name', @recipients = 'recipient1@example.com[; recipient2; ... recipientn]', @subject = 'subject', @body = 'message_body', [@body_format = 'HTML'], [@file_attachments = 'file_path1; file_path2; ... file_pathn'], [@query = 'SQL_query'], [@attach_query_result_as_file = 0|1]';

다음 파라미터는 필수 파라미터입니다.

  • @profile_name – 메시지를 보낼 Database Mail 프로파일의 이름입니다.

  • @recipients – 메시지를 보낼 이메일 주소의 세미콜론으로 구분된 목록입니다.

  • @subject – 메시지의 제목입니다.

  • @body – 메시지의 본문입니다. 선언된 변수를 본문으로 사용할 수도 있습니다.

다음 파라미터는 선택적입니다.

  • @body_format – 이 파라미터는 HTML 형식으로 이메일을 보내도록 선언된 변수와 함께 사용됩니다.

  • @file_attachments – 메시지 첨부 파일의 세미콜론으로 구분된 목록입니다. 파일 경로는 절대 경로여야 합니다.

  • @query – 실행할 SQL 쿼리입니다. 쿼리 결과는 파일로 첨부되거나 메시지 본문에 포함될 수 있습니다.

  • @attach_query_result_as_file – 쿼리 결과를 파일로 첨부할지 여부를 나타냅니다. 아니요(No)인 경우 0, 예(Yes)인 경우 1로 설정합니다. 기본값은 0입니다.

다음 예에서는 이메일 메시지를 보내는 방법을 보여 줍니다.

예 한 명의 수신자에게 메시지 전송
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Automated DBMail message - 1', @body = 'Database Mail configuration was successful.'; GO
예 여러 수신자에게 메시지 전송
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'recipient1@example.com;recipient2@example.com', @subject = 'Automated DBMail message - 2', @body = 'This is a message.'; GO
예 SQL 쿼리 결과를 첨부 파일로 전송
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test SQL query', @body = 'This is a SQL query test.', @query = 'SELECT * FROM abc.dbo.test', @attach_query_result_as_file = 1; GO
예 HTML 형식으로 메시지 전송
USE msdb GO DECLARE @HTML_Body as NVARCHAR(500) = 'Hi, <h4> Heading </h4> </br> See the report. <b> Regards </b>'; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test HTML message', @body = @HTML_Body, @body_format = 'HTML'; GO
예 데이터베이스에서 특정 이벤트가 발생할 때 트리거를 사용하여 메시지 전송
USE AdventureWorks2017 GO IF OBJECT_ID ('Production.iProductNotification', 'TR') IS NOT NULL DROP TRIGGER Purchasing.iProductNotification GO CREATE TRIGGER iProductNotification ON Production.Product FOR INSERT AS DECLARE @ProductInformation nvarchar(255); SELECT @ProductInformation = 'A new product, ' + Name + ', is now available for $' + CAST(StandardCost AS nvarchar(20)) + '!' FROM INSERTED i; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'New product information', @body = @ProductInformation; GO

메시지, 로그 및 첨부 파일 보기

RDS 저장 프로시저를 사용하여 메시지, 이벤트 로그 및 첨부 파일을 볼 수 있습니다.

모든 이메일 메시지를 보려면
  • 다음 SQL 쿼리를 사용합니다.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
모든 이메일 이벤트 로그를 보려면
  • 다음 SQL 쿼리를 사용합니다.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
모든 이메일 첨부 파일을 보려면
  • 다음 SQL 쿼리를 사용합니다.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();

메시지 삭제

rds_sysmail_delete_mailitems_sp 저장 프로시저를 사용하여 메시지를 삭제합니다.

참고

RDS는 DBMail 기록 데이터의 크기가 1GB에 도달하고 보존 기간이 24시간 이상인 경우 메일 테이블 항목을 자동으로 삭제합니다.

메일 항목을 장기간 보존하려는 경우 아카이빙할 수 있습니다. 자세한 내용은 Microsoft 설명서의 Database Mail 메시지 및 이벤트 로그를 아카이빙하기 위한 SQL Server 에이전트 작업 생성을 참조하세요.

모든 이메일 메시지를 삭제하려면
  • 다음 SQL 문을 사용합니다.

    DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE; GO
특정 상태의 이메일 메시지를 모두 삭제하려면
  • 실패한 메시지를 모두 삭제하려면 다음 SQL 문을 사용합니다.

    DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed'; GO

메일 대기열 시작

rds_sysmail_control 저장 프로시저를 사용하여 Database Mail 프로세스를 시작합니다.

참고

Database Mail을 활성화하면 메일 대기열이 자동으로 시작됩니다.

메일 대기열을 시작하려면
  • 다음 SQL 문을 사용합니다.

    EXECUTE msdb.dbo.rds_sysmail_control start; GO

메일 대기열 중지

rds_sysmail_control 저장 프로시저를 사용하여 Database Mail 프로세스를 중지합니다.

메일 대기열을 중지하려면
  • 다음 SQL 문을 사용합니다.

    EXECUTE msdb.dbo.rds_sysmail_control stop; GO

첨부 파일 작업

다음 첨부 파일 확장명은 RDS on SQL Server에서 보낸 Database Mail 메시지에서 지원되지 않습니다. .ade, .adp, .apk, .appx, .appxbundle, .bat, .bak, .cab, .chm, .cmd, .com, .cpl, .dll, .dmg, .exe, .hta, .inf1, .ins, .isp, .iso, .jar, .job, .js, .jse, .ldf, .lib, .lnk, .mde, .mdf, .msc, .msi, .msix, .msixbundle, .msp, .mst, .nsh, .pif, .ps, .ps1, .psc1, .reg, .rgs, .scr, .sct, .shb, .shs, .svg, .sys, .u3p, .vb, .vbe, .vbs, .vbscript, .vxd, .ws, .wsc, .wsf, .wsh.

Database Mail은 현재 사용자의 Microsoft Windows 보안 컨텍스트를 사용하여 파일에 대한 액세스를 제어합니다. SQL Server 인증을 사용하여 로그인하는 사용자는 @file_attachments 저장 프로시저와 함께 sp_send_dbmail 파라미터를 사용하여 파일을 첨부할 수 없습니다. Windows에서는 SQL Server가 원격 컴퓨터에서 다른 원격 컴퓨터로 자격 증명을 제공할 수 없습니다. 따라서 SQL Server를 실행하는 컴퓨터가 아닌 다른 컴퓨터에서 이 명령을 실행하면 Database Mail이 네트워크 공유에서 파일을 연결할 수 없습니다.

하지만 SQL Server 에이전트 작업을 사용하면 파일을 첨부할 수 있습니다. SQL Server 에이전트에 대한 자세한 내용은 Microsoft 설명서에서 SQL Server 에이전트의 사용SQL Server 에이전트를 참조하세요.

다중 AZ 배포에 대한 고려 사항

다중 AZ DB 인스턴스에 Database Mail을 구성하면 해당 구성이 보조 인스턴스에 자동으로 전파되지 않습니다. 다중 AZ 인스턴스를 단일 AZ 인스턴스로 변환하고 Database Mail을 구성한 다음 DB 인스턴스를 다시 다중 AZ로 변환하는 것이 좋습니다. 그러면 기본 노드와 보조 노드 모두에 Database Mail 구성이 적용됩니다.

Database Mail이 구성된 다중 AZ 인스턴스에서 읽기 전용 복제본을 생성하는 경우 해당 복제본은 구성을 상속하지만 SMTP 서버에 대한 암호는 상속하지 않습니다. 해당 암호로 Database Mail 계정을 업데이트합니다.

SMTP(포트 25) 제한 사항 제거

기본적으로 AWS는 RDS for SQL Server DB 인스턴스에 대한 SMTP(포트 25)의 아웃바운드 트래픽을 차단합니다. 이는 탄력적 네트워크 인터페이스 소유자의 정책에 따라 스팸을 방지하기 위해 수행됩니다. 필요한 경우 이 제한사항을 제거할 수 있습니다. 자세한 내용은 에서 Amazon EC2 인스턴스 또는 Lamda 함수에서 포트 25와 관련한 제한을 없애려면 어떻게 해야 하나요?를 참조하세요.