ロジックアプリから Email Azure Communication Services を用いてメール通知を行う

# 1. はじめに
これまで Azure 環境からのメール転送サービスは Twilio SendGrid が有名だったのですが、この度 **2023/7/30 に Azure Native の電子メール転送サービス (Azure Communication Service) の日本リージョンが正式に対応**しました。本記事では Azure の運用でよく用いるロジックアプリからの通知を Email Azure Communication Services を用いてメール通知を実践した内容をまとめています。

# 2. 背景
AWS を利用している方であれば、Amazon CloudWatch のメトリクスや Amazon Cloud Watch Logs のアラートを Amazon SNS/SES を用いてメール通知、SMS 通知を設定された方は多いと思います。Azure 環境では Native のメール送信サービスが遅れていたため、代替手段として SendGrid を Martket Place から用いていたケースが多いのではないかと思います。
筆者は Microsoft Sentinel をサポートするお仕事が多いのですが、インシデント検知時に通報するための電子メールの通知サンプルが O365 コネクタであるため、システムアラートを発砲するためだけに Office 365 のユーザーを作成するのは割に合わないと思います。(1ユーザー分のライセンスを消費したり、不要なメール受信を受けてしまう、というのもあります)

Azure Communication Services の電子メール対応が Japan East で対応することで、これらの課題が解決出来るようになります。2023.7 現在、東日本リージョンでの価格、制限は以下のようになっています。

|  内容 |  詳細  |
| ---- | ---- |
|  価格  |  ¥0.03532/メール送信<BR>¥0.01696/MB 転送  |
|  制限  | メール送信<BR>- 30 mail/分/サブスクリプション<br> - 100 mail/60分/サブスクリプション |

https://learn.microsoft.com/en-us/azure/communication-services/concepts/service-limits#rate-limits





# 3. 設定
以下、設定画面を簡単にご紹介いたします。
## 3.1 Azure Communication Services のリソースを作成する
はじめに基盤となる Azure Communication Services のリソースを作成します。
日本語化画面では「通信サービス」と表示されますのでご注意ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/5eb3f42f-f1ae-a8ee-889c-1590d0bea1c9.png)

https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/create-communication-resource?tabs=windows&pivots=platform-azp#create-azure-communication-services-resource

## 3.2. Email Azure Communication Services のリソースを作成する
次に SMTP 転送サービスとなる Email Communication Services のリソースを作成します。
日本語化画面では「メール通信サービス」と表示されますのでご注意下さい。

https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/create-email-communication-resource

## 3.3 [オプション] SMTP 転送時のカスタムドメインを登録する
Email Communication Services リソースが作成すると、Azure サブドメインである ``XXXXX.azurecomm.net`` のドメインが作成されます。ドメインを自社ドメイン名等を用いた送信を行う場合は、送信ドメイン認証（SPF / DKIM）を通じてカスタムドメインを登録することが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/8eb899c3-c600-7678-c908-4cf46b5b8ac9.png)

https://learn.microsoft.com/ja-jp/azure/communication-services/concepts/email/email-domain-and-sender-authentication

## 3.4 メール送信サービスを Azure Communication Services に登録する
作成した Email Communication Services を母体となる Azure Communication Services に登録します。これにて、SDK のエンドポイントや、転送時のキーが認証情報として用いることが出来るようになります。

https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/connect-email-communication-resource?pivots=azure-portal

## 3.5 テストしてみる
AzureCLI / Python / JavaScript 等のサンプルメール送信テスト方法が掲載されています。

https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/send-email?tabs=windows%2Cconnection-string&pivots=platform-azcli

試しに AzureCLI で実行してみました。設定したカスタムドメイン経由のユーザーで　SMTP 転送されていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/61f22a90-ab6e-b8b4-7361-4c513abca1da.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/573c5d94-b22d-9851-b284-a5a2261600b9.png)

## 4. ロジックアプリで発砲してみる
Email Communication Services が動作することが分かったので、ロジックアプリのメール送信処理を Azure Communication Services 経由で実践してみます。
ロジックアプリでは Email Azure Communication Services 用の標準コネクタが提供されていますので、O365 コネクタや SendGrid コネクタから切り替えるだけでOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/407805cb-878a-8b96-16ba-7e268d2a6bdd.png)

## 4.1 ロジックアプリの流れ
以下は Microsoft Sentinel のインシデント発砲時に、Azure Communication Services Email を用いてメール送信するフロー例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/4700f16b-09d3-b42b-0b95-bbf73f59b6a2.png)
細かいので、Email 処理の部分だけ抜粋して紹介します。

## 4.2 変数の初期化 (HTML メールの成型)
Azure Email Communication Service Email では、BODY を HTML Email として送信してもらえるので、CSS (スタイルシート) を用いて成型化を行っています。CSS を用いないと既読性が悪いので、設定することを強くお勧めします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/b99991c9-717a-f46b-a85a-f5bb0ea6f7f0.png)

## 4.3 電子メールの送信 (Azure Communication Services による sendmail)
最初にコネクタを接続する際に接続文字列 = Azure Communication Service の主キーを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/6d91501d-96a2-7a02-4611-6b15401f6aaf.png)

認証が通ると、コネクタ経由で送信元/宛先の Email アドレス、本文（BODY）を入れることが出来ます。BODY 部分は HTML Email が出来るので、前ステップでまとめた変数を当てています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/4bba9d46-263a-50e3-d46c-02dc020fbc81.png)

## 4.4 テストしてみる
実際にトリガーを起動させて、ロジックアプリを実行してみます。
Azure Email Communication Services 経由で SMTP 転送によるメール処理が出来ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/c090744c-9d12-5395-0740-5bca96e62680.png)

# 5. まとめ
これまで Azure 標準サービスではあまり用いられていなかった Email Azure Communication Services ですが、日本リージョン GA になりましたので、国内環境で活用が出来るようになりました。Azure 運用では O365 コネクタ利用のまま放置しているケースも多いと思いますので、これを機会に SMTP 通知サービスへの切替もご検討いただけたらと思います。

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください