前提条件
- AWSアカウントを持っていること
- Slackアカウントを持っていること(管理者権限)
- Terraformがインストールされていること
【事前準備】AWS Chatbotをでチャットクライアントを作成する
AWS Chatbot と Slack のワークスペースの接続の許可
AWS Chatbotコンソールにアクセスし、[Get started]をクリックします。
AWSマネジメントコンソールにログインしてAWS Chatbotを作成する。
チャットクライアントにSlackを選択してからボタンをクリックする。
ブラウザで対象のSlackワークスペースにログインしていない場合はSlackのログイン画面が表示されるので、 対象のワークスペースにログインする。
接続の許可画面が表示されるので内容を確認の上、許可ボタンをクリックする。
SlackのワークスペースIDを確認する
チャットクライアントの作成に成功するとクライアントのページにリダイレクトされる。
クライアントのページでSlackのワークスペースIDを確認できるので控えておく。
SlackのチャネルIDを確認する
通知したいSlackのチャネルのチャネルIDを確認する。
Slackの通知したいチャネルを右クリックしてチャネルの詳細を表示する。
チャネルの詳細の一番下にチャネルIDが書いてあるので控えておく。
TerraformでChatbotを構築する
Terraformのコード
providerとbackendの設定は省略する。
まずChatbotに必要なRoleを作成する。
# Chatbotのロール
data "aws_iam_policy_document" "chatbot_assume_role" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["chatbot.amazonaws.com"]
}
}
}
resource "aws_iam_role" "chatbot" {
name = "chatbot"
assume_role_policy = data.aws_iam_policy_document.chatbot_assume_role.json
}
次にChatbotに必要なAmazon SNSのトピックを作成する。
# SNS Topic
resource "aws_sns_topic" "chatbot" {
name = "chatbot"
}
AWS Chatbotのリソースは無いため、CloudFormationで作成する。
# Chatbot
resource "aws_cloudformation_stack" "chatbot" {
name = "chatbot"
template_body = yamlencode({
Description = "Managed by Terraform"
Resources = {
AlertNotifications = {
Type = "AWS::Chatbot::SlackChannelConfiguration"
Properties = {
ConfigurationName = "slack"
SlackWorkspaceId = "【ワークスペースID】"
SlackChannelId = "【チャネルID】"
LoggingLevel = "INFO"
IamRoleArn = aws_iam_role.chatbot.arn
SnsTopicArns = [aws_sns_topic.chatbot.arn]
}
}
}
})
}
【ワークスペースID】【チャネルID】は事前に控えたものを記述する。
適用する
terraform apply
で適用すれば構築は完了する。
不備がある場合はAWSコンソールの画面でCloudFormationのページにアクセスすると問題を確認できる。
テスト送信
AWSコンソール画面のChatbotにアクセスし、「テストメッセージを送信」をクリックする。
Slackに通知されれば成功。
\手を動かしながらTerraformを学びたい人にオススメ!/