ECSタスクの実行ログをSNS経由で投げてくれるLambda関数とデプロイ用のTerraformコードの一式。
ここ数年似たようなことをするのが多いので、リポジトリとしてまとめて管理しておく。
別にECSに限ったことではなく、EventBridgeで捕まえてログをCloudWatch Logsから収集してくる・・・というのは変わらないので他のものにも使い回せる。
ECSタスクもといコンテナの実行ログの管理をCloudWatchにまかせているケースは多いと思う。つまりログドライバーとしてawslogs
を使っている、ということ。
何かECSで問題が発生したとき、その旨を通知するだけでなくログも可能なら見たい。早期にログを確認できれば、何が起きているか?影響はどのくらいか?どう対処すれば良いか?を検討することが可能なことが多いだろう。一次対応の迅速化につながる。
ただし、現状のAWSおよびECSなどにはそういった機能は存在しない。他サービスと組み合わせて独自実装する必要がある。
- EventBridgeにてECSタスクの失敗を検知
- EventBridgeがログ収集&送信用のLambdaを実行
- Lambdaが起動し、担当するECSサービス配下のタスクの実行ログをCloudWatch Logsから収集
- 収集したログをまとめてSNSに連携
- SNSからメール送信してログを通知
CloudWatch LogsはManagementConsole経由で確認する場合は楽だが、APIを叩く場合、全量を持ってくるのにはひと手間かかる。そういった実装も含めた上でLambda関数を実装する。