Terraform で AWS Chatbot を構築したくても AWS SDK for Go との関係によって AWS Provider でサポートされていないという課題がある🔥以下のような関連する issue もある💨
ちなみに AWS CloudFormation では AWS::Chatbot::SlackChannelConfiguration
としてサポートされている👌
よくある対応策としては大きく2種類あると思う.
- AWS Chatbot のみ「マネジメントコンソール」で構築する
- AWS Chatbot のみ「AWS CloudFormation」で構築する
さらに Terraform の aws_cloudformation_stack
リソースを使って Terraform と AWS CloudFormation を連携するというある意味魔法のような (?) ソリューションもあったりする🧙
AWS Cloud Control Provider を使おう
実は Terraform には AWS の AWS Cloud Control API を操作する AWS Cloud Control Provider (awscc) があって,AWS Cloud Control API は AWS Chatbot をサポートしているため,結果的に Terraform で簡単に AWS Chatbot を構築できてしまう❗️AWS Cloud Control Provider は HashiCorp 社によってメンテナンスされてるけど,現時点では Technical Preview
という注意点はある👀
AWS Cloud Control API に関しては以下のドキュメント参照📝
Terraform コード
以下のように AWS Provider と AWS Cloud Control Provider (awscc) を組み合わせて,Amazon SNS トピックと AWS Chatbot で Slack に通知をする構成を Terraform で書いた👌
- AWS Provider
- AWS Cloud Control Provider (awscc)
AWS Cloud Control Provider (awscc) の awscc_chatbot_slack_channel_configuration
リソースで Amazon SNS トピックと AWS Chatbot を紐付けつつ,必要なら AWS Chatbot の guardrail_policies
なども設定できる.また slack_workspace_id
と slack_channel_id
は別途取得しておく❗️
これは便利〜 \( 'ω')/
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.19.0" } awscc = { source = "hashicorp/awscc" version = "~> 0.61.0" } } required_version = "~> 1.5" } resource "aws_sns_topic" "chatbot" { name = "chatbot" } resource "awscc_chatbot_slack_channel_configuration" "chatbot" { configuration_name = "slack-channel-chatbot" iam_role_arn = aws_iam_role.chatbot.arn slack_workspace_id = "XXXXXXXXX" slack_channel_id = "XXXXXXXXX" sns_topic_arns = [aws_sns_topic.chatbot.arn] } resource "aws_iam_role" "chatbot" { name = "chatbot-role" assume_role_policy = data.aws_iam_policy_document.assume_chatbot.json managed_policy_arns = ["arn:aws:iam::aws:policy/CloudWatchReadOnlyAccess"] } data "aws_iam_policy_document" "assume_chatbot" { statement { actions = ["sts:AssumeRole"] principals { type = "Service" identifiers = ["chatbot.amazonaws.com"] } } }
AWS Chatbot に設定する IAM ポリシーは以下のドキュメントなどを参考にすれば OK👌
動作確認
動作確認のために Amazon SNS トピックから以下の JSON を送信する📤
{ "version": "1.0", "source": "custom", "content": { "description": ":warning: EC2 auto scaling refresh failed for ASG *OrderProcessorServiceASG*! \ncc: @SRE-Team" } }
すると期待通り Slack に通知された👏
JSON は以下のドキュメントに載ってる Minimalist custom notification を使った.
ちなみに Amazon SNS トピックから AWS Chatbot にカスタム通知を送信できるようになったのは2023年9月のリリース❗️
これは待望の機能だ〜 \( 'ω')/
関連情報
AWS Cloud Control API でサポートされているサービスの操作 (CRUD) は以下のドキュメントにまとまっている💡
更新頻度的に English を見ておくと良いかと〜
AWS::Chatbot::MicrosoftTeamsChannelConfiguration
AWS::Chatbot::SlackChannelConfiguration