back to blog

Connecting Microsoft Teams to AWS SNS Topic

Read Time 4 mins | Written by: Kenneth Hough

この記事では、Microsoft Teams を AWS SNS Topic にリンクするプロセスを掘り下げていきます。まず最初に、SNS Topicとは一体何でしょうか?簡単に言うと、SNS (Simple Notification Service) Topic は、複数の購読者にメッセージや通知を配信する通信チャネルとして機能します。中央ハブとして機能し、さまざまなシステムやエンドポイントで関連情報を受信できるため、更新、アラート、通知をリアルタイムで送信するのに非常に多用途です。

SNSトピックの使用例

  • アラートと通知:重要なシステムアラート、アプリケーションの更新、ステータスの変更をMicrosoft Teamsチャネルで直接受信することを想像してみてください。
  • イベント通知: システム障害、新規ユーザー登録、データベースの更新など、重要なイベントに関する通知を受け取ることができます。

Microsoft TeamsチャンネルでSNS通知を受け取る最も簡単な方法は、チャンネルに固有のメールアドレスを割り当てることです。これは、チャネルの設定にアクセスし、チャネル名の横にある3つの点をクリックし、"メールアドレスを取得 "を選択します。

しかし、AWS Lambda 関数でコーディングのタッチを追加して楽しむことができるのに、なぜ簡単なルートに落ち着くのでしょうか?以下では、Teams チャンネルのフックエンドポイントを作成し、メッセージ送信に Python リクエストを利用する Lambda 関数を作成する方法を説明します。さらに、これらの Lambda 関数を SNS Topic にサブスクライブするように設定し、AWS と Microsoft Teams のシームレスな統合を実現します。

ステップ1:SNSトピックの設定

SNSトピックの威力を理解したところで、Microsoft TeamsとAWSを連携させる最初のステップに入ろう。SNS Topic の作成は、複数の購読者にメッセージや通知を簡単に配信するためのゲートウェイです。これにより、重要なアラート、システムアップデート、イベント通知を Microsoft Teams チャンネルで直接受け取ることができます。

AWSコンソールにログインし、SNSサービスページに移動します。SNS サービスページで、左パネルの Topics をクリックします。

AWS SNS Topic

黄色の「トピックの作成」ボタンをクリックして、新しいトピックを作成します。トピックの作成] ページが開いたら、[標準 SNS トピック] を選択します。標準 SNS トピックだけが、Lambda、SMS、メール、その他のプロトコルなどのサービスに統合できます。トピックに説明的な名前とオプションの表示名を付けます。

AWS Create SNS Topic

トピックの作成が完了したら、Lambda 関数を作成します。

ステップ2:ラムダ関数とレイヤー

SNS のトピック通知が正常に送信されるようにするには、Microsoft Teams の Webhook URL に HTTP POST リクエストを行う Lambda 関数が必要です。この Lambda 関数には python requests モジュールを含む Layer が必要です。既にすぐに使えるLayerがあれば、統合を進めることができます。ただし、python requestsモジュール用のLayerを作成する必要がある場合は、以前の記事 "Pythonリクエストモジュール用AWS Lambda Layerの作成"を参照してください。

AWSコンソールで、Lambdaサービスページに移動し、新しいLambda関数を作成します。

Create new Lambda function for SNS and MS Teams

ランタイムにはPython 3.11を、アーキテクチャにはarm64を選択する。x86を使用する技術的な要件がない限り、x86と比較してコストパフォーマンスが良いため、arm64を主要なアーキテクチャとして使用することを推奨します。

Newly created Lambda function for SNS and MS Teams

関数を作成したら、関数名のすぐ下にある「レイヤー」をクリックします。ブラウザがLambda関数のLayersセクションまでスクロールするはずです。

Layer for AWS Lambda

Add a layer'をクリックし、作成したPythonリクエストレイヤーを選択する。Adding the requests layer to Lambda

Layerが追加されたら、MS TeamsのWebhook URLを作成し、Lambda関数のコードを書きます。

ステップ 3. Microsoft Teams Webhookコネクタ

Lambda 関数で Microsoft Teams チャンネルに通知を送信するには、Microsoft Teams Incoming Webhook コネクタをチャンネルにインストールする必要があります。

Incoming Webhook コネクタは、Teams (classic) の "connectors" の下、および "new" Teams の Apps の下にあります。

MS Teams Webhook Connector

受信WebhookがTeamsチャンネルに追加されたら、それを設定する必要があります。

Configure incoming webhook for MS Teams

Webhookに名前を付け、オプションでアイコンを付けると、WebhookのURLが表示されます。Teamsチャンネルに通知を送るLambda関数に必要なので、このURLをコピーして安全な場所に保管してください。

ステップ 4. Teams WebhookへのHTTP POSTリクエスト

Webhook URLが手に入ったので、前回作成したLambda関数に戻ります。Teams webhook URLを環境変数としてLambda関数に追加します。Configuration をクリックし、Environment Variable をクリックします。Edit」をクリックして、webhook用の新しい環境変数を追加します。

Lambda Env Variable for Teams Webhook

次に、以下のコードをLambdaに追加する(gistリンクもあり):

コードをコピーしたら、'Deploy' をクリックし、最新バージョンのコードが準備できていることを確認してください。この時点で、Lambda関数をテストして、Teamsチャンネルに通知を送信できることを確認できますが、先ほど作成したSNSトピックでも同じ通知テストを行うことができます。

ステップ5. ラムダ関数をSNSに登録する

先ほど作成したSNSトピックに移動する前に、Lambda関数のARNをコピーしておこう。このARNは、Lambda関数をトピックにサブスクライブするために必要です。ARNをコピーしたら、SNSトピックに移動し、「Create subscription」をクリックします。

AWS SNS Topic Subscriptions

サブスクリプションの作成ページで、プロトコルとしてAWS Lambdaを選択し、エンドポイントテキストボックスにLambdaのARNを貼り付けます。

Add Lambda as Subscriber to SNS Topic

サブスクリプションが作成されたら、統合をテストできます。SNSトピックの詳細ページから、'Publish message'をクリックします。

SNS Topic Detail page - Publish Message

メッセージの公開ページが表示されれば、件名を気にする必要はありません。メッセージそのものに直接集中できます。現在の設定では、Teams 通知に件名は含まれませんが、メッセージの内容と Lambda 関数の動作を完全に制御できますのでご安心ください。TeamsのWebhookに配信されるメッセージの粒度をカスタマイズし、特定のニーズや要件を満たすようにすることができます。

Publish a message - subject

メッセージ本文に、Teamsチャンネルに表示したいメッセージを入力します。私の例では、"Hello world from Lambda and SNS!" としました。

Publish a message - message body

メッセージの公開ボタンをクリックすると、ほんの数秒から1分程度で通知を受け取ることができます。下のスクリーンショットで、メッセージの本文が通知にどのように表示されるか見てみましょう。前述したように、Lambda関数のpythonコードを変更するだけで、フォーマットとコンテンツの両方をカスタマイズできることを忘れないでください。

Notification from SNS in MS Teams

ほら!これでSNSトピックとMicrosoft Teamsチャンネルのリンクは完了です。このチュートリアルが、コミュニケーションを効率化し、重要なアラートや通知で常に最新の状態を保つのに役立てば幸いです。AWS SNS を Microsoft Teams と統合することで、シームレスな情報共有の可能性が広がります。重要なシステムアップデートの管理、イベント通知の監視、あるいは単にチームとのつながりを維持するにしても、この統合は間違いなくワークフローの効率を向上させるだろう。

AWSと様々なクラウド統合の探求を続けながら、より多くの技術的な記事にご期待ください。私たちの目標は、これらの強力なプラットフォームの使用を最適化するための貴重な洞察と実践的なガイダンスを提供することです。今後の記事では、その他の統合について掘り下げ、コーディングのヒントを共有し、コラボレーションと生産性をさらに向上させる革新的なソリューションを提供していきますので、ご期待ください。

スタートアップ向けアプリ開発を加速するためのフレームワーク

Kenneth Hough

背景

私は2020年3月にKeyQを創設しました。これは、革新的で意味のあるクラウドソリューションを提供することで、ビジネスが次の成功のレベルを達成するのを支援するというビジョンを持っています。その設立以来、私はいくつかの企業、非営利団体、大学と共に、ビジネスプロセスを合理化しコストを削減するのに役立つクラウドアプリケーションの設計と構築に取り組んできました。

KeyQに入る前は、アラバマ大学バーミンガム校(UAB)の肺、アレルギーおよび集中治療医学部で医学研究者でした。また、UABではJessy Deshane, PhDとVictor Thannickal, MDの指導の下、私の博士論文に取り組みました。UABでの博士研究中、私は「オミクス」およびビッグデータに触れ、クラウドでのデータ駆動型分析プラットフォームを開発するというキャリア選択に影響を与えました。

また、生化学を専攻したWorcester Polytechnic Institute(WPI)での学部教育にも大きな感謝を述べたいと思います。WPIのモットーは「Lehr und Kunst」で、大まかに「理論と実践」または「学習と熟練した芸術」に翻訳されます。WPIはこの教育法を真に大切にし、教育スタイルとクラスサイズによってそれが見て取れます。WPIでの学習経験はユニークであり、学び、実践し、応用することができる私を形作るのに大きく貢献しました。

個人的な興味

革新的な技術を学び、新しいことに挑戦することが大好きです。興味の範囲は広く、サーバーレスアーキテクチャ、機械学習、人工知能、バイオインフォマティクス、医療情報学、金融技術などが含まれます。また、2021年のCFAレベル1試験に向けて取り組んでいます。その他の興味や趣味には旅行、ロッククライミング、ラペリング、洞窟探検、キャンプ、園芸などがあります!