ECS最適化AMIの更新を検知する運用ノウハウ

こんにちは、L小川です。
最近は休日にいろいろなジャムを作っています。ミルクジンジャージャムがお気に入りです。
本日はECS on EC2で利用する「ECS最適化AMI」の更新を検知する方法について紹介します。

ECS最適化AMIにはECSコンテナエージェント・Dockerエージェント・起動スクリプトのecs-initが含まれており、最新のAMIではバグフィックスや機能拡張が提供されています。AWSでも最新のAMIを使うことを推奨しているので、定期的にAMIを更新したいところです。

アトラスでは、以下の順序でECSのEC2インスタンスを新しいAMIに更新しています。

  • AMIの更新をSlackに通知(←本記事の内容)
  • 各プロダクトの検証環境で動作確認
  • リリースなどのタイミングでインスタンスを差し替え

通知フロー

通知フローは以下のとおりです。

AMI更新通知のフロー図

EventBridge

月〜金でLambdaを日次実行します。業務時間外の通知だと、うっかり見過ごしてしまう可能性があるので業務時間内に通知しています。

Lambda (Python)

SSM の GetParameter API を使って最新AMI IDを取得し、Lambdaのタグに登録します。次回起動時に、「タグに登録されている値」と「取得した最新のAMI ID」を比較して、一致しなければ新しいAMI IDをタグを上書きし、Slackへ通知します。

Lambdaタグのキャプチャ

ソースコード(例)

Slack

Slackに通知された内容を管理表に転記し、プロダクトごとに更新状況を管理しています。

AMI更新通知内容(Slack)のキャプチャ

おわりに

今回は、日常的に行っている運用作業のひとつを紹介しました。
シンプルな仕組みですが、AMIの更新通知が他のメンバーにも見えることで、計画的なインフラ更新・ノウハウの共有ができるようになり、健全なプロダクト運用につながります。
小粒ですがピリッと効く運用かと思いますので、機会がありましたらお試しください。