Re:ECS タスクの停止理由を Slack へ通知してみた

2024/08/01に公開

はじめに

暑い日々が続きますね。
なんだかんだでAI界隈に中々DeepDiveできない @___nix___ です。

背景

「ECS のタスク停止理由を Slack に通知してみた」をテーマにすると、ECSタスク停止後の昇天までの時間は1時間以内ということで皆さん様々なご苦労をされているかと思います。

  • 1時間以内にログを確認
  • EventBridgeでストップイベントをフック
  • 等々

そこで先日(勝手に)リスペクトしているたかくにさんが次のようなブログを執筆してました。
https://dev.classmethod.jp/articles/ecs-task-stop-reason-slack-notification/

これ、めっちゃ便利やん!と思いながらも画面見ながらポチポチし、「ここはこうかな?」と考えながらAWSマネージドコンソールとにらめっこするのがツラミでした。

「それならもうIaC(Terraform)で書いちゃおう!」という勢いで進めて行こうと思いますが、更にアーキテクチャをシンプルにした実装をご紹介します。

概要

EventBridge API Destinations

みなさん、EventBridge に API Destinations という仕組みがあることをご存知でしょうか。
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-api-destinations.html
実はこの仕組みを使うと SNS や Chatbot を経由しなくても Slack に簡単に通知が出来てしまうのです。

アーキテクチャ

ではアーキテクチャの紹介です。ドン!
しっかりとたかくにさんの魂を受け継いでいます。

ダイアグラム

AWSリソースのそれぞれの役割と仕組みです。
難しそうに見えますが、実はほぼ EventBridge の機能です。

通知例

こちらもたかくにさんのテンプレートを踏襲しています。
しかも痒いところに手が届いた情報も!(これはきっと嬉しいでしょう)

実装

準備

さて、ここまでを読んで少しは胸が高揚してきたでしょうか。
IaC(Terraform) でやり切るという宣言通りみなさんにも簡単に実現できる方法をご用意しました。

https://github.com/nix-tkobayashi/aws-ecs-task-monitoring-slack-notification

始め方

リポジトリからCloneして、terraform.tfvars で以下の3つの変数を設定するだけです。
その他の手順は README.md をご覧ください。

aws_region         = "ap-northeast-1"
slack_webhook_url  = "https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ"
cluster_name       = "my-ecs-cluster"

終わりに

「Re:ECS のタスク停止理由を Slack に通知してみた」は如何でしたでしょうか。

恐らく多くの環境で既に通知やデータ蓄積等の仕組みが実装されているかと思いますが、「こんな軽量なアーキテクチャで出来るなら!」とリファクタリングを検討される方もおられるのではないでしょうか。

通知のカスタマイズもコードを少し変えれば良いのでご自由にアレンジしてください。
payload が間違っていていつまでも通知が来ないとかにはご注意を^^

一言

最後に改めてたかくにさん及びその記事に感謝申し上げます。

気安くお名前を連呼させて頂きましたが、面識はございませんw
どこかでAWS界隈の方と仲良くできる日を楽しみにしております。

この記事良かったと少しでも思って頂けたら是非 @___nix___ をフォローしてあげてください。或いは記事に対してリアクションをお願い致します。

Discussion