AWS Chatbot による Slack 連携

概要

AWS Chatbot を使うと、CloudWatch Alarm や Cost Anomaly Detection など SNS トピックへ通知されたメッセージを整形して簡単に Slack に通知することができます。

初期設定: Slack ワークスペースとの連携

  • AWS 管理コンソール > AWS Chatbot
  • 「Slack」を選択して「クライアントを設定」
  • Slack の認証ページにリダイレクトするため、ログインしてワークスペースとの連携を許可する

これにより、Slack ワークスペースに「AWS Chatbot」アプリがインストールされます。

チャネルの設定

AWS Chatbot と連携するチャネルを登録します。

  • AWS 管理コンソール > AWS Chatbot > (Slack ワークスペース)
  • 「新しいチャネルを設定」
  • 以下を入力して「設定」
  • 設定名
  • Slack チャネル: 通知先のチャネルを指定
    • パブリックチャネルの場合は一覧から選択
    • プライベートチャネルの場合は、英数 8 文字の「チャネル ID」を指定する
  • アクセス許可: TODO
    • ロール名
    • チャネルガードレールポリシー
  • 通知
    • SNS トピック: AWS Chatbot で受信するトピックを選択

指定した SNS トピックが AWS Chatbot から Subscribe され、そこに送信されたメッセージが Slack のチャネルに通知されます。

Subscribe

AWS CDK による設定

AWS CDK では以下のように記述できます。(Slack ワークスペースは事前に連携して作成しておきます。)

import * as chatbot from "aws-cdk-lib/aws-chatbot";

export class ChatbotStack extends cdk.Stack {
    constructor(scope: Construct, id: string, props: cdk.StackProps) {
        super(scope, id, props);

        // Topic
        const topic = new sns.Topic(this, "Topic");

        // Chatbot
        const slackChannel = new chatbot.SlackChannelConfiguration(this, "SlackChannel", {
            slackWorkspaceId: "(ワークスペース ID)",
            slackChannelConfigurationName: "(作成するチャネルの設定名)",
            slackChannelId: "(Slack チャネル ID)",
            loggingLevel: chatbot.LoggingLevel.ERROR,
        });
        slackChannel.addNotificationTopic(topic);
    }
}

L2 Construct を使うとデフォルトで以下のように設定されるようです。

  • ロール: 何も許可しないチャネルロールを作成
  • ガードレールポリシーは「AdministorAccess」(特にガードしない)