ECSタスクのスケールアウト中に、CloudFormationのデプロイを行いECSサービスを更新した場合、DesiredCountはテンプレートで指定している値で更新されますか
困っていた内容
ECSタスクでApplication AutoScaling ( AWS::ApplicationAutoScaling::ScalableTarget、ScalingPolicy を指定) を使用しています。
Application Auto ScalingのScheduled Actionによって、アクセスが集中する特定の時間帯でECSタスクをスケールアウトしています。 具体的には、アクセスが集中する夜間に DesiredCount を6に設定し、アクセスが減少する深夜に再び 3 に戻しています。
CodePipelineにより、ソースコードが更新されたタイミングで、CloudFormationのスタックのデプロイを行うよう設定しているのですが、 スケールアウトしている時間帯に、CloudFormationのデプロイが実行されてECSサービスが更新された場合、 ECSタスクのDesiredCountはCloudFormationのテンプレートで指定している値に上書きされるのでしょうか?
どう対応すればいいの?
スケジュールでの DesiredCount の更新と CloudFormation の更新のいずれの場合も、ECS サービスの更新は UpdateService API を使用して更新されます。
Application AutoScaling により DesiredCount を 6 と設定した場合でも、 CloudFormation から DesiredCount 3 が指定されて更新されると、 結果的に DesiredCount は 3 となります。 直近の UpdateService の呼び出しで指定した DesiredCount が反映されることになります。
スケジュールにより DesiredCount を変更している状況は、CloudFormation により作成したリソースを CloudFormation の外部で変更している状況となります。
CloudFormation から更新する際にも、デプロイする時間に応じて、 CloudFormation テンプレートのパラメータ: ECSTaskDesiredCount に指定する値を変更することでご対応ください。