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 のチャネルに通知されます。
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」(特にガードしない)