テクマトリックス株式会社の会田です。

昨年に以下の記事を公開しました。Lambda経由でTeamsへ通知を行う方法を記載しています。

弊社ではTeamsが業務で使われているため、Teamsへ通知を行いたい内容が多く存在します。

AWSからTeamsへ通知する方法は他にも存在します。 今回はTeamsへの通知方法をいくつか取り上げ、その中から2023年3月から利用可能となったAWS Chatbot経由でのTeamsの通知を実際に試してみた結果を紹介します。

AWSからTeamsへ通知するさまざまな方法

通知を実装する方法としては、以下の4つの主要なアプローチ方法があります。

  1. SNSトピック + メール通知
  2. AWS Chatbot
  3. Lambda + Webhook
  4. Step Functions + HTTP統合

概要

  1. SNSトピック + メール通知
    • Teamsチャンネルにメールアドレスを割り当て、SNSトピックのサブスクリプションとして設定します。
    • 設定が簡単で維持管理が容易という特徴があります。
  2. AWS Chatbot
    • 2023年3月から利用可能になった、Teamsと連携するための公式な統合方法です。
    • 通知だけでなく、AWSリソースのトラブルシューティングと運用をTeamsから直接実行できます。
  3. Lambda + Webhook
    • より柔軟な通知を実現したい場合は、Lambdaで通知内容をカスタマイズできます。
    • 過去の記事で紹介した方法では、TeamsのIncoming Webhookの廃止に伴い、Workflowsを用いて通知する方法を記載しています。
  4. Step Functions + HTTP統合
    • Step Functionsを使用してワークフローを構築し、HTTPタスクを介してTeamsに通知を送信する方法です。
    • 障害検知時のメンション付き通知やバッチ処理の完了通知、複雑なワークフローの一部として通知が必要な場合に適しています。

比較

主要な4つのアプローチを比較します。

方式 複雑さ カスタマイズ性 運用負荷
SNSトピック + メール通知 ◎ 最低 × 低 ◎ 最低
AWS Chatbot 〇 低 △ 中 〇 低
Lambda + Webhook △ 中 〇 高 △ 中
Step Functions + HTTP統合 × 高 ◎ 最高 △ 中

SNS+メールやAWS Chatbotを用いる方法が簡単でメンテナンスも楽です。その代わりに、通知できるサービスやタイミングに制限があったり、通知内容をカスタマイズできなかったりします。 Lambda+WebhookとStep Functionsを用いる方法は、通知内容を好きにできる(自分で実装する)ため、設定や実装が複雑で定期的なメンテナンスが必要となりますが、カスタマイズ性が高い通知が可能です。 どういった通知を行うかによって利用するアプローチを選択しましょう。

弊社のクラウドサービスの場合は、lambda+Webhookを主に利用しており、lambda関数の定期的なメンテナンスが必要ですが、その分自由に好きなタイミングで好きな内容を通知できています。

SNSトピック + メール通知を用いたTeamsへの通知

Teamsにはチャンネルごとにメールアドレスを割り当てることができます。このメールアドレスにメールを送ることで、チャンネルに投稿されます。

このチャンネルのメールアドレスをSNSの通知先とすることで、メールを介して簡単にTeamsへ通知できます。 設定も簡単で、以下のようにTeamsの通知を行いたいチャンネルのメールアドレスを取得し、そのアドレスをSNSのサブスクリプションとして登録するだけです。

とりあえず通知が欲しい場合は、この方法で十分です。

AWS Chatbotを用いたTeamsへの通知

AWS Chatbotを用いたTeamsへの通知を試してみました。以下のように、AWSのイベント通知がTeamsに投稿されます。

AWS Chatbotとは

AWS Chatbotは、AWS内で発生したイベントやアラートを、Slack、Microsoft Teams、Amazon Chimeなどのチャットツール上でリアルタイムに受信できるサービスです。従来のメールやSMSによる通知と比較して、迅速な確認と対応が可能となります。

主な特徴と利用メリット

  • リアルタイム通知
    • CPU使用率の上昇やメンテナンス、セキュリティチェック結果などの重要イベントを通知します。
  • 簡単なセットアップ
    • AWSコンソールからチャットツールとの連携も含めて簡単に設定できます。
  • 無料
    • 追加料金なしで使えます。
  • チャットでのコマンド実行
    • 「@aws」コマンドを使い、AWS CLIを実行できます。リソースの設定変更やLambda呼び出しなどを行えます。
    • 権限によっては作成や削除も行えてしまいますが、設定時に無効化できます。
  • セキュリティとアクセス制御
    • IAMを活用したアクセス管理やログ管理、暗号化などは一通りサポートしています。

利用シーンと注意点

  • 利用シーン
    • DevOpsや開発チームが、AWS内の運用イベントをリアルタイムで監視・対応する際に効果的です。
  • 注意点
    • チャットツールの機能制限や通知・コマンドのカスタマイズの限界があるため、特定の用途においてはそもそも対応できなかったり、セキュリティ対策が必須となったりします。

サービスの構成

AWSの各種サービスから、SNSトピック(AWS Chatbotのエンドポイントサブスクリプション)を経由し、AWS ChatbotがTeamsへ通知を行います。
過去に公開した記事では、2024年12月末から段階的にTeamsのIncoming Webhookが廃止されるため、Workflowsへの移行を利用者が実施する必要がありましたが、Chatbotを用いた場合は利用者側でTeamsへの通知ロジックをメンテナンスする必要はありません。

設定の手順

AWS Chatbotを用いたTeamsへの通知を試しました。手順を記載します。 前提として、Teamsの通知先として設定するチーム/チャンネルでAWSアプリが利用できる必要があります。

1. SNSトピックを作成する

まず、AWSの各サービスの通知先となるSNSトピックを作成します。 AWSマネジメントコンソール上から、Amazon SNS > トピック > トピックの作成から行います。

  • タイプ:スタンダード
  • 名前:chatbot-topic

トピックが作成されました。この時点ではサブスクリプションはありません。


2. AWS Chatbotのクライアントを設定する

次にAWS Chatbotのクライアント設定を行います。AWSマネジメントコンソール上から、AWS Chatbotを開き、チャットクライアントで「Microsoft Teams」を選択します。

https://aws.amazon.com/jp/chatbot/

次に、連携する(通知先とする)TeamsのチャンネルURLを求められますので、Teams上の「チャネルへのリンクを取得」からURLを取得し貼り付けます。

このあと、Microsoft Teamsの認証が必要となります。認証を終えるとTeamsのクライアント設定が作成されます。 つづいて、「新しいチャネルを設定」から設定を継続します。

新しいチャネルを設定では、今回以下のように設定を行いました。
IAMロールを新規に作成し、権限は通知のみ、ReadOnlyAccessとしています。

※図をクリックすると別ウィンドウで開きます。
  • 設定の詳細
    • 設定名:teams_chatbot_notification
    • ログ記録:「Amazon CloudWatch Logsにログを発行する」をチェックし、「エラーのみ」を選択
  • Microsoft Teamsチャネル
    • チャネルURL:TeamsのチャンネルURLを指定
  • アクセス許可
    • ロール設定:チャネルロール
    • チャネルロール:テンプレートを使用してIAMロールを作成する
    • ロール名:AWSChatBot-role
    • ポリシーテンプレート:通知のアクセス許可
    • チャネルガードレールポリシー:ReadOnlyAccess
  • 通知
    • リージョン:アジアパシフィック – 東京
    • トピック1:chatbot-topic ※手順1で作成したSNSトピック

これで、AWS Chatbotの新しいチャネルの設定が完了しました。

指定したSNSトピックには、今回設定したAWS Chatbotのサブスクリプションが自動的に登録されます。


検証

AWS Chatbot経由のTeams通知を試します。今回はAmazon EventBridgeを用いて、作成したSNSトピックへEC2のイベント通知を設定しました。 Amazon EventBridgeを用いたAWS Chatbotの通知はAWSがチュートリアルを準備してくれていますので、この手順に従います。

設定後、EC2インスタンスを新規に作成すると以下のようにTeamsに通知が届きました。PENDING → RUNNING → SHUTTING-DOWNとステータスの変更を通知してくれました。

注意点

AWS Chatbotを試してみて、注意すべきことがありました。

最初は、検証のためにSNSトピックにイベント通知を行うためにS3バケットへのファイルアップロードイベントを利用しようと思いました。イベントの発火が簡単に行えると考えたためです。

しかし、S3バケットに通知設定を行い、S3のイベントを発火してもTeamsに通知が届きませんでした。CloudWatch LogsでAWS Chatbotのイベントログを確認すると、ちゃんとエラーログを吐いていました。

Event received is not supported (see https://docs.aws.amazon.com/ja_jp/chatbot/latest/adminguide/related-services.html) 

まとめ

本記事では、AWSからMicrosoft Teamsへ通知を行うための主要な4つのアプローチ(SNS+メール、AWS Chatbot、Lambda+Webhook、Step Functions+HTTP統合)について、その特徴や運用面でのメリット・デメリットを比較しました。 各方法には以下のような特徴があります。

  • SNS+メール
    • 設定が簡単で維持管理も容易ですが、通知内容のカスタマイズには限界があります。
  • AWS Chatbot
    • AWS公式の統合手法としてリアルタイムな通知が実現できます。セットアップも比較的簡単で、運用負荷も低い点が魅力です。
  • Lambda+Webhook
    • 自由度が高く、通知内容やフォーマットのカスタマイズができます。ただし、実装や定期的なメンテナンスが必要です。
  • Step Functions+HTTP統合
    • 複雑なワークフローに組み込みやすく、最も柔軟なカスタマイズが可能ですが、実装の複雑さと運用負荷は高くなります。

今回の検証では、AWS Chatbotを用いたTeams通知の導入が簡単に行えることが確認できました。サポートされているサービスであれば利用する価値は高そうです。ただし、独自のカスタマイズやサポート外のサービスとなると、Lambdaを使った通知を使うのが無難です。AWS Chatbotで通知のカスタマイズができるようになると利便性がかなり高くなるため、今後に期待します。

ぜひ、この記事を参考に自社環境に最も適した通知方法を選定し、実装・運用に役立ててください。


☁️ 弊社が提供している環境構築・コンサルティングサービス ☁️

ソフトウェア開発基盤構築ソリューション

お客さまのニーズに合わせたサービスを提供しています。

☁️ 弊社が提供しているクラウドサービス ☁️

テクマトリックス TestRail クラウドサービス

  • 「TestRail」は、世界で250,000人以上のユーザーが利用しているWebベースのテスト管理ツールです。テストケース、テスト結果、テストの進捗状況、不具合の検出状況など、テストに係わるさまざまな”管理すべき”ものをシンプルに、快適に、かつ効率的に管理できます。
  • RedmineやJIRAといった課題管理ツールや、RanorexなどのUIテスト自動化ツールとの連携がサポートされており、開発やテストの効率アップを推進できます。

テクマトリックス Redmine クラウドサービス

  • 「Redmine」ならびに「Lychee Redmine」を利用できるサービスを提供しています。
  • Lychee Redmineは、オープンソースソフトウェアで人気のあるRedmineのプロジェクト管理機能を強化したプラグインです。
  • さわれるガントチャートによる直感的操作でのスケジュール管理をはじめ、プロジェクト進捗状況の可視化、工数の予実管理、プロジェクトレポート作成、EVMなど、プロジェクトマネージャーにとって、使い勝手の良いさまざまな機能を搭載しています。

By aita