このリポジトリには、AWS ECS タスクの状態変更を監視し、Slack に通知を送信する自動化されたシステムを構築するための Terraform コードが含まれています。
このプロジェクトは以下の機能を提供します:
- AWS ECS タスクの状態変更の監視
- CloudWatch Events と EventBridge を使用したイベントの捕捉
- Slack への通知送信
- 複数コンテナを持つタスクの詳細情報表示
以下は、このシステムのアーキテクチャ概要図です:
このアーキテクチャは以下の主要コンポーネントで構成されています:
- Amazon EventBridge: ECSタスクの状態変更イベントをキャプチャ
- Slack: 通知を受け取るプラットフォーム
このシステムにより、ECSタスクの状態変更がリアルタイムで監視され、即座にSlackチャンネルに通知されます。
ダイアグラムは以下のとおりです:
graph TD
A[CloudWatch Event Rule] -->|トリガー| B[CloudWatch Event Target]
B -->|送信| C[CloudWatch Event API Destination]
C -->|通知| D[Slack]
E[IAM Role] -->|権限付与| B
F[CloudWatch Event Connection] -->|認証| C
G[Secrets Manager] -->|シークレット提供| F
E -->|シークレット読み取り| G
- AWS アカウント
- Terraform v1.9.3 以上がインストールされていること
- AWS プロバイダー v5.60.0 以上
- Slack ワークスペースと通知用のWebhook URL
- Terraform v1.9.3
- AWS プロバイダー v5.60.0
- このリポジトリをクローンします。
terraform.tfvarsファイルを作成し、必要な変数を設定します。terraform initを実行して Terraform を初期化します。terraform planを実行して変更内容を確認します。terraform applyを実行してインフラストラクチャをデプロイします。
以下は terraform.tfvars ファイルのサンプルです。このファイルを作成し、ご自身の環境に合わせて値を設定してください。
aws_region = "ap-northeast-1"
slack_webhook_url = "https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ"
cluster_name = "my-ecs-cluster"
service_name = "my-ecs-service"
container_count = 2各変数の説明:
aws_region: AWSリージョン(例:東京リージョン)slack_webhook_url: Slack通知用のWebhook URLcluster_name: 監視対象のECSクラスター名service_name: 監視対象のECSサービス名container_count: タスク定義内のコンテナ数(デフォルト: 1)
システムがデプロイされると、指定したECSサービスのタスク状態が変更されるたびに自動的に Slack 通知が送信されます。通知には以下の情報が含まれます:
- アカウントID
- サービス名
- アベイラビリティゾーン
- タスクARN
- 起動時間と停止時間
- 停止コードと停止理由
- 各コンテナの名前、終了コード、IPアドレス、停止理由
通知メッセージや監視するイベントタイプは、Terraform コード内で簡単にカスタマイズできます。複数コンテナを持つタスクの場合は、container_count 変数を適切に設定することで、すべてのコンテナの情報が通知に含まれます。
このプロジェクトは MITライセンス の下で公開されています。
プルリクエストや問題報告は大歓迎です。大きな変更を加える前に、まずは Issue でディスカッションを開始してください。

