メール配信したい場合、AWSではSESがありますが、AzureではSendGridを使用することが推奨されています。
SendGridをガッツリ使う場合は、配信失敗の監視など、運用も考慮する必要がありますのでそのあたりを書いていきます。
SendGridアカウント準備
-
公式ページを参照してSendGridアカウントを用意しましょう。
SendGrid アカウントの作成 -
Azure上でSendGridアカウントを作成したら、ポータルのSendGridアカウント画面より[Manage]を押してSendGrid管理画面を開きます。
まずは送信制限の監視から
プランによって月のメール送信数の上限が決まっているのでまずはこれを監視したいと思います。
※この図は全プランを表示しているわけではありません
メール配信の失敗を検知させる
次にメール配信に失敗した場合の検知を考えてみます。
Event Webhookという、何かイベントが発生したら指定したURLにPOSTする機能があったのでこれが使えそうです。
SendGridからの送信先を直接SlackのIncoming WebhookのURLに指定しても通知できないので、一度LogicAppsを間に入れて、JSONをパースしてからSlackに通知する必要があります。
Logic Apps準備
-
公式ページを参照してLogic Appsを作成しましょう。
ロジックアプリを作成する
- Slackアクションの[投稿メッセージ]を選択します。Slackアカウント認証を求められたら自分のSlackIDとパスワードを入れて認証させます。
- チャネルは任意のものを、メッセージテキストには[本文]をそのまま入力します。
SendGrid Event Webhook準備
- しばらく待つと、SlackにJSON生データが送られてくるはずです。見辛いので次にメッセージの見栄えをよくしたいと思います。
JSONパース
テストしてみる
存在しない宛先にメールを送ってちゃんと検知するか試してみます。
-
Cloud Shell (PowerShell) を開きます。やり方は公式サイトで。
Azure Cloud Shell PowerShell のクイックスタート
-
以下をコピペして実行します。中身は適宜変えてください。$MailToには存在しないメールアドレスを入れてください。
$SmtpServer = 'smtp.sendgrid.net'
$Port = 587
$UserName = 'azure_xxxxxxxxxxxxxxxxxxxxx@azure.com'
$Password = '[your password]'
$MailFrom = 'test@example.com'
$MailTo = '[your mail]'
$Subject = 'Test Mail'
$Body = 'This is test'
$pwd = ConvertTo-SecureString -String $Password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $UserName,$pwd
Send-MailMessage -UseSsl -From $MailFrom -To $MailTo -Subject $Subject -Body $Body -SmtpServer $SmtpServer -Port $Port -Credential $cred
Logic Appsの失敗を検知する
せっかくメール配信の失敗を検知できるようになったのに、なんらかのエラーでLogic Apps自体が失敗した場合、メール配信失敗を検知することができません。
Logic Appsの監視はメトリックアラートで実現できます。
Runs Failedメトリックが1以上のときに検知するように設定しましょう。