1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Step FunctionsとEventBridgeから旧Chatbotを使わずにSlack送信する。

1
Posted at

はじめに

AWSの各種サービスからSlackへ送信する場合、Amazon SNSAmazon Q Developer in chat applications(旧AWS Chatbot)を使うとSlackへメッセージを送信することが出来ますが、先日Amazon Q Developer in chat applicationsを使わずにSlack送信する構成を構築したのでやったことを残しておこうと思います。

Amazon Q Developer in chat applicationsを使わないSlack送信

Amazon Q Developer in chat applicationsを使わない場合、LambadでコーディングしてSlack送信する方法等がありますが、EventBridge Connections(以降EventBridge接続)、EventBridge API Destination(以降EventBridge API送信先)という機能を使用することで、Lambda等でコーディングしなくても送信することができます。

以下よりSlack側の設定、EventBridge接続&API送信先設定と、テストのためのStep Functions&EventBridge Ruleの設定を行っていきます。

Slack側設定

Slack送信を行うため、先にSlack Appを設定します。

Slack側の設定としてはいくつか方法がありますが、よく紹介される「Incoming Webhook」の方式では、SlackチャンネルごとにURLが払い出されることから、同じSlackワークスペースで複数のチャンネルに送信するとき、ちょっと手間なので、今回は複数チャンネルでの設定を行う場合でも手間が少ないBot Tokenの方式で設定します。

また、Slackのチャンネルはプライベートチャンネルに送信する想定で進めます。

Slack Appの作成

Slack Appをインストールするため、Slackの横バーの「エージェントとツール」→「Slackマーケットプレイスをブラウズする」から「構築」を選択、もしくはSlack APIページのURL( https://api.slack.com/apps/ )を直接入力して「Your Apps」画面に遷移します。

Create New App」より「Blank app」を選択し、「Continue」で先に進みます。

Monosnap_20260828_091737.png

作成するアプリケーションの名前とワークスペースを入力して、「Create」でSlack Appを作成します。

Monosnap_20260828_091835.png

Slackのスコープ設定

作成したSlack Appの設定画面より、「OAuth & Permissions」の「スコープ」の「ボットトークンのスコープ」から、「OAuthスコープを追加する」を選択し、Bot Tokenの権限設定を行います。

Slackへの送信以外に絵文字等使いたい場合はchat:write.customizeも必要なようなので、以下のように設定しました。

Monosnap_20260829_151152.png

OAuthトークンのインストール

先ほどスコープ設定した「OAuth & Permissions」の「OAuth Tokes」から「Install to [ワークスペース名]」を選択します。

Monosnap_20260829_160817.png

以下のような確認画面が表示されるため、「許可する」を選択することでトークンが発行されます。

Monosnap_20260829_161258.png

トークンは後ほど使用するため、「Copy」ボタンをクリックし、コピーしておきます。

Monosnap_20260829_161430.png

もしトークンを再発行したい場合は「Reinstall to [ワークスペース名]」を選択して再発行してください。

Slackチャンネルへのアプリの追加

作成に成功していれば、Slackの左バーの「エージェントとアプリ」に作成したアプリが表示されていると思いますので、AWSからのSlackメッセージを受け取りたいチャンネルで以下のように「/invite [Slackアプリ名]」を入力します。

Monosnap_20260829_182547.png

以下のように追加された旨が表示されれば準備完了です。

Monosnap_20260829_182616.png

AWS側Slack送信設定

Step Functions、EventBridge Rule設定を行う前に、Slack送信に使う共通的なSlack接続設定を行っていきます。

先ほど説明した通り、EventBridge接続というEventBridgeのサービスを利用することでSlackへ送信することが出来ます。

また、EventBridge Ruleから送る場合はEventBridge API送信先の利用も必要となり、設定後にEventBridge Ruleのトリガーとして指定することでSlackに送信することが出来ます。

今回作成する構成での各サービス間のつながりは以下となります。

sfn_slack.png

EventBridge接続やEventBridge API送信先について詳しくは以下公式ドキュメントを参照してください。

EventBridge接続の作成

EventBridge」ダッシュボードより「結合」→「接続」から「接続を作成」を選択し、以下のように設定します。

項目 設定 備考
接続名 slack-send-connections 任意の名前を指定
説明 ※空欄 今回は未設定
APIタイプ パブリック Slackチャンネルのタイプではなくネットワークのタイプ
Slackは外部サービスのためパブリックで指定
認証を設定 カスタム設定 今回はテンプレートは使用しない
認証タイプ APIキー
APIキー名 Authorization Slack送信に必須となるヘッダとなるため必ず指定
Bearer [先程コピーしたトークン] 先頭にBearerの指定が必要となるためコピーしたトークンの先頭に付与する
暗号化 AWS所有キーを使用する 今回はAWSキーを使用

尚、APIキーの値を指定する際、Bearerとトークンとの間にスペースが必要なので忘れずに指定してください。

また、APIキーについては、EventBridge接続の設定時、シークレットマネージャーに自動で登録され、以下のように手動で変更を行えないようになっているため、更新するときには直接EventBridge接続の設定を更新するようにしてください。

Monosnap_20260829_213636.png

EventBridge API送信先の設定

EventBridge RulesからのSlack送信用としてEventBridge API送信先の設定を行います。

項目 設定 備考
名前 slack-send-api送信先 任意の名前を指定
説明 ※空欄 今回は未設定
API送信先エンドポイント https://slack.com/api/chat.postMessage Bot Tokenでチャット送信する際に指定
HTTPメソッド POST POSTを指定
1秒あたりの呼び出しレート制限 ※空欄(デフォルト300回) 今回はデフォルト
接続タイプ 既存の接続を使用 先ほど作成したEventBridge接続の名前を指定

チャンネルごとにURLが異なるIncoming Webhookの場合とは異なり、Bot Tokenでの送信の場合はchat.postMessageのAPIエンドポイントに送信することでSlack送信することになります。

chat.postMessageのAPI仕様については以下参照。

AWS側Step Functions & EventBridge Rule設定

ここまでの設定で、Slackへの送信準備が出来たため、Slackへ送信テストを行うためのStep Functionsの設定とStep Functionsが失敗したときに検知してSlack送信を行うEventBridge Ruleの設定を行っていきます。

Step Functionsの作成

今回はStep FunctionsからSlack送信出来るかを確認するため、送信のみ行うワークフローを作ってみようと思います。

Step Functions」ダッシュボードより「ステートマシン」→「ステートマシンの作成」から以下のように作成していきます。

項目 設定 備考
ステートマシンの作成 空白から作成 今回はテンプレートは使用せずに作成
ステートマシン名 slack-send-sfn 任意の名前を指定
ステートマシンのタイプ 標準 今回はテストのため標準

Step Functionsから各種APIに送信する場合、「Call HTTPS APIs」アクションを使用してAPI送信することになるため、「アクション」にあるオブジェクトを中央の配置画面にドラッグ&ドロップして以下のように設定します。

設定は以下の「設定」タブの部分のみ設定すれば問題ありません。

Monosnap_20260829_224235.png

Step FunctionsではEventBridge API接続先に当たる設定を「Call HTTPS APIs」で行うため、直接EventBridge接続に送ることで、Slack送信できるようになっています。

項目 設定 備考
状態名 Call HTTPS APIs デフォルトでアクション名が指定されるためそのまま使用
APIエンドポイント https://slack.com/api/chat.postMessage EventBridge API送信先設定で設定した時と同じpostMessageのURLを指定
メソッド POST POSTを指定
接続 slack-send-connections 先ほどEventBridge接続で作成した接続名を指定
リクエスト本文 ※以下に記載 Slack送信する際のテキストなどを指定

リクエスト本文は「chat.postMessage method」に記載の仕様に沿って、送信するチャンネル名やメッセージ本文を記載します。

また、必須引数となっているtokenについてはEventBridge接続で設定したトークンを使用するため、Step Functionsでの指定は不要です。

リクエスト本文
{
  "channel": "slack_test",
  "icon_emoji": ":large_green_circle:",
  "text": "Step Functions実行成功"
}

channelについてはチャンネル名かチャンネルIDが指定できます。

リクエスト本文をもっと凝ったデザインにしたい場合は、Slack Block Kit Builderからテンプレート等を参照しつつ作ってみてください。

Step FunctionsからのSlack送信

ワークフロー作成後、「実行を開始」から実行することでSlackへ送信出来るか確認します。

以下のようなメッセージがSlackに通知されれば成功です。

Monosnap_20260829_235047.png

EventBridge Rule作成

先ほど作成したStep Functionsの実行が失敗した場合にSlack通知するため、EventBridge Ruleの設定を行っていきます。

EventBridge Ruleでは、Step Functionsのエラー通知をキャッチし、ターゲット指定でEventBridge API接続先を指定することで送信します。

項目 設定 備考
ビルダーモード アドバンストビルダー 今回はアドバンストビルダーで作成
名前 slack-send-eb 任意の名前を指定
説明 ※空欄 今回は未設定
イベントパス default テストのためdefaultで実施
選択したイベントバスでルールを有効にする 有効 設定後すぐに有効化
イベントソース AWSイベントまたはEventBridgeパートナーイベント
作成のメソッド パターンフォームを使用する
イベントソース AWSのサービス
AWSのサービス Step Functions Step Functionsからのイベントをキャッチする
イベントタイプ Step Functions Execution Status Change
イベントタイプの仕様1 特定のステータス(FAILED、TIMED_OUT、ABORTED) エラー系のステータスを選択
イベントタイプの仕様2 任意のステートマシンARN 今回は任意で指定
イベントタイプの仕様3 任意の実行ARN 今回は任意で指定

イベントパターンの設定画面の抜粋も以下に示します。

Monosnap_20260830_001242.png

ターゲットを選択」以降の設定は以下のように指定します。

タグ等は今回設定しないため、以下入力後は「レビューと作成にスキップ」に進み、作成してしまって問題ありません。

項目 設定 備考
ターゲットタイプ EventBridge APIの宛先 EventBridge API送信先を指定するために選択
API送信先 既存のAPI送信先を使用 先ほど作成したEventBridge API送信先を指定
実行ロール デフォルトロールを作成 今回はテストのためデフォルトで作成
追加設定 ※追加設定を開く リクエスト本文の指定をするため追加設定を開く
ターゲット入力を設定 入力トランスフォーマー リクエスト文については後述
再試行ポリシー ※空欄 今回はデフォルト
デッドレターキュー なし 今回はデフォルト

入力トランスフォーマーの設定は、今回は入力パスで失敗ステータスだけ取得し、テンプレートのtextに失敗ステータスも入力するようにしました。

入力パス
{"status":"$.detail.status"}
テンプレート
{
  "channel": "slack_test",
  "icon_emoji": ":rotating_light:",
  "text": "Step Functions実行失敗(Status: <status>)"
}

入力パスやテンプレートの書式は、入力トランスフォーマー設定画面で確認出来る「サンプルイベント」や「入力パス、テンプレート、および出力の例」を参考にしつつ設定してください。

Monosnap_20260830_015523.png

Step Functions失敗時のSlack送信

Step Functions失敗時のSlack送信を確認するため、以下のように「Fail state」のみ指定するようにして実行してみます。

Monosnap_20260830_020022.png

以下のようにEventBridge Ruleで設定したリクエスト本文と、Statusに変数指定したステータスが表示されていれば成功です。

Monosnap_20260830_020217.png

おわりに

今回は旧Chatbotを使用せずにEventBridge接続とEventBridge API送信先を使用したSlack送信を行ってみました。

旧Chatbotの場合、Slackへ送信できるフォーマットが限られてしまうこと、別途SNS(Sinple Notification Service)も必要になることから、柔軟なフォーマットで送信でき、設定も難しくなく、LambdaのようにコーディングしなくてもすむEventBridge接続設定を使うのは今の時代でもありだなと感じました。

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?