前提条件

  • AWSアカウントを持っていること
  • Slackアカウントを持っていること(管理者権限)
  • Terraformがインストールされていること

【事前準備】AWS Chatbotをでチャットクライアントを作成する

AWS Chatbot と Slack のワークスペースの接続の許可

AWS Chatbotコンソールにアクセスし、[Get started]をクリックします。

AWSマネジメントコンソールにログインしてAWS Chatbotを作成する。

Chatbot

チャットクライアントにSlackを選択してからボタンをクリックする。

ブラウザで対象のSlackワークスペースにログインしていない場合はSlackのログイン画面が表示されるので、 対象のワークスペースにログインする。

接続の許可画面が表示されるので内容を確認の上、許可ボタンをクリックする。

接続の許可

SlackのワークスペースIDを確認する

チャットクライアントの作成に成功するとクライアントのページにリダイレクトされる。
クライアントのページでSlackのワークスペースIDを確認できるので控えておく。

SlackのワークスペースIDの確認

SlackのチャネルIDを確認する

通知したいSlackのチャネルのチャネルIDを確認する。
Slackの通知したいチャネルを右クリックしてチャネルの詳細を表示する。

チャネルの詳細の確認メニュー

チャネルの詳細の一番下にチャネルIDが書いてあるので控えておく。

チャネル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に通知されれば成功。

テストメッセージ