はじめに
TerraformでAWS ChatBotを作成し、Slackと連携させるための手順をまとめる。
テスト用のチャンネルを作成
SlackワークスペースIDを取得
AWS ChatBotのコンソール画面からチャットクライアントにSlackを設定します。
※ ここの設定をTerraformからは行えないため、事前にブラウザから行います。
許可をすると、設定済みクライアントにワークスペースとの連携が追加されます
「ワークスペースの詳細」にワークスペースIDが表示されるので、こちらを後々利用します。
Terraformでリソース作成
main.tf
terraform {
backend "local" {
path = "./terraform.tfstate"
}
}
provider "aws" {
region = "ap-northeast-1"
}
# AWS ChatbotのSlackチャンネル設定を作成するリソース
resource "awscc_chatbot_slack_channel_configuration" "this" {
# Slackチャンネル設定の名前
configuration_name = "terraform-slack-channel-config"
# Chatbotが使用するIAMロールのARN
iam_role_arn = awscc_iam_role.this.arn
# 通知を送るSlackのチャンネルID
slack_channel_id = "C06CRP8EYHH"
# SlackのワークスペースID (AWS Chatbotのコンソール画面で事前に設定が必要)
slack_workspace_id = "T052RBT95S5"
# 通知を送るSNSトピックのARNのリスト
sns_topic_arns = [aws_sns_topic.this.arn]
}
# Chatbotが使用するIAMロールを作成するリソース
resource "awscc_iam_role" "this" {
# IAMロールの名前
role_name = "Terraform-ChatBot-Channel-Role"
# このポリシーはChatbotサービスがこのロールを引き受けることを許可する
assume_role_policy_document = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "chatbot.amazonaws.com"
}
},
]
})
# このロールにアタッチする管理ポリシーのARN
managed_policy_arns = ["arn:aws:iam::aws:policy/AWSResourceExplorerReadOnlyAccess"]
}
# AWSの通知を送るSNSトピックを作成するリソース
resource "aws_sns_topic" "this" {
# SNSトピックの名前
name = "terraform-sns-topic"
}
TerraformでAWSリソースを作成する場合、AWS Providerを利用することが多いですが、AWS Chatbotには対応していません。かわりにawsccという、AWS Cloud Control APIを使用したリソースを使います。
slack_channel_id の取得方法はこちらを参照してください。
slack_workspace_id はChatbotコンソールの設定済みクライアントの画面から取得できます。
デプロイ
terraform init → terraform plan → terraform apply を順番に実行します。
terraform applyに成功すると、設定済みチャネルに指定したチャンネルが追加されます。
また、SNSトピックと、Chatbotへのサブスクリプションが作成されます。
テスト送信
Chatbotコンソールの「テストメッセージを送信」からテストメッセージを送信してみます。
参考資料