私はこれが古いスレッドであることを知っていますが、解決策はここでの答えのほとんどがそうであるよりもはるかに簡単です。
2つのステップで実行中のコンテナーを更新する方法:
以下は、タグ付けされたコンテナlatest
(またはコンテナの更新後も変更されないその他の静的タグ)を参照しているタスクを実行するサービスがあることを前提としています。
- 新しいコンテナをリポジトリにアップロードします
- タスクを手動で強制終了する
目標が新しいビルドを世に出すことである場合、そのためにサービスに実際に依存する必要はありません(そして、私はそれに依存するべきではないと主張します)。タスクを強制終了すると、サービスはDesired Count
実行中のタスクがないことを認識し、単に新しいタスクを起動します。これにより、同じタグに基づいて、コンテナの再プルがトリガーされます。
ECSサービスはHAセキュリティネットであり、CD / CIパイプラインに代わるものではありません。
ボーナス:目標が(タグに関係なく)新しいコンテナーがプッシュされたことをサービスに認識させることである場合、その意味を考慮する必要があります。展開パイプラインを制御する基本的なサービスが本当に必要ですか?そうではない。理想的には、(リリースバージョンなどに基づいて)異なるタグでコンテナをプッシュします。この場合、展開の障壁は、サービスに何か新しいことを通知する必要があることです。これも、サービスのセーフティネットであり、それ以上のことはありません。
3つの手順で新しいタグを展開する方法:
container:tag
リポジトリに新しいものをアップロードします
- 新しいを参照する新しいタスク定義を作成する
tag
- サービスを更新して、新しいタスク定義を参照します
- ここで注意してください!他のいくつかの回答が示唆するように
minimum healthy
設定し0%
ている場合、新しいタスク定義をデプロイするために、AWSにサービス全体を強制終了する完全な権限を付与しています。ローリング/段階的展開を希望する場合は、最小値を何かに設定します>0%
。
- または、
minimum healthy
to 100%
とyour maximum healthy
を設定して、古いタスクを終了する前に>100%
サービスが新しいタスクを展開できるようにします(ユーザーへの影響を最小限に抑えます)。
この時点から、サービスは新しいタスクを指定したことを自動的に認識し、構成したminimum
/ maximum
正常なしきい値に基づいてそのタスクの展開に取り組みます。