コンテナの再起動

ECSのある環境を再起動したい

いろいろな理由で再起動したいことはあります。例えば

  • SecretsManagerの変更したので再起動して反映したい
  • docker-php環境を更新したので、再起動して最新のdockerイメージで起動し直したい
  • 起動時のログを追いかけたいとき

などですね。

手順

1. タスク定義のリビジョンを上げる

  • AWS管理画面にログイン
  • 左上のサービス一覧から[ ECS ]を検索してクリック
  • 左側メニューから[ タスク定義 ]を選択
  • 目的の環境のタスク定義をクリック(env25など)
  • 一番新しいリビジョン( 数字の大きいもの )をクリック
  • [ 新しいリビジョンを作成 ]->[ 作成 ] ( この作成は失敗することがあります )

2. クラスター内の各サービスが参照するタスク定義のリビジョンを上げる

  • ECS管理画面の左側のメニューから[ クラスター ]を選択
  • [ dev-20181030-1 ]
  • サービス名のカラムから再起動したいサービス名をクリック(env25など)
  • 右上の方の[ 更新 ]をクリック
  • [ リビジョン ]のプルダウンメニューをクリック
  • 少しスライドして[ latest ]と書いてあるタスク定義を選択(1で作成したリビジョン番号を選択)
  • [ 次のステップ ]->[ 次のステップ ]…->[ サービスの更新 ]

以上でECSコンテナの再起動が行われます

※ 再起動ですが、結構時間かかります… 細かく『いまどういう状態なのか?』を確認する場合ですが、 この再起動はブルーグリーン方式で、ダウンタイムが無いように再起動するようにしています。

どのような順番で行われるかというと、

  1. ECSの該当サービスで追加のタスク( タスクの中には nginx, php-fpm, volumeなどのコンテナが含まれます )が追加されます。
  2. タスクはロードバランサーの中のターゲットグループの中に追加されます( EC2 -> ロードバランサー -> ターゲットグループで該当のサービス名が書いてあるターゲットグループを探す )
  3. dockerコンテナはターゲットグループに追加され、ヘルスチェックに成功すると新しいコンテナをheltyにし、アクセスを受け付け始め古いコンテナをdrainingします 上記の流れで『今、デプロイがどのような状態なのか?』を知ることができます
User
CloudFront
ALB
EC2
RDS