Amazon SNSからMicrosoft Teamsに通知を飛ばす方法 5選

# はじめに
お疲れ様です。矢儀 @yuki_ink です。

**Teams、使ってますか？**

私は普段の業務で、連絡ツールとしてTeamsとOutlook（メール）を使っていますが、最近はTeamsがメインになってきました。
~~Outlookなんて2時間に1回くらいしか見ない！！~~

そんな中、AWSからの通知は、SNSからメールで届いています。
重要な通知・ヤバいアラートは、Teamsにも届いてほしい！

というわけで、SNSからTeamsに通知を飛ばす方法を考えてみました。


# 5つの選択肢

実務で使えそうなものを5つ絞ってご紹介します。

**【とにかくTeamsに通知が届けばいい！忙しい人のためのメール通知応用パターン】**
- ① Teamsチャネルのメールアドレスを発行し、SNSでEメールサブスクリプションを作成
- ② Microsoft Power Automateのフローで、Outlookで受信したメールをTeamsに転送

:::note
とにかくTeamsに通知をくれ！！手段は問わん！！という方はこちら。
:::


**【AWSのサービスや外部サービスを使ってスマートにやるパターン】**
- ③ AWS LambdaとMicrosoft Power Automateを使う
- ④ AWS Chatbotを使う
- ⑤ PagerDutyなどの外部サービスを使う

:::note
サービスを駆使して、メールという概念が存在しない世界を目指す方はこちら。
:::


以下、詳細を書いていきます！


## ① Teamsチャネルのメールアドレスを発行し、SNSでEメールサブスクリプションを作成
**SNS ⇒ Teams（メール連携）**

お馴染みのEメールサブスクリプションを利用しつつ、直接メッセージをTeamsチャネルに叩き込む方法です。

Teamsにメールでメッセージを投稿する方法については、多くの記事で紹介されています。
これをSNS通知にも応用します。

- [Microsoft Teams のチャネルにメールでメッセージを投稿する方法](https://www.kan.co.jp/publics/index/150/detail=1/b_id=808/r_id=258/)
- [Office365 Teamsでのチャネルメール機能使っていますか](https://mitomoha.hatenablog.com/entry/2018/12/18/021746)

:::note warn
とはいえ、社内のセキュリティガバナンスの都合などで、特定のドメインからのメールしか受け付けないような制限がかかっているケースも多いかと思います。
制限がかかっている場合、この手段は取れません。
:::



## ② Microsoft Power Automateのフローで、Outlookで受信したメールをTeamsに転送
**SNS ⇒ Outlookでメール受信 ⇒ Power Automateのフローをキック ⇒ Teams通知**

こちらの記事で紹介されている方法です！

https://cloud5.jp/amazon-sns-power-automate/

「件名にこのキーワードを含んでいたらTeamsに通知する」というような条件も書けます。
フォルダーの指定もできるので、そもそもフォルダー分けをOutlookの振り分けルールで書いてしまって、「このフォルダーに入ったメールはとにかくTeamsに通知！」ということも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/0f6cc6f2-0542-472b-ff6b-6d0e5e4faf54.png)

最近、CopilotがPower Automateに統合され、自然言語でクラウドフローを作成できるようになりました。
Power Automateの操作に慣れていない方でも、簡単にフローを開発できます！

https://qiita.com/DEmodoriGatsuO/items/3b4cc33f503541dcfd28


## ③ AWS LambdaとMicrosoft Power Automateを使う
**SNS ⇒ Lambda ⇒ Power Automateのフローをキック ⇒ Teams通知**

続いてもPower Automateを使う方法です。
こちらの記事が参考になります。

https://qiita.com/nasuvitz/items/808cd9f3e9d097e5dfd1


2024年までは、TeamsのWebhookを直接叩くことができ、それを利用したTeams通知はインターネット上でも多くの実績が見られる方法でしたが、今では過去のものとなってしまいました…
上記の記事は、TeamsのWebhookからPower AutomateのWebhookに移行する手順についてまとめられたものです。
Power Automateの設定方法が分かりやすく案内されています。

以下はTeamsのWebhookが使えた時代のナレッジたちですが、Lambdaの作り方などの点で参考になります。

- [Webhook を使用して Amazon SNS メッセージを Amazon Chime、Slack、または Microsoft Teams にパブリッシュする方法を教えてください。](https://repost.aws/ja/knowledge-center/sns-lambda-webhooks-chime-slack-teams)
- [AWS CloudWatch AlarmからMicrosoft Teamsに投稿する](https://fintan.jp/page/1548/)
- [Connecting Microsoft Teams to AWS SNS Topic](https://www.keyq.cloud/ja/blog/connecting-microsoft-teams-to-aws-sns-topic)

LambdaやPower Automateのフローの中でいろいろ処理をしたい場合、この方法がベストだと思います。



## ④ AWS Chatbotを使う
**SNS ⇒ Chatbot ⇒ Teams通知**

そもそもChatbotとは。

>AWS Chatbot は、Amazon Chime、Microsoft Teams、または Slack チャンネルで AWS 用の ChatOps を簡単に設定し、複数の AWS のサービスと安全にインタラクションすることを可能にするインタラクティブエージェントです。運用イベント、セキュリティに関する検出結果、または予算アラートに関する通知を、チーム全体が確認して議論できるチャットルームで受け取ることができます。
>
>（出典）[AWS Chatbot とは何ですか？](https://aws.amazon.com/jp/chatbot/faqs/)

こちらの記事で、Chatbot経由でTeamsに通知をされている様子が紹介されていました。

https://dev.classmethod.jp/articles/chatbot-microsoft-teams/

最近だと、Chatbotを利用してTeamsでAIボットを動かす、というケースも話題になりましたね。

https://qiita.com/minorun365/items/3d6bb63a59fb10712948

:::note warn
Chatbotを使うと「ChatbotからTeamsに通知」だけでなく「TeamsからChatbot経由でAWS環境を操作する」ということもできるようになります。
なので、Teamsに通知を飛ばしたい！という目的だけなら、Chatbotの利用はTooMuchですし、同時にいらないリスクを背負うことになってしまいます。

また、Chatbot利用のためには、Teamsチャネルに専用のアプリを追加する必要があり、それが社内のセキュリティガバナンス的にNGのケースもあると思います。
:::


## ⑤ PagerDutyなどの外部サービスを使う

PagerDutyなどのインシデント管理ツールを既に利用している環境であれば、そのツールとTeamsを連携させるのが早そうです。

https://support.pagerduty.com/main/lang-ja/docs/microsoft-teams

ただ、Teamsに通知を飛ばすためだけにわざわざツールを導入するかと言われれば、否だと思います…


# 終わりに
以上、SNSからTeamsに通知を飛ばす方法を5つご紹介しました！
目的や今利用しているサービスによって、どの方法を取るか選択が変わってくると思います。
何かの役に立てば幸いです。