AWSでECRのレポジトリにあるイメージからECSでコンテナを起動しているアプリケーションで、イメージを更新した場合の対処法について。
CodePipelineで自動化もできるが、ここでは手動で更新する手順について。
イメージを更新しECRにプッシュ
ローカルのプロジェクトを更新したら、イメージを作成してECRにプッシュする。
docker-compose build
↓
AWS ECRにログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 111111111111.dkr.ecr.ap-northeast-1.amazonaws.com
↓doker tag <対象のイメージ名:タグ名> <変更後のイメージ名:タグ名>
※イメージ名はECRのレジストリIDとエンドポイント
↓docker push <対象のイメージ名:タグ名>
ECRレポジトリを確認
イメージが正しくプッシュされているか確認する。

ECSのタスク定義の更新
既存のタスク定義を選択し、新しいリビジョンを作成する。

既存のコンテナをクリックし、コンテナの編集に入り、イメージの場所を新しいイメージのものに変更する。

↓ 更新

↓ 新しいタスクのリビジョンが作成されたか確認

リビジョンの番号が+1されたタスクができていれば更新は完了。
▼注意点
イメージ名とタグ名に変更がない場合でも、このタスク定義の更新を実施すること。更新しないと、古いイメージを参照してしまう。
ECSのサービスを更新
更新するのは、先ほど作成した新しいタスク定義のリビジョンのみ。
▼手順
ECSで対象のクラスターの中の対象のサービスを選択
↓
右上の「更新」をクリック

↓ 最新のリビジョンを選択
タスク定義で作成した最新のリビジョンを選択する

↓ 次のステップ x 4

↓ サービスの更新

↓ 確認
クラスターのタスクタブから、指定したタスク定義のリビジョンでステータスがRUNNINGになっているか確認。

デプロイまでに時間がかかるため、新しいサービスがPENDINGになっている場合もある。
(参考)Blue/Greenデプロイの場合の流れ
新しいプロジェクトを起動中
・旧: RUNNING
・新: PENDING
↓
新しいプロジェクト起動完了。安定するまでの1時間はこの状態を維持
・旧: RUNNING
・新: RUNNING
↓
完全に切り替わり
・新: RUNNING