AWS CloudFormation で Amazon ECS サービスが、安定化に失敗するのを止めるにはどうすればよいですか?

最終更新日: 2019 年 5 月 29 日

AWS CloudFormation で Amazon Elastic Container Service (Amazon ECS) が安定化に失敗します。「Service arn:aws:ecs:us-east-accountID:service/ServiceName did not stabilize.」というエラーが表示されています。 このエラーの解決方法を教えてください。

簡単な説明

Amazon ECS で作成したサービスが AWS CloudFormation テンプレートで指定した状態でない場合、そのサービスは安定化に失敗します。サービスがタスク定義で希望する数のタスクを起動したことを確認するために、AWS CloudFormation は DescribeService API 呼び出しを繰り返します。これらの呼び出しは、状態が要求通りになるまで、サービスのステータス確認を続けます。この呼び出しプロセスには、最大で 3 時間かかります。その後 AWS CloudFormation はタイムアウトし、「Service ARN did not stabilize」というメッセージを返します。AWS CloudFormation がサービスの状態をチェックしている間、そのサービスを含むスタックは CREATE_IN_PROGRESS、または UPDATE_IN_PROGRESS の状態に維持され更新することはできません。

ECS サービスの中で原因となっている問題をすぐに解決できず、タイムアウトのためにDescribeService API が呼び出されるのも待てない場合は、AWS CloudFormation の ECS サービスリソースの状態を、手動で強制的に CREATE_COMPLETE にすることができます。これは、Amazon ECS コンソールでサービスの必要実行回数を手動によってゼロに設定し、実行中のタスクを停止することで行えます。こうすると、必要とされている 0 回とタスクの回数が一致することになり、AWS CloudFormation は更新が成功したと認識します。

重要: サービスが実稼働中に、AWS CloudFormation を手動で強制的に CREATE_COMPLETE の状態にすることは推奨しません。すべての実行中のタスクが停止し、プロダクションの停止を引き起こす恐れがあります。

解決方法

リソースの作成の確認

1.    AWS CloudFormation テンプレートで、 AWS::ECS::Service リソースを作成します。次の例を参照してください。

Resources:           
ECSServiceA:
 Type: AWS::ECS::Service
Properties:
  DesiredCount: 1
  Cluster: awsExampleECSCluster
  LaunchType: EC2
  ServiceName: "MyNginxService2"
  TaskDefinition: NginxTask:1

2.    AWS CloudFormation コンソールを開き、スタックを選択します。

3.    [Events★] タブを選択し、リソースが作成中であることを確認します。

サービスの必要回数を変更

AWS コマンドラインインターフェイス (AWS CLI) または Amazon ECS コンソールから、サービスの必要回数を希望する値に変更できます。

AWS CLI:

1.    次のコマンドを実行し、サービスの詳細とサービスイベントの一覧を表示します。

aws ecs describe-services --cluster awsExampleECSCluster --services MyNginxService2

2.    次のコマンドを実行し、サービスの必要回数を変更します。

aws ecs update-service --cluster awsExampleECSCluster --service MyNginxService2 --desired-count 0

3.    --desired-count を希望の値に更新します。

Amazon ECS コンソール:

1.    Amazon ECS コンソールを開きます。

2.    ナビゲーションペインで、[Clusters★] を選択し、作成した ECS サービスを含むクラスターを選択します。

3.    [Events★] タブを選択し、[Update★] をクリックします。

4.    [Number of tasks★] に 0 を入力します。

これでサービスが安定し、AWS CloudFormation の ECS サービスリソースは、CREATE_COMPLETE もしくは UPDATE_COMPLETE の状態に移行します。

5.    [Number of tasks★] に希望の値を入力します。

注: 基盤となるタスクに関する問題を修正した後、AWS CloudFormation スタックを ECS サービスのプロパティと同期させるには、必要回数を元のテンプレートと同じ値に手動で戻す必要があります。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合