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.exe
은msdb
데이터베이스의 대기열에서 데이터를 읽고 이메일 메시지를 전송합니다.
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을 활성화하려면 다음 프로세스를 따릅니다.
-
새 파라미터 그룹을 생성해야 합니다.
-
파라미터 그룹을 수정하여
database mail xps
파라미터를 1로 설정합니다. -
파라미터 그룹을 DB 인스턴스에 연결합니다.
Database Mail의 파라미터 그룹 생성
DB 인스턴스의 SQL Server 에디션 및 버전에 해당하는 database mail xps
파라미터의 파라미터 그룹을 생성합니다.
참고
기존 파라미터 그룹을 수정할 수도 있습니다. Database Mail을 활성화하는 파라미터 수정의 절차를 따르십시오.
다음 예에서는 SQL Server Standard Edition 2016에 대한 파라미터 그룹을 생성합니다.
파라미터 그룹을 생성하려면
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. -
탐색 창에서 파라미터 그룹을 선택합니다.
-
[Create parameter group]을 선택합니다.
-
서브넷 그룹 생성 창에서 다음을 수행합니다.
-
파라미터 그룹 패밀리에서 sqlserver-se-13.0을 선택합니다.
-
그룹 이름에 파라미터 그룹의 식별자(예:
dbmail-sqlserver-se-13
)를 입력합니다. -
설명에
Database Mail XPs
를 입력합니다.
-
-
생성(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에 대해 생성한 파라미터 그룹을 수정합니다.
파라미터 그룹을 수정하려면
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. -
탐색 창에서 파라미터 그룹을 선택합니다.
-
파라미터 그룹(예: ssis-sqlserver-se-13)을 선택합니다.
-
파라미터에서 파라미터 목록을
mail
로 필터링합니다. -
[database mail xps]를 선택합니다.
-
파라미터 편집을 선택합니다.
-
1
를 입력합니다. -
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 인스턴스와 연결할 수 있습니다.
-
새 DB 인스턴스의 경우 인스턴스를 시작할 때 연결합니다. 자세한 내용은 Amazon RDS DB 인스턴스 생성 섹션을 참조하세요.
-
기존 DB 인스턴스의 경우 인스턴스를 수정하여 연결합니다. 자세한 내용은 Amazon RDS DB 인스턴스 수정 단원을 참조하십시오.
Database Mail 파라미터 그룹을 신규 또는 기존 DB 인스턴스와 연결할 수 있습니다.
Database Mail 파라미터 그룹을 사용하여 DB 인스턴스를 생성하려면
-
파라미터 그룹을 생성할 때 사용한 것과 동일한 DB 엔진 유형과 메이저 버전을 지정합니다.
대상 LinuxmacOS, 또는Unix:
aws rds create-db-instance \ --db-instance-identifier
mydbinstance
\ --db-instance-classdb.m5.2xlarge
\ --enginesqlserver-se
\ --engine-version13.00.5426.0.v1
\ --allocated-storage100
\ --manage-master-user-password \ --master-usernameadmin
\ --storage-typegp2
\ --license-modelli
--db-parameter-group-namedbmail-sqlserver-se-13
Windows의 경우:
aws rds create-db-instance ^ --db-instance-identifier
mydbinstance
^ --db-instance-classdb.m5.2xlarge
^ --enginesqlserver-se
^ --engine-version13.00.5426.0.v1
^ --allocated-storage100
^ --manage-master-user-password ^ --master-usernameadmin
^ --storage-typegp2
^ --license-modelli
^ --db-parameter-group-namedbmail-sqlserver-se-13
DB 인스턴스를 수정하고 Database Mail 파라미터 그룹을 연결하려면
-
다음 명령 중 하나를 사용합니다.
대상 LinuxmacOS, 또는Unix:
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --db-parameter-group-namedbmail-sqlserver-se-13
\ --apply-immediatelyWindows의 경우:
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --db-parameter-group-namedbmail-sqlserver-se-13
^ --apply-immediately
Database Mail 구성
Database Mail을 구성하려면 다음 태스크를 수행합니다.
Database Mail 프로파일을 생성합니다.
Database Mail 계정을 생성합니다.
Database Mail 계정을 Database Mail 프로파일에 추가합니다.
Database Mail 프로파일에 사용자를 추가합니다.
참고
Database Mail을 구성하려면 execute
데이터베이스의 저장 프로시저에 대한 msdb
권한이 있는지 확인합니다.
Database Mail 프로파일 생성
Database Mail 프로파일을 생성하려면 sysmail_add_profile_spNotifications
라는 프로파일을 생성합니다.
프로파일을 생성하려면
-
다음 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_spSES
라는 이름의 계정을 생성합니다.
Amazon SES를 사용하려면 다음 파라미터가 필요합니다.
-
@email_address
- Amazon SES에서 확인된 자격 증명입니다. 자세한 내용은 Amazon SES에서 확인된 자격 증명을 참조하세요. -
@mailserver_name
- Amazon SES SMTP 엔드포인트입니다. 자세한 내용은 Amazon SES SMTP 엔드포인트에 연결을 참조하세요. -
@username
- Amazon SES SMTP 사용자 이름입니다. 자세한 내용은 Amazon SES SMTP 자격 증명 받기를 참조하세요.AWS Identity and Access Management 사용자 이름을 사용하지 마세요.
-
@password
- Amazon SES SMTP 암호입니다. 자세한 내용은 Amazon SES SMTP 자격 증명 받기를 참조하세요.
계정을 생성하려면
-
다음 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_spSES
프로파일에 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
다음 예에서는 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_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
사용량
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와 관련한 제한을 없애려면 어떻게 해야 하나요?