📡
TerraformでAWS Chatbotを作るメモ(Cloud Control API)
概要
TerraformのAWS ProviderではResourceとしてAWS Chatbotが存在しませんが、Cloud Control APIを利用することで作成できます。
AWS ProviderからCloud Control APIを使う方法と、全てがCloud Control APIで操作するようになっているAWS Cloud Control Providerを使う方法があるのでどちらでも試してみます。
事前準備
AWS ChatbotとSlackワークスペースの連携は先にブラウザで実施します。
またChatbot用のIAM Role、ガードレールポリシー、SNSトピックは別途定義しておきます。
Slackチャンネル定義
まとめてチャンネル連携を行いたいのでlocalsで定義します。
locals {
slack = {
workspace = {
workspace_id = "ABCD12345"
channels = {
critical = {
channel_id = "0ABCD123456"
sns_topic_arn = aws_sns_topic.critical.arn
}
warning = {
channel_id = "1ABCD123456"
sns_topic_arn = aws_sns_topic.warning.arn
}
error = {
channel_id = "2ABCD123456"
sns_topic_arn = aws_sns_topic.error.arn
}
}
}
}
}
AWS Provider
AWS Providerの aws_cloudcontrolapi_resource
を使う例です。
cloudcontrolapi
resource "aws_cloudcontrolapi_resource" "chatbot" {
for_each = local.slack.workspace.channels
type_name = "AWS::Chatbot::SlackChannelConfiguration"
desired_state = jsonencode({
ConfigurationName = "${local.name_prefix}-${each.key}"
IamRoleArn = aws_iam_role.chatbot.arn
SlackWorkspaceId = local.slack.workspace.workspace_id
SlackChannelId = each.value.channel_id
GuardrailPolicies = [aws_iam_policy.guardrail.arn]
SnsTopicArns = [each.value.sns_topic_arn]
})
}
AWS Cloud Control Provider
AWS Cloud Control Providerの awscc_chatbot_slack_channel_configuration
を使う例です。
awscc
resource "awscc_chatbot_slack_channel_configuration" "chatbot" {
for_each = local.slack.workspace.channels
configuration_name = "${local.name_prefix}-${each.key}"
iam_role_arn = aws_iam_role.chatbot.arn
slack_workspace_id = local.slack.workspace.workspace_id
slack_channel_id = each.value.channel_id
guardrail_policies = [aws_iam_policy.guardrail.arn]
sns_topic_arns = [each.value.sns_topic_arn]
}
Discussion