2017-10-31 5 views
0

ECSクラスタ内のドッカーホストとして使用するEC2インスタンスの自動スケーリンググループを作成するTerraformの配置があります。クラスタにはタスクが実行中です。新しいタスク定義のリビジョンを作成してサービスを更新することで、AWSがローリングアップデートを実行します。しかし、どのように私は簡単にダウンタイムなしで新しいものとEC2ホストインスタンスを置き換えることができますか?terraform setupのECSコンテナインスタンスを置換する

私はこれを次のようにしたいと思います。異なるEC2インスタンス・タイプに切り替えるなど、ASGの起動構成の変更を有効にします。私はいくつかのことを試してみた

は、ここで私は私が欲しいものに近い取得考えるものです:

  1. つのインスタンスを排出します。タスクは残りのインスタンスに配布されます。
  2. タスクがもうそのインスタンスで実行されていない場合は、終了します。
  3. ASGが新しいインスタンスをスピンアップするまで待ちます。
  4. すべてのインスタンスが新しいものになるまで、手順1〜3を繰り返します。

これはほとんど動作します。問題は次のとおりです。

  1. マニュアルでエラーが発生しやすいです。
  2. このプロセスの後で、インスタンスの1つ(最後にスピンアップされたインスタンス)が0(ゼロ)のタスクを実行しています。

これを行うための自動化された方法がありますか?また、(新しいタスクリビジョンを作成せずに)ECSクラスタ内でタスクを再配布する方法はありますか?

+0

[AWS ECSで別のASGにコンテナを移行させるにはどうすればいいですか?](https://stackoverflow.com/questions/39949227/how-to-force-aws-ecs-migrate-containers-to-another- asg) – ydaetskcoR

+0

https://stackoverflow.com/a/39977487/2291321で以前の回答を更新したばかりです(元のコメントに記載されているように)前回のASGから安全にECSタスクを排除していたからですそれらを破壊してサービスの中断を招いた。 – ydaetskcoR

答えて

0

変更を行う前に、複数のアベイラビリティゾーンにまたがってASGが設定されていることを確認してください。これにより、1つのゾーンでインスタンスが停止している場合の高可用性が保証されます。

あなたが遅いと安全ローリング・アップグレードを維持するために、より高い値にMinInstanceInServiceMinSuccessfulInstancesPercentを設定することができますAutoScalingRollingUpgradeと自動スケーリンググループのアップデートポリシーを設定することができます。

thisのドキュメントを参照して、さらに調整を行うことができます。このプロセスを自動化するには、terraformを使用してASG起動構成を更新します。これにより、新しいバージョンの起動構成でASGが更新され、ローリング・アップグレードがトリガーされます。

+0

ECSは新しいインスタンスに対して新しいタスクを自動的にスケジュールしないため、これは機能しません。代わりに、古いコンテナインスタンスを交換する前に排除する必要があります。ここで説明するように、ASGライフサイクルフックでこれを行うことができます:https://stackoverflow.com/a/39977487/2291321 – ydaetskcoR

関連する問題