Amazon Web Services ブログ

Amazon RDS for SQL Server でデータベースメールをパワーアップ – アンダーアーマーが Amazon RDS for SQL Server でデータベースメールを運用する方法

データベースメールは Microsoft SQL Server で多用される機能の 1 つです。データベースメールは、SMTP サーバーを使用することにより、SQL Server からユーザーにメッセージを送信できるようにします。ここでご紹介するソリューションは、ご使用の SQL Server ワークロードが Amazon RDS 上にある場合に、データベースメールを使用するのに役立ちます。

データベースメールの使用例:

  • テキストメッセージを送信する
  • テキストまたはファイル添付でクエリの結果またはレポートを送信する
  • エラーや通知のアラートを送信する
  • ジョブが成功または失敗したときに、SQL エージェントジョブのステータスメッセージを送信する

AWS のカスタマーであるアンダーアーマー社では、SQL Server のワークロードを Amazon RDS for SQL Server に移行する手立てを模索していましたが、RDS でデータベースメールがサポートされていないことがネックとなっていました。SQL のワークロードを Amazon RDS へ移行しようとしているカスタマーにとって、この問題は致命的です。

私はアンダーアーマー社のデータアーキテクト、Leonard Humphries とともにこの問題に対処することになり、2 人で次のようなソリューションを思いつきました。私たちは集中データベースメールハブに SQL Amazon EC2 インスタンスをプロモートしたのです。こうすることで、アンダーアーマー社のデータベースメール問題を解決できました。この記事では私たちのソリューションについて解説します。

使用した AWS のサービス

  • Amazon RDS for SQL Server
  • 既存の SMTP サーバーをお持ちでない場合は Amazon Simple Email Service (Amazon SES)
  • Amazon Elastic Compute Cloud (Amazon EC2) インスタンス (SQL Server を含む)このインスタンスは、 Amazon RDS for SQL Server と同じ VPC に存在する必要があります。

Amazon RDS for SQL Server にデータベースメールを組み込む手順

  • ステップ 1: EC2 インスタンス (SQL Server を含む) 上で、データベースメールをセットアップする
  • ステップ 2: Amazon RDS for SQL Server とご使用の EC2 インスタンス間で、リンクサーバーをセットアップする
  • ステップ 3: リンクサーバー経由で Amazon RDS から EC2 インスタンスでホストされているリモート sp_send_dbmail ストアドプロシージャを呼び出す

こちらの図では、ソリューションの概要を見ることができます。

ステップ 1: EC2 インスタンス (SQL Server を含む) 上で、データベースメールをセットアップする

SQL Server 上でデータベースメールを有効化する

EXEC sp_configure 'show advanced options', '1';
RECONFIGURE
GO
Exec sp_configure 'Database Mail XPs',1
RECONFIGURE
GO

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

  1. EC2 SQL Server に接続する
  2. プラス (+) 記号をクリックして [Management] (管理) を開く
  3. 以下の図に示したように、[Database Mail] (データベースメール) を右クリックして、[Configure Database Mail] (データベースメールの設定) を選択する
  4. [Next] (次へ) を選択する
  5. [Setup Database Mail by performing the following tasks] (次のタスクを実行することで Setup Database Mail をセットアップする) を選択する
  6. [Next] (次へ) を選択する
  7. プロファイルの名前を入力し、以下のスクリーンショットに示すように必要であれば説明を追加する
  8. [Add] (追加) を選択して、詳細を入力する。ここではメールサーバーとして SES を使用し、メールの送信を行います。
    • メールの送信元となる SQL サーバーのメール ID を入力する
    • SMTP サーバー名を入力するこれは私の SES サーバー URL です。
    • ポート番号を入力する
    • 認証情報を入力する

    SES にはメールサイズ上限 10 MB などの送信制限があります。この制限は独自のオンプレミスのメールサーバーまたはセルフマネージドのメールサーバーを使用した場合、該当しません。

  9. [Finish] (終了) を選択する
  10. [Next] (次へ) を選択する
  11. [Manage Profile Security] (プロファイルセキュリティの管理) の下で、以下に示すように、チェックボックスとデフォルトを選択してプロファイルをパブリックに指定する
  12. [Next] (次へ) を選択する
  13. [System Parameters] (システムパラメータ) のデフォルト設定を受け入れる
  14. [Next] (次へ) > [Finish ] (終了) > [Close] (閉じる) の順に選択する

複数の RDS インスタンスを使用するときは、7 ~ 14 のステップを繰り返し、インスタンスにリンクされたサーバーとともに、パブリックプロファイルをさらに作成します。

ステップ 2: Amazon RDS for SQL Server とご使用の EC2 インスタンス間で、リンクサーバーをセットアップする

同僚の Richard Waymire が RDS for SQL Server と EC2 インスタンス (SQL Server を含む) 間でのリンクサーバーをセットアップする際の手順について大変役立つブログ記事を書きました。詳細についてはその記事を参考にして、リンクサーバーをセットアップしてください。

ステップ 3: リンクサーバー経由で Amazon RDS から EC2 インスタンスでホストされているリモート sp_send_dbmail ストアドプロシージャを呼び出す

次に、以下に示すように、Amazon RDS for SQL Server で sp_send_dbmail ストアドプロシージャを実行します。プロシージャは EC2 SQL Server 上にあり、リンクサーバー経由で実行されます。

EXEC [Ec2-SQL-Server].msdb.dbo.sp_send_dbmail   
@recipients = 'wasishai@amazon.com', 
@body = 'This email is from RDS', 
@subject = 'This email is from RDS';

結論

これで、EC2 とリンクサーバーの接続を利用して、RDS for SQL Server からデータベースメールを送信するソリューションが完成しました。SQL Server ジョブステータスのメールアラートを送信する必要がある場合は、同タイプのソリューションを流用できます。そのシナリオでは、ジョブに追加ステップを 1 つ作成するのみです。このブログ記事に質問やご意見がある場合は、このコメント欄に自由に記入してください。


著者について

Wasim Shaikh は AWS Professional Services のデータベースコンサルタントです。彼は、AWS の使用時にカスタマーのソリューションの価値を向上させるため AWS のカスタマーと協力して様々なデータベースおよび分析プロジェクト関連の指導や技術支援を行っています。

 

 

Leonard Humphries はアンダーアーマー社のデータアーキテクトでした。HomeAway.com および Match.com での勤務経験もあります。IT 業界に身を置く前には、数年間 NFL と CFL でプロのフットボールプレーヤーとして活躍していました。