kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Terraform AWS Provider で AWS Chatbot を構築する

2024年8月2日にリリースされた Terraform AWS Provider v5.61.0 で AWS Chatbot の「Slack 設定 (SlackChannelConfiguration)」「Teams 設定 (MicrosoftTeamsChannelConfiguration)」を設定できるようになった❗️

github.com

背景

今までは AWS Provider を使って AWS Chatbot を構築できず,AWS Provider 側の issue は2020年3月から Open していた.

github.com

とは言え AWS Provider は AWS SDK for Go に依存していて,AWS SDK for Go で AWS Chatbot がサポートされていないという点が根本的な問題ではあった.

github.com

そして,2024年2月に AWS SDK for Go が AWS Chatbot をサポートしたため,AWS Provider もサポートできるようになったという背景がある.

github.com

今まで

Slack を例にすると,今までは以下のようなワークアラウンドを選択して AWS Chatbot を構築していたと思う.

仕事では AWS Cloud Control Provider (awscc) を導入していて,過去にブログにもまとめてある📝

kakakakakku.hatenablog.com

Terraform コード

さっそく AWS Provider でサポートされた aws_chatbot_slack_channel_configuration リソースを試す👌 以下のように実装した.IAM Role と Amazon SNS トピックは省略する.

resource "aws_chatbot_slack_channel_configuration" "main" {
  configuration_name = "sandbox"
  iam_role_arn       = aws_iam_role.chatbot.arn
  slack_team_id      = "XXXXXXXXX"
  slack_channel_id   = "XXXXXXXXX"
  sns_topic_arns     = [aws_sns_topic.chatbot.arn]
}

簡単だ \( 'ω')/

動作確認

AWS Chatbot の「テストメッセージを送信」と Amazon SNS の「メッセージの発行」を実行して,期待通り Slack に通知された👏

ちなみに Amazon SNS から送信するときは以下のドキュメントを参考にカスタムフォーマットを使った.

{
    "version": "1.0",
    "source": "custom",
    "content": {
        "description": ":tada: Terraform AWS Provider v5.61.0 now supports the `aws_chatbot_slack_channel_configuration` resource! yay!"
    }
}

docs.aws.amazon.com

補足: SlackWorkspaceIdSlackTeamId

Slack Workspace ID を指定するときに,AWS Cloud Control Provider (awscc) の場合は AWS CloudFormation のリソースに対応しているため SlackWorkspaceId を設定するけど,AWS Provider の場合は slack_team_id を設定するという違いがあった.ちなみに AWS Chatbot API のリクエストパラメータは SlackTeamId になっていた.

docs.aws.amazon.com

docs.aws.amazon.com

ポスト