2
0

TerraformでAWS ChatBotとSlackを連携させる手順

Posted at

はじめに

TerraformでAWS ChatBotを作成し、Slackと連携させるための手順をまとめる。

テスト用のチャンネルを作成

Slackからテスト用のチャンネルを作成します。
image.png

chatbot-testという名前にします。
image.png

今回はパブリックチャンネルにしておきます。
image.png

SlackワークスペースIDを取得

AWS ChatBotのコンソール画面からチャットクライアントにSlackを設定します。
※ ここの設定をTerraformからは行えないため、事前にブラウザから行います。
image.png

ChatBotからワークスペースへのアクセスを許可します。
image.png

許可をすると、設定済みクライアントにワークスペースとの連携が追加されます
「ワークスペースの詳細」にワークスペースIDが表示されるので、こちらを後々利用します。
image.png

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に成功すると、設定済みチャネルに指定したチャンネルが追加されます。

image.png

また、SNSトピックと、Chatbotへのサブスクリプションが作成されます。

image.png

image.png

テスト送信

Chatbotコンソールの「テストメッセージを送信」からテストメッセージを送信してみます。
image.png

下記のメッセージがSlackに届きました。
image.png

参考資料

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0