KeyQ Blog

Connecting Microsoft Teams to AWS SNS Topic

作成者: Kenneth Hough|2024/01/30 2:12:07

この記事では、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 をクリックします。

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

トピックの作成が完了したら、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関数を作成します。

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

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

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

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 の下にあります。

受信Webhookが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に追加する(gistリンクもあり):

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

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

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

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

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

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

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

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

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

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