11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SendGridのイベントをLogic Apps経由でSlackに通知する

Posted at

メール配信したい場合、AWSではSESがありますが、AzureではSendGridを使用することが推奨されています。
SendGridをガッツリ使う場合は、配信失敗の監視など、運用も考慮する必要がありますのでそのあたりを書いていきます。

SendGridアカウント準備

  • 公式ページを参照してSendGridアカウントを用意しましょう。
    SendGrid アカウントの作成

  • Azure上でSendGridアカウントを作成したら、ポータルのSendGridアカウント画面より[Manage]を押してSendGrid管理画面を開きます。
    image.png


  • こんな感じです。
    image.png

まずは送信制限の監視から

プランによって月のメール送信数の上限が決まっているのでまずはこれを監視したいと思います。
※この図は全プランを表示しているわけではありません
image.png

  • [Settings]→[Alert Settings]を選択します
    image.png

  • [New Alert]を選択します。
    image.png

  • 上限の何%使ったら通知させるかと、通知先のメールアドレスを入力すればOKです。
    image.png

メール配信の失敗を検知させる

次にメール配信に失敗した場合の検知を考えてみます。
Event Webhookという、何かイベントが発生したら指定したURLにPOSTする機能があったのでこれが使えそうです。

SendGridからの送信先を直接SlackのIncoming WebhookのURLに指定しても通知できないので、一度LogicAppsを間に入れて、JSONをパースしてからSlackに通知する必要があります。

Logic Apps準備


  • 一旦ここではこのまま[アクションの追加]を選択します。
    image.png

  • Slackアクションの[投稿メッセージ]を選択します。Slackアカウント認証を求められたら自分のSlackIDとパスワードを入れて認証させます。
  • チャネルは任意のものを、メッセージテキストには[本文]をそのまま入力します。
    image.png

  • この状態で[保存]します。
    image.png

  • 保存するとHTTP POST URLが発行されるので、このURLをコピーしておきます
    image.png

SendGrid Event Webhook準備

  • SendGrid管理画面に戻って、[Settings]→[Mail Settings]を選択します。
    image.png

  • [Event Notification]を選択します。
    image.png

  • 検知したいイベントを選択します。
    image.png

  • HTTP POST URLに先程のURLを入れて、[Test Your Integration]を押します。
    image.png

  • しばらく待つと、SlackにJSON生データが送られてくるはずです。見辛いので次にメッセージの見栄えをよくしたいと思います。

JSONパース

  • Logic Appsに戻って、HTTP要求の[サンプルのペイロードを使用してスキーマを生成する]を選択します。
    image.png

  • ここに、さっきSlackで受信したJSONを丸々コピペします。
    image.png

  • JSONスキーマが自動生成されればOKです。
    image.png

  • 次にSlack投稿メッセージを選択すると、先程は本文しか選べなかったけど、色々選べるようになっていると思います。
    image.png

  • メッセージテキストに細かく項目を入れていきます。通知するオブジェクトは適宜変えて下さい。
    ※ここでJSONスキーマオブジェクトを選択すると、なぜか「For each」の中に入ります。
    image.png

  • この状態で保存しましょう。これで準備完了です。
    image.png

テストしてみる

存在しない宛先にメールを送ってちゃんと検知するか試してみます。

  • 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
  • こんな感じで通知されれば成功です!
    image.png

Logic Appsの失敗を検知する

せっかくメール配信の失敗を検知できるようになったのに、なんらかのエラーでLogic Apps自体が失敗した場合、メール配信失敗を検知することができません。

Logic Appsの監視はメトリックアラートで実現できます。
Runs Failedメトリックが1以上のときに検知するように設定しましょう。

image.png

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?