この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
CloudFormationにSNSトピックを設定すると、スタックイベントがSNSトピックに発行されます。 これ自体は既存の仕組みですが、SNSトピックのサブスクライブとして、先日GAしたAWS Chatbotが使えます。
本記事では、AWS Chatbotを使ってCloudFormationのスタックイベントをSlackに通知してみました。
発行先のSNSトピックを作成する
できました
ARNはあとで使うのでメモしておきます。
AWS Chatbotを作成する
新しいチャンネルを設定
AWS Chatbotの作成と通知先チャンネルを設定します。チャンネルと設定は1対1になるので、設定名をチャンネル名にしています。(1つのチャンネルに対して、AWS Chatbotの設定を2つ以上作れない)
IAMロールの作成も同時に行います。
さきほど作成したSNSトピックを選択します。
できました
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のイベントは下記でした。
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のイベントは下記でした。
さいごに
CloudFormationのスタックイベントについて、簡単にSlack通知できました。役立つ機会がある……かはそれぞれだと思いますが、Lambda連携しないで済むのは嬉しいですね。 (とはいえ、情報のフィルタリングや整理をする場合はLambdaが必要ですね)