Amazon Web Services ブログ

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

2023 年 7 月 : この投稿には、オンプレミスの SMTP サーバーを使用してデータベース メールを構成する手順が追加されました。

Amazon RDS for SQL Server が SQL Server データベース メールを完全にサポートするようになったことを発表できることを嬉しく思います。このリリースより前にデータベース メールを有効にするには、リンク サーバーの使用などさまざまな回避策を使用する必要がありました。SQL Server 用データベース メールのリリースでは、DB パラメータ グループを使用してデータベース メールをシームレスに有効にすることができます。

データベース メールは、Microsoft SQL Server で頻繁に使用される機能の 1 つです。データベース メールを使用すると、SMTP (Simple Mail Transfer Protocol) サーバーを使用して SQL Server からユーザーにメッセージを送信できます。この投稿では、データベース メールを設定し、Amazon Simple Email Service (Amazon SES) 経由で RDS for SQL Server DB インスタンスから E メールを送信する方法を学びます。

データベース メールの一般的なユースケースは次のとおりです。

  • テキストメッセージの送信
  • クエリ結果またはレポートをテキストまたは添付ファイルとして送信
  • プロシージャまたはジョブ内でプログラムによる電子メール通知の送信

この投稿では、次の AWS サービスを使用します。

  • Amazon RDS for SQL Server – データベース メールは、SQL Server の Web、Standard および Enterprise エディションでサポートされています。
  • Amazon SES – Amazon SES を SMTP サーバーとして使用します。これは 1 つのオプションにすぎません。代わりに、別の SMTP サーバーを使用することもできます。その場合は、Amazon SES のセットアップに関する次のセクションをスキップしてください。

Amazon SES のセットアップ

Amazon SES を SMTP サーバーとして使用して、電子メールを迅速に送信します。 Amazon SES は、あらゆるアプリケーション内から E メールを送信できるコスト効率が高い柔軟でスケーラブルな E メール サービスです。まず、次の手順を実行します。

  1. Amazon SES コンソールで、[SMTP 設定] を選択します。
  2. サーバー名」と「ポート」の値に注目してください。
  3. [SMTP 認証情報の作成] を選択します。

注意 : Amazon SES SMTP インターフェイス経由で E メールを送信するために使用する認証情報は、各 AWS リージョンで固有です。詳細については、「Amazon SES SMTP 認証情報の取得」を参照してください。

  1. AWS Identity and Access Management の名前を入力します。
  2. (IAM) ユーザーにするか、デフォルトのままにします。
  3. 作成」を選択します。
  4. SMTP 認証情報を安全な場所に保存します。ダウンロードできるのはこのときだけです。

  1. Amazon SES コンソールで、[E メールアドレス] を選択します。
  2. [新しいメール アドレスの確認] を選択します。
  3. 確認メールを受信するには、所有しているメール アドレスを入力してください。
  4. メールを確認すると、「検証ステータス」に認証済みと表示されます。

この時点で、SMTP サーバーに関する必要な情報がすべて揃ったので、データベース メールの構成を開始することができます。

データベース メールのセットアップ

データベース メールを構成する前に、まず DB パラメータ グループを通じてデータベース メールを有効にします。

DB パラメータ グループによるデータベース メールの有効化

データベース メールは、RDS インスタンスでは DB パラメータグループを通じて 有効にします。 Amazon RDS では、パラメータグループは、1 つ以上の DB インスタンスに適用されるエンジン設定値のコンテナとして機能します。各 RDS インスタンスには、デフォルトのパラメータ グループが関連付けられています。ただし、変更することはできません。新しいパラメータグループを使用することも、既存の作成済みパラメータ グループを使用することもできます。既存のパラメータグループを選択する場合は、SQL Server インスタンスのエディションとバージョンがサポートされている必要があります。新しいパラメータグループの作成の詳細については、「DB パラメータ グループの操作」を参照してください。パラメータ グループを通じてデータベース メールを有効にするには、次の手順を実行します。

  1. Amazon RDS コンソールで、[パラメータグループ] を選択します。
  2. 使用するパラメータグループを選択します。
  3. 検索ボックスに「database mail xps」と入力します。

  1. 編集」を選択して値を変更します。
  2. [] で 1 を選択します。
  3. 変更を保存します。
  4. Amazon RDS コンソールで、[データベース] を選択します。
  5. 使用するインスタンスを選択します。
  6. 変更」を選択します。

  1. データベース オプション」で、database mail xps に1 が設定されているパラメータグループを選択します。
  2. 続行」を選択します。
  3. 変更のスケジュール」で、「すぐに適用」を選択します。
  4. [DB インスタンスを変更] を選択して変更を適用します。

パブリックサブネット内のインスタンスのデータベースメールの構成

次の図は、データベース メール構成の例を示しています。 User1 は、Profile 1 を介してアカウント 1 とアカウント 2 にアクセスできます。User2 は、両方のプロファイルを介してすべてのアカウントにアクセスできます。 User3 は、Profile 2 を介してアカウント 2 とアカウント 3 にアクセスできます。

データベース メールを使用する前に、メール構成をセットアップする必要があります。

  1. SQL Server Management Studioを起動します。
  2. データベース メールが有効になっている RDS インスタンスの SQL Server エンジンに接続します。
  3. 新しいクエリを開きます。

次のストアド プロシージャを使用して、単純なデータベース メール構成を作成します。

  1. データベース メール プロファイルを作成します (プロファイルは電子メール アカウントを保存するために使用されるコンテナです)。次のコードを参照してください。
use msdb 
go 

EXECUTE msdb.dbo.sysmail_add_profile_sp 
@profile_name = 'Notifications', 
@description = 'Profile used for sending outgoing notifications using SES.' ;
  1. プロファイルにプリンシパルを追加します。 public を使用すると、すべてのユーザーがプロファイルにアクセスできるようになります。
use msdb 
go 

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

必要に応じてデータベース メール オブジェクトに対するアクセス許可を付与できますが、現時点では public で問題ありません。

  1. データベース メール アカウントを作成します (必ず正しい SMTP 資格情報を入力してください)。
use msdb
go 

EXECUTE msdb.dbo.sysmail_add_account_sp 
@account_name = 'Acc1', 
@description = 'Mail account for sending outgoing notifications.', 
@email_address = 'example@example.com', 
@display_name = 'Automated Mailer', 
@mailserver_name = 'email-smtp.us-west-2.amazonaws.com',
@port = 587,
@enable_ssl = 1,
@username = 'SMTP-username',
@password = 'SMTP-password';

この手順は、パブリック サブネットでホストされている RDS インスタンスに適しています。ただし、RDS インスタンスがプライベート サブネットに配置されている場合は、次のセクションで詳細なガイダンスを参照してください。

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

EXECUTE msdb.dbo.sysmail_add_profileaccount_sp 
@profile_name = 'Notifications', 
@account_name = 'Acc1', 
@sequence_number = 1;

プライベート・サブネット内のインスタンスのデータベース・メールの構成

RDS for SQL Server インスタンスがプライベート サブネットでホストされている場合は、Amazon SES の VPC エンドポイントを使用する必要があります。これにより、RDS for SQL Server インスタンスと SMTP サーバー間の通信が可能になります。先に進む前に、まず前のセクションのステップ 1 ~ 5 を完了することが重要です。これらの最初のステップは、その後のステップの基礎となります。

SES の VPC エンドポイントのセキュリティグループの作成

  1. Amazon VPC コンソールを開きます
  2. SES VPC エンドポイントのセキュリティ グループを作成します。
  3. 新しいインバウンドルールを作成します。
  4. [タイプ] で、[カスタム TCP] を選択します。
  5. [ポート範囲] に、電子メールの送信に使用するポート番号を入力します。 25、465、587 を使用できます。
  6. [ソース タイプ] で、[カスタム] を選択します。 [ソース] に、RDS for SQL Server インスタンスにアタッチされているセキュリティ グループを入力します。

VPC エンドポイントの作成

  1. Amazon VPC コンソールを開き、[エンドポイント] を選択します。
  2. 「エンドポイントの作成」を選択します。

  1. 名前を入力します。
  2. [サービス カテゴリ] で [AWS サービス] を選択します。
  3. 「サービス」で「smtp」を検索し、そのリージョンに固有の SMTP VPC エンドポイントを選択します。

  1. 「VPC」セクションで、このエンドポイントが作成される VPC を選択します。
  2. 追加設定では、デフォルトで DNS 名の DNS 名を有効化にチェック、DNS レコードの IP タイプでは Ipv4 がチェックされていることを確認してください。
  3. 「サブネット」で、アベイラビリティーゾーン内のサブネットを選択します。
  4.  [セキュリティ グループ] で、前に作成したセキュリティ グループを選択します。
  5. 「エンドポイントの作成」をクリックします。
  6. VPC エンドポイントが利用可能な状態になったら、エンドポイントを選択し、DNS フィールドで見つかった最初のエントリをコピーします。

  1. SMTP サーバー名の代わりに、前に作成した VPC エンドポイントの DNS 名を使用してデータベース メール アカウントを作成します。 (必ず正しい SMTP 資格情報を入力してください)
use msdb
go 

EXECUTE msdb.dbo.sysmail_add_account_sp 
@account_name = 'Acc1', 
@description = 'Mail account for sending outgoing notifications.', 
@email_address = 'example@example.com', 
@display_name = 'Automated Mailer', 
@mailserver_name = 'vpce-XXXXX-XXXX.email-smtp.us-west-2.vpce.amazonaws.com', -- VPC endpoint created in previous step
@port = 587,
@enable_ssl = 1,
@username = 'SMTP-username', 
@password = 'SMTP-password';
  1. データベース メール アカウントをデータベース メール プロファイルに追加します。
use msdb
go 

EXECUTE msdb.dbo.sysmail_add_profileaccount_sp 
@profile_name = 'Notifications', 
@account_name = 'Acc1', 
@sequence_number = 1; 

テストメールの送信

ストアド プロシージャ sp_send_dbmail を実行して電子メールを送信します (次のコードを参照)。受信者は、Amazon SES シミュレーターを使用して、メールの送信が成功したかどうかを簡単にテストできます。その他のテスト オプションについては、「メールボックス シミュレーターの使用」を参照してください。実際の受信者に送信したい場合は、このプロセスを繰り返して追加の電子メール アドレスを確認する必要があります。

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Notifications',
@recipients = 'success@simulator.amazonses.com',
@body = 'The database mail configuration was completed successfully.',
@subject = 'Automated Success Message';
GO

次に、次に示すストアド プロシージャを実行してすべての電子メール アイテムを表示します。

SELECT * FROM msdb.dbo.sysmail_allitems

sent_status 列で、ステータスが送信されたことを確認します。

オンプレミスの SMTP サーバーを使用したデータベース メールの構成

一部の顧客は、オンプレミスの SMTP サーバーを使用して Amazon RDS for SQL Server でメールを設定したいと考えていました。このセクションでは、オンプレミスの SMTP サーバーをメール サーバーとして使用して、RDS for SQL Server DB インスタンスから電子メールを送信するようにデータベース メールを構成する方法について詳しく説明します。

前提条件

次の前提条件を満たしている必要があります。

  • 前のセクションの DB パラメータ グループを通じて database mail xps が有効になっている DB パラメータを持つ RDS for SQL Server インスタンスであること
  • SMTP サーバーでの認証に有効な資格情報を持つオンプレミス SMTP サーバーであること
  • オンプレミス SMTP サーバーの構成を変更するための十分なアクセス権限を持つこと

オンプレミスの SMTP サーバー接続を確認する

オンプレミスの SMTP サーバーが正しく構成されており、電子メールを送信できることを確認します。次のことを確認してください。

  • SMTP サーバー アドレス – SMTP サーバーの IP アドレスまたはホスト名を取得します。
  • ポート番号 – SMTP サーバーで使用されるポート番号をメモします (通常、暗号化されていない接続の場合はポート 25、TLS/SSL 暗号化された接続の場合はポート 587 )。
  • 認証資格情報 – SMTP サーバーでの認証に必要なユーザー名とパスワードがあることを確認します。
  • 暗号化要件 – SMTP サーバーに安全な接続 (TLS/SSL) が必要かどうかを決定します。

ネットワーク接続を有効にする

ネットワーク接続を有効にするには、次の手順を実行します。

  1. SMTP サーバーは AWS ネットワークの外部に存在するため、サーバーが指定された IP 範囲内の Amazon RDS for SQL Server からの接続を許可していることを検証する必要があります。 Amazon RDS for SQL Server の IP 範囲またはパブリック IP が SMTP サーバーの許可リストに含まれていることを確認する必要があります。これを実現するための具体的な手順は、組織のポリシーや設定によって異なる場合があることに注意してください。
  2. RDS for SQL Server インスタンスのセキュリティ グループを変更し、SMTP サーバーからの接続を許可する新しい受信ルールを追加します。
  3. RDS インスタンスが実行されている AWS アカウントでは、ポート 25 がデフォルトでスロットルされます。ポート 25 がブロックされていないことを確認するには、AWS に SMTP (ポート 25) スロットリングを削除するようにリクエストする必要があります。これを行うには、電子メール送信制限の削除リクエスト フォームを使用します。
  4. SMTP サーバーの DNS を解決するための Amazon Route 53 ルールを追加します。これにより、RDS インスタンスから電子メールを送信するときに SMTP サーバーのドメインが解決されます。

データベースメールの構成

次の手順でデータベース メールを構成します。

  1. パブリック サブネット内のインスタンスのデータベース メールの構成」セクションと同じ手順に従って、データベース メールを設定します。
  2. データベース メール アカウントを作成するとき、メール サーバー名には、オンプレミスの SMTP サーバー名または IP (例えば mysmtpsvr.com など) を使用します。
  3. データベース メール アカウントを作成します (必ず正しい SMTP 資格情報を入力してください)。
use msdb
go 

EXECUTE msdb.dbo.sysmail_add_account_sp 
@account_name = 'Acc1', 
@description = 'Mail account for sending outgoing notifications.', 
@email_address = 'example@example.com', 
@display_name = 'Automated Mailer', 
@mailserver_name = 'mysmtpsvr.com',
@port = 587,
@enable_ssl = 1,
@username = 'On-Prem-SMTP-username',
@password = 'On-Prem-SMTP-password';
  1. データベース メール アカウントをデータベース メール プロファイルに追加します。
use msdb
go

EXECUTE msdb.dbo.sysmail_add_profileaccount_sp 
@profile_name = 'Notifications', 
@account_name = 'Acc1', 
@sequence_number = 1;

結論

この投稿では、Amazon SES を使用してデータベース メールを設定する方法を説明しました。 SQL Server 用データベース メールのリリースにより、データベース メールを有効にして使用するための回避策を見つける必要がなくなりました。このソリューションは、他のサードパーティ SMTP サーバーにも使用できます。今すぐ AWS マネジメントコンソールでデータベースメールを試して、コメントであなたの考えや経験を共有してください。


About the authors

Andrew Zhou は、アマゾン ウェブ サービスのソフトウェア開発エンジニアです。彼は AWS RDS チームと協力して、商用データベース エンジンと SQL Server に重点を置いています。彼は技術的な課題に取り組むことを楽しんでおり、新しいテクノロジーを学ぶことに情熱を持っています。

Chandra Shekar Ramavath iは、アマゾン ウェブ サービスのデータベース エンジニアです。彼は AWS RDS チームと協力して、商用データベース エンジン、SQL Server、Oracle に重点を置いています。

Sid Vantair は、戦略アカウントを担当する AWS のソリューション アーキテクトです。リレーショナル データベースを扱う 10 年以上の経験を持つ彼は、顧客のハードルを克服するために複雑な技術的問題を解決することに熱心に取り組んでいます。仕事以外では、家族と過ごす時間を大切にし、子供たちの好奇心を育んでいます。

Bharath Kumar は、AWS プロフェッショナル サービス チームのリード データベース コンサルタントです。彼は、顧客がオンプレミス データセンターから AWS クラウドにデータベースを移行できるようにサポートし、また商用データベース エンジンから Amazon のオープンソース データベースへの移行もサポートしてきました。

Nishad Mankar は、AWS プロフェッショナル サービスのリード データベース コンサルタントです。彼は、顧客が AWS クラウド上でデータベースを移行して最新化できるよう支援しています。

 

 

 

翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。