AWS 基礎10

ECR — imageを安全に届け、
戻せるようにする

Docker imageをECRに保存し、ECSが実行する版を選びます。保存することより、どの版を再現できるかが運用の中心です。

TL;DR
  1. build → push → ECS pull の一本道を捉える
  2. タグはGit commitと対応させてimmutableにする
  3. 環境分離と世代管理で削除事故を防ぐ

01imageがECSで動くまで

ECRは実行物を受け渡す保管庫です。ローカルでbuildしたimageをpushし、task definitionが参照するimageをECSがpullします。

Docker imageがECRを経由してECSへ届く図
local build → ECR push → ECS pull

02タグは「何を動かすか」の約束

latestを上書きすると、同じ名前が別の内容を指します。Git commit hashをimmutableなtagにすれば、実行版の追跡とロールバックができます。

mutable tagとimmutable tagの比較図
再現性が必要な環境では、tagを上書きしない。
運用結果
mutableなlatest参照先が変わり、過去の版を特定しにくい
immutableなcommit tagGitのcommitと実行imageを対応付けられる

03削除は環境ごとに管理する

dev・stg・prdを同じrepositoryに入れると、開発のpushが本番の保存世代を押し出し得ます。repositoryを環境で分け、lifecycle policyはロールバック用の世代を残して設定します。

環境ごとに分離したECR repositoryの図
環境を分けると、削除ポリシーも安全に分けられる。

結論

  1. ECRはECSが動かすimageの版管理である。
  2. commitと対応したimmutable tagを選ぶ。
  3. lifecycle policyは復旧に必要な世代を残す。