Amazon RDS for SQL Server でのデータベースメールの使用 - Amazon Relational Database Service

Amazon RDS for SQL Server でのデータベースメールの使用

データベースメールを使用して、SQL Server データベースインスタンスの Amazon RDS からユーザーに E メールメッセージを送信できます。メッセージには、ファイルとクエリ結果を含めることができます。データベースメールは、次のコンポーネントを含みます。

  • 設定オブジェクトおよびセキュリティオブジェクト – これらのオブジェクトは 、プロファイルとアカウントを作成し、msdb データベースに保存されます。

  • メッセージングオブジェクト – これらのオブジェクトは、メッセージの送信に使用する sp_send_dbmail ストアドプロシージャと、メッセージに関する情報を保持するデータ構造を含みます。それらは msdb データベースに保存されます。

  • ログオブジェクトと監査オブジェクト – データベースメールは、msdb データベースと Microsoft Windows アプリケーションイベントログにログ情報を書き込みます。

  • データベースメール 実行可能ファイルDatabaseMail.exe は、msdb データベースのキューから読み取り、E メールメッセージを送信します。

RDS は、Web Edition、Standard Edition、および Enterprise Edition の SQL Server のすべてのバージョンで、データベースメールをサポートします。

制限事項

SQL Server DB インスタンスでのデータベースメールの使用には、次の制約事項が適用されます。

  • データベースメールは、SQL Server Express Edition ではサポートされていません。

  • データベースメールの設定パラメータの変更はサポートされていません。プリセット (デフォルト) の値を表示するには、sysmail_help_configure_sp ストアドプロシージャを使用します。

  • 添付ファイルは、完全にはサポートされていません。詳細については、「添付ファイルの使用」を参照してください。

  • 添付ファイルの最大サイズは 1 MB です。

  • データベースメールは、マルチ AZ DB インスタンスで追加の設定が必要です。詳細については、「マルチ AZ 配置に関する考慮事項」を参照してください。

  • 定義済み演算子に E メールメッセージを送信する SQL Server エージェントの設定はサポートされていません。

データベースメールの有効化

DB インスタンスでデータベースメールを有効にするには、次の手順に従います。

  1. 新しいパラメータグループを作成します。

  2. パラメータグループを変更して、database mail xps パラメータを 1 に設定します。

  3. パラメータグループを DB インスタンスに関連付けます。

データベースメールパラメータグループの作成

DB インスタンスの SQL Server のエディションとバージョンに対応する database mail xps パラメータのパラメータグループを作成します。

注記

既存のパラメータグループを変更することもできます。「データベースメールを有効にするパラメータの変更」 の手順に従います。

次の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

パラメータグループを作成するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/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 のパラメータグループを作成します。

パラメータグループを作成するには
  • 以下のいずれかのコマンドを使用します。

    Linux、macOS、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"

データベースメールを有効にするパラメータの変更

DB インスタンスの SQL Server のエディションとバージョンに対応するパラメータグループの database mail xps パラメータを変更します。

データベースメールを有効にするには、database mail xps パラメータを 1 に設定します。

次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

パラメータグループを変更するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[パラメータグループ] を選択します。

  3. [dbmail-sqlserver-se-13] などのパラメータグループを選択します。

  4. [パラメータ] で、パラメータのリストを mail でフィルタ処理します。

  5. [データベースメール xps] を選択します。

  6. [Edit parameters] を選択します。

  7. 1 と入力します。

  8. [Save changes] (変更の保存) をクリックします。

次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

パラメータグループを変更するには
  • 以下のいずれかのコマンドを使用します。

    Linux、macOS、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 を使用して、データベースメールパラメータグループを DB インスタンスに関連付けることができます。

データベースメールパラメータグループを新規または既存の DB インスタンスに関連付けることができます。

データベースメールパラメータグループを新規または既存の DB インスタンスに関連付けることができます。

データベースメールパラメータグループを使用して DB インスタンスを作成するには
  • パラメータグループの作成時に使用したものと同じ DB エンジンのタイプとメジャーバージョンを指定します。

    Linux、macOS、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 インスタンスを変更し、データベースメールパラメータグループを関連付けるには
  • 以下のいずれかのコマンドを使用します。

    Linux、macOS、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

データベースメールの設定

データベースメールを設定するには、次のタスクを実行します。

  1. データベースメールプロファイルを作成します。

  2. データベースメールアカウントを作成します。

  3. データベースメールアカウントをデータベースメールプロファイルに追加します。

  4. データベースメールプロファイルにユーザーを追加します。

注記

データベースメールを設定するには、execute データベースのストアドプロシージャに msdb アクセス権限があることを確認します。

データベースメールプロファイルの作成

データベースメールプロファイルを作成するには、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

データベースメールアカウントの作成

データベースメールアカウントを作成するには、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
    注記

    セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

データベースメールアカウントのデータベースメールプロファイルへの追加

データベースメールアカウントをデータベースメールプロファイルに追加するには、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

データベースメールプロファイルへのユーザーの追加

msdb データベースプリンシパルにデータベースメールプロファイルを使用するアクセス権限を付与するには、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 ストアドプロシージャと関数

Microsoft が提供するストアドプロシージャにより、データベースメールの使用 (アカウントやプロファイルの作成、一覧表示、更新、削除) が可能です。加えて、RDS は、次の表に示すストアドプロシージャおよびデータベースメールの機能を提供します。

プロシージャ/関数 説明
rds_fn_sysmail_allitems 送信メッセージ (他のユーザーの送信メッセージを含む) を表示します。
rds_fn_sysmail_event_log イベント (他のユーザーの送信メッセージのイベントを含む) を表示します。
rds_fn_sysmail_mailattachments 添付ファイル (他のユーザーの送信メッセージの添付ファイルも含む) を表示します。
rds_sysmail_control メールキュー (DatabaseMail.exe プロセス) を開始および停止します。
rds_sysmail_delete_mailitems_sp すべてのユーザーが送信した E メールメッセージをデータベースメール内部テーブルから削除します。

データベースメールを使用した E メールメッセージの送信

データベースメールを使用して E メールメッセージを送信するには、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 – メッセージの送信元となるデータベースメールプロファイル名

  • @recipients – メッセージの送信先となるセミコロン区切りの E メールアドレスリスト

  • @subject – メッセージの件名

  • @body – メッセージの本文 宣言された変数を本文として使用することもできます。

以下のパラメータはオプションです。

  • @body_format – このパラメータは、HTML 形式で E メールを送信するため、宣言された変数と共に使用します。

  • @file_attachments – セミコロン区切りのメッセージ添付ファイルリスト。ファイルパスは絶対パスである必要があります。

  • @query – 実行する SQL クエリ クエリ結果は、ファイルで添付することも、メッセージの本文に含めることもできます。

  • @attach_query_result_as_file – クエリ結果をファイルでアタッチするかどうか。[いいえ] の場合は 0、[はい] の場合は 1 に設定します。デフォルトは 0 です。

次の例は、E メールメッセージを送信する方法をデモンストレーションします。

例 単一の受信者へのメッセージの送信の
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 ストアドプロシージャを使用して、メッセージ、イベントログ、および添付ファイルを表示します。

すべての E メールメッセージを表示するには
  • 次の SQL クエリを使用します。

    SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
すべての E メールイベントログを表示するには
  • 次の SQL クエリを使用します。

    SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
すべての E メールの添付ファイルを表示するには
  • 次の SQL クエリを使用します。

    SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();

メッセージの削除

rds_sysmail_delete_mailitems_sp ストアドプロシージャを使用して、メッセージを削除します。

注記

RDS は、データベースメール履歴データのサイズが 1 GB に達すると、メールテーブル項目を自動的に削除します。保持期間は最短 24 時間です。

メールアイテムを長期間保持する場合、アーカイブできます。詳細については、Microsoft ドキュメントの「データベースメールメッセージとイベントログをアーカイブする SQL Server Agent ジョブの作成」を参照してください。

E メールメッセージをすべて削除するには
  • 次の SQL 文を使用します。

    DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE; GO
特定のステータスの E メールメッセージをすべて削除するには
  • 失敗したメッセージをすべて削除するには、次の SQL ステートメントを使用します。

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

メールキューの開始

rds_sysmail_control ストアドプロシージャを使用して、データベースメールプロセスを開始します。

注記

データベースメールを有効にすると、メールキューが自動的に開始します。

メールキューを開始するには
  • 次の SQL 文を使用します。

    EXECUTE msdb.dbo.rds_sysmail_control start; GO

メールキューの停止

rds_sysmail_control ストアドプロシージャを使用して、データベースメールプロセスを停止します。

メールキューを停止するには
  • 次の SQL 文を使用します。

    EXECUTE msdb.dbo.rds_sysmail_control stop; GO

添付ファイルの使用

SQL Server の RDS からのデータベースメールメッセージでは、次の添付ファイル拡張子をサポートしていません。.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

データベースメールは、現在のユーザーの Microsoft Windows セキュリティコンテキストを使用して、ファイルへのアクセスを制御します。SQL Server 認証でログインするユーザーは、@file_attachments ストアドプロシージャでsp_send_dbmail パラメータを使用してファイルをアタッチすることはできません。Windows では、リモートコンピュータから別のリモートコンピュータに、SQL Server が認証情報を提供することはできません。したがって、データベースメールは、SQL Server を実行しているコンピュータ以外のコンピュータからコマンドを実行すると、ネットワーク共有からファイルをアタッチすることはできません。

ただし、SQL Server Agent ジョブを使用して、ファイルをアタッチすることができます。SQL Server Agent の詳細については、Microsoft ドキュメントの「SQL Server エージェントの使用」および「SQL Server Agent」を参照してください。

マルチ AZ 配置に関する考慮事項

マルチ AZ DB インスタンスでデータベースメールを設定しても、設定はセカンダリに自動的には反映されません。マルチ AZ インスタンスをシングル AZ インスタンスに変換し、データベースメールを設定した後に、DB インスタンスをマルチ AZ に戻すことをお勧めします。次に、プライマリノードとセカンダリノードの両方に、データベースメールの設定があります。

データベースメールを設定したマルチ AZ インスタンスからリードレプリカを作成すると、レプリカはその設定を継承しますが、SMTP サーバーのパスワードは継承しません。パスワードを使用して、データベースメールアカウントを更新します。

SMTP (ポート 25) 制限の削除

デフォルトでは、AWS は RDS for SQL Server DB インスタンスの SMTP (ポート 25) でのアウトバウンドトラフィックをブロックします。これは、Elastic Network Interface 所有者のポリシーに基づいてスパムを防ぐために行われます。必要に応じて、この制限を削除できます。詳細については、「Amazon EC2 インスタンスまたは Lambda 関数のポート 25 の制限を解除するにはどうすればよいですか?」を参照してください。