🐵

AWS chatbotを使用してSlackに通知を飛ばす方法

2024/12/31に公開

概要

今回は、AWSchatbotを使用してSlackに通知を飛ばす方法を自分なりにまとめました。

目的

ECSでのデータ更新を行っております。この時、cloudwacthにはログが出力されていますが、
都度の確認ができないため、slackに通知できるように仕組み化する必要がありました。
以前であれば、Slackのappのwebhookでの利用を行っていましたが、非推奨となったため代替方法を探していると、AWSchatbot+SNSでslackに通知ができそうだったため今回試してみました。
今回は、サンプルコードをshellscriptで実行するところまでを公開したいと思います。

躓いたポイント

・SNSのメッセージが、AWS chatbot 専用の形式でのみしか送れなかった点
→参考の公式ドキュメントを参考にメッセージを作成
参考
https://docs.aws.amazon.com/chatbot/latest/adminguide/custom-notifs.html#event-schema

試したこと

  1. slackでのawsのappのインストール
  2. AWS chatbotの設定
  3. snsのトピックの作成
  4. サブスクリプションの作成
  5. 以下のサンプルコードの変数を変更する
    →test.pyとして作成
chmod +x test.sh

実行権限を付与して以下のコマンドを実行

./test.sh      

サンプルコード(shell)

#!/bin/bash

# SNSトピックARN
TOPIC_ARN="{SNSトピックのARN}"

# メッセージ内容をJSON形式で定義
MESSAGE=$(cat <<EOF
{
    "version": "1.0",
    "source": "custom",
    "id": "unique-event-id-$(date +%s)",
    "content": {
        "textType": "client-markdown",
        "title": "📢 更新完了",
        "description": "更新が完了しました。",
        "nextSteps": [
            "サービスを確認する",
            "サービスを再起動する"
        ],
        "keywords": [
            "更新完了",
            "完了"
        ]
    },
    "metadata": {
        "threadId": "thread-12345",
        "summary": "更新完了の概要",
        "eventType": "UpdateComplete",
        "relatedResources": [
            "arn:aws:ec2:region:account-id:instance/instance-id"
        ],
        "additionalContext": {
            "customerProvidedKey1": "追加情報1",
            "customerProvidedKey2": "追加情報2"
        }
    }
}
EOF
)

# SNSにメッセージを公開
aws sns publish \
    --topic-arn "$TOPIC_ARN" \
    --message "$MESSAGE"

# メッセージIDを表示
echo "メッセージが公開されました。"

実行結果

ターミナル

notice ./test.sh 
{
    "MessageId": "cd383db2-d974-59bf-a131-625f7d4270a9"
}
メッセージが公開されました。

Slack

所感

今回の、通知方法を使用することで様々なリソースからの通知をスラックに転送できそうだと感じました。また、スラックで受け取った通知にアクションを設定して他のタスクの自動化もできそうだったので
そちらもやってみたいと思いました。
この記事をお読みいただき、ありがとうございます。
フィードバックを頂けますと幸いです。

Discussion