クラウドエンジニアブログ

ServiceBusを利用したメール送信システムの作成

中平 頼孝

はじめに

Azure Service Bus(以下、ServiceBus)は、Azure 上のサービスとの親和性が高く、様々なサービスの入出力として指定することができます。
今回は、その親和性の高さを利用して、コーディングなしでメール送信システムを作成してみたいと思います。

また、親和性の高さ以外にも、ServiceBus を利用することで以下のような利点があげられます。

ServiceBus を利用する利点

  • システムが同時にオンラインになっている必要がなくなる。
  • システム全体に影響を与えずに切断ができる。
  • 負荷分散/平準化を図ることができる。

今回利用するAzureサービス

  • ServiceBus
  • SendGrid Email Delivery(マーケットプレイスを利用)
  • LogicApp

システム構成図

システム構成図

作成手順

1.ServiceBus の作成

Azure ポータル上から、SericeBus を作成します。
今回は、Basic プランで作成。

ServiceBus の作成

ServiceBus のデプロイが完了したら、ServiceBus に「mail」というキュー追加します。

ServiceBus の作成
※名前以外の設定は、今回デフォルトのまま利用しています。

2.SendGrid Email Delivery の作成

今回は、SendGrid を利用してメールを送信するため、SendGrid の API キーが必要になります。(既に SendGrid の API キーをお持ちの方は、この手順は不要です。)

SendGrid の API キーを取得する手順を以下に記します。
Azure ポータル上から、「SendGrid Email Delivery」 を Free プランで作成します。

SendGrid Email Delivery の作成

デプロイされた「SendGrid Email Delivery」の「Manage」ボタンを押下し、SendGrid 管理画面へ遷移します。

SendGrid 管理画面では、Settings にある APIKeys により API キーを発行します。
この API キーの文字列は、次項の LogicApp で利用するのでコピーしておきます。(API キーは生成時にしか表示されないので注意)

SendGrid Email Delivery の作成

3.LogicApp の作成

Azure ポータルから LogicApp を作成します。

LogicApp の作成

デプロイが完了したら編集を選択し、トリガー設定で「メッセージが ServiceBus キューで受信されたとき」を選択します。

LogicApp の作成

Logic Apps デザイナーでは以下の通り設定します。

①トリガーの設定
今回作成した ServiceBus のキュー「mail」を設定し、キューを取得する間隔を設定します。
今回は3秒間隔でキューを取得します。

②JSON の解析
ServiceBus のキューの内容を JSON 解析するステップを追加します。
今回、以下の JSON データをキューへ送信することを想定します。

{
"body":"ServiceBus経由でメール送信",
"subject":"SBT AzureBlog",
"to":" [送信先メールアドレス] "
}
            

スキーマは、「サンプルのペイロードを使用してスキーマを生成する」を選択すると、上記の JSON データをそのまま入れることで、スキーマとして解析してもらえます。

※このステップ以降、スキーマで定義した変数名を変数値として利用することができます。

③SendGrid の電子メールの送信ステップを追加
取得した SendGrid の API キーを設定し、前ステップで解析した JSON の変数をそれぞれのフィールドへ設定します。

LogicApp の作成

①トリガーの設定
今回作成した ServiceBus のキュー「mail」を設定し、キューを取得する間隔を設定します。
今回は3秒間隔でキューを取得します。

②JSON の解析
ServiceBus のキューの内容を JSON 解析するステップを追加します。
今回、以下の JSON データをキューへ送信することを想定します。

 {
 "body":"ServiceBus経由でメール送信",
 "subject":"SBT AzureBlog",
 "to":" [送信先メールアドレス] "
 }
             

スキーマは、「サンプルのペイロードを使用してスキーマを生成する」を選択すると、上記の JSON データをそのまま入れることで、スキーマとして解析してもらえます。

※このステップ以降、スキーマで定義した変数名を変数値として利用することができます。

③SendGrid の電子メールの送信ステップを追加
取得した SendGrid の API キーを設定し、前ステップで解析した JSON の変数をそれぞれのフィールドへ設定します。

LogicApp の作成

これで、ServiceBus へ JSON データを投げればメールが送信されるシステムができました。

実行確認

確認のため、メッセージ送信クライアントも LogicApp で作成してみます。

新規に LogicApp を作成しデプロイが完了したら、編集します。
トリガー設定では、「繰り返し」を利用します。

実行確認

Logic Apps デザイナーでは、以下の通り設定します。

①繰り返し設定
確認のためにメッセージを ServiceBus のキューへ飛ばしたいだけなので、今回は3ヶ月に1回と指定しました。

②メッセージの送信
送信するキューに今回作成した「mail」指定。
内容に以下の JSON を指定します。

{
"body":"ServiceBus経由でメール送信",
"subject":"SBT AzureBlog",
"to":”[送信先メールアドレス]”
}
            

コンテンツの種類は「json」を指定します。

実行確認

①繰り返し設定
確認のためにメッセージを ServiceBus のキューへ飛ばしたいだけなので、今回は3ヶ月に1回と指定しました。

②メッセージの送信
送信するキューに今回作成した「mail」指定。
内容に以下の JSON を指定します。

{
"body":"ServiceBus経由でメール送信",
"subject":"SBT AzureBlog",
"to":”[送信先メールアドレス]”
}
           

コンテンツの種類は「json」を指定します。

LogicApp の作成

最後に保存し実行すると、以下のようなメールが送信されました。

実行確認

まとめ

今回、ServiceBus を通してメール送信を行いましたが、それ以外にも 負荷がかかる処理を単一実行させ急激な負荷の上昇を抑えたり、複数のインスタンスに分散させることも可能です。
また、複数のシステムで同じような実装をしているような処理を共通化するのも良いでしょう。

このように、様々な場面で ServiceBus の利点を活かすことができるので、Azure 上でシステム設計を行う際の参考にしてみてください。


次回予告


【総合】お問い合わせ

ソリューションに関する全般的なお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録