AWS Chatbot で CloudFormation のスタックイベントをSlackに通知してみた

AWS Chatbotを使って、CloudFormationのスタックイベントをSlackに通知してみました。 コードを書くこと無くSlackに通知する仕組みを手軽に構築できます。
2020.05.08

CloudFormationにSNSトピックを設定すると、スタックイベントがSNSトピックに発行されます。 これ自体は既存の仕組みですが、SNSトピックのサブスクライブとして、先日GAしたAWS Chatbotが使えます。

本記事では、AWS Chatbotを使ってCloudFormationのスタックイベントをSlackに通知してみました。

発行先のSNSトピックを作成する

SNSトピックを作成する

できました

ARNはあとで使うのでメモしておきます。

SNSトピックを作成した

AWS Chatbotを作成する

新しいチャンネルを設定

AWS Chatbotの作成と通知先チャンネルを設定します。チャンネルと設定は1対1になるので、設定名をチャンネル名にしています。(1つのチャンネルに対して、AWS Chatbotの設定を2つ以上作れない)

Chatbotのチャンネル設定をする

IAMロールの作成も同時に行います。

ChatbotのIAMロールを作成する

さきほど作成したSNSトピックを選択します。

ChatbotにSNSトピックをアタッチする

できました

Chatbotのチャンネル設定を完了する

CloudFormationでデプロイしてみる

YAMLファイルを作成する

DynamoDBテーブルを1つ定義したYAMLファイルをdatastore.ymlとして作成します。

datastore.yml

AWSTemplateFormatVersion: "2010-09-09"
Description: Data Store Stack

Resources:
  FooTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: foo-table
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH

デプロイする

次のコマンドでデプロイします。--notification-arnsでスタックイベント通知先のSNSトピックを指定しています。

aws cloudformation deploy \
    --template-file datastore.yml \
    --stack-name DataStoreStack \
    --notification-arns arn:aws:sns:ap-northeast-1:1234567890:cloudformation-use-sns-topic

Slackに通知がきた!

無事に次の通知がきました。

CloudFormationのスタックイベントがSlackに通知される

このとき、CloudFormationのイベントは下記でした。

CloudFormationの様子

S3バケットを追加する

datastore.ymlにS3バケットを追加します。

datastore.yml

AWSTemplateFormatVersion: "2010-09-09"
Description: Data Store Stack

Resources:
  FooTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: foo-table
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH

  BarBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub bar-${AWS::AccountId}-${AWS::Region}-bucket

デプロイする

先ほどと同じコマンドでデプロイします。

aws cloudformation deploy \
    --template-file datastore.yml \
    --stack-name DataStoreStack \
    --notification-arns arn:aws:sns:ap-northeast-1:1234567890:cloudformation-use-sns-topic

Slackに通知がきた!

無事に次の通知がきました。

CloudFormationのスタックイベントがSlackに通知される

このとき、CloudFormationのイベントは下記でした。

CloudFormationの様子

さいごに

CloudFormationのスタックイベントについて、簡単にSlack通知できました。役立つ機会がある……かはそれぞれだと思いますが、Lambda連携しないで済むのは嬉しいですね。 (とはいえ、情報のフィルタリングや整理をする場合はLambdaが必要ですね)

参考