Amazon Elastic Container Service (Amazon ECS) を AWS CloudFormation で安定化できません。次のエラーが発生します。 サービス arn:aws:ecs:us-east-accountID:service/ServiceName を安定化できませんでした。
簡単な説明
Amazon ECS で作成したサービスは、AWS CloudFormation テンプレートで指定された状態から外れると安定化できません。サービスが目的のタスク定義を使用して必要な数のタスクを起動したことを確認するために、AWS CloudFormation は継続的に DescribeServices API を呼び出します。これらの呼び出しにより、目的の状態が達成されるまでサービスの状態を確認します。呼び出し処理には最大 3 時間かかる場合があります。その場合、AWS CloudFormation がタイムアウトし、「サービス の ARN を安定化できませんでした」というメッセージが返されます。AWS CloudFormation がサービスのステータスをチェックしている間は、そのサービスを含むスタックの状態は CREATE_IN_PROGRESS または UPDATE_IN_PROGRESS に留まり、更新することはできません。
DescribeServices API コールのタイムアウトを回避するには、手動で操作を行い、AWS CloudFormation で Amazon ECS サービスリソースを CREATE_COMPLETE 状態に強制します。Amazon ECS コンソールで必要なサービス数を 0 に設定すると、実行中のタスクが停止します。タスクの数が目的のカウントである 0 に等しくなるため、AWS CloudFormation は更新が成功したと見なします。
重要: AWS CloudFormation を手動で強制的に CREATE_COMPLETE 状態にはしないことがベストプラクティスです。強制停止すると、本番環境が停止する場合があります。
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
解決策
リソース作成を確認する
次の手順を実行します。
-
AWS CloudFormation テンプレートで AWS::ECS::Service リソースを作成します。例を次に示します。
Resources:
ECSServiceA:
Type: AWS::ECS::Service
Properties:
DesiredCount: 1
Cluster: awsExampleECSCluster
LaunchType: EC2
ServiceName: "MyNginxService2"
TaskDefinition: NginxTask:1
-
AWS CloudFormation コンソールを開き、スタックを選択します。
-
[イベント] タブを選択し、リソースが作成されていることを確認します。
必要なサービス数を更新する
AWS CLI または Amazon ECS コンソールを使用することで、必要なサービス数を元の値に更新できます。
AWS CLI
次の手順を実行します。
-
サービスを記述し、サービスイベントを一覧表示するには、AWS CLI コマンド describe-services を実行します。
aws ecs describe-services --cluster awsExampleECSCluster --services MyNginxService2
-
必要なサービス数を更新するには、AWS CLI コマンド update-service を実行します。
aws ecs update-service --cluster awsExampleECSCluster --service MyNginxService2 --desired-count 0
-
--desired-count を元の値に更新します。
Amazon ECS コンソール
次の手順を実行します。
-
Amazon ECS コンソールを開きます。
-
ナビゲーションペインで [クラスター] を選択し、作成した Amazon ECS サービスを含むクラスターを選択します。
-
[クラスター] ページで、作成した Amazon ECS サービスを含むクラスターを選択します。
-
選択したクラスターのページの [サービス名] 列で、サービスを選択します。
-
[イベント] タブを選択し、[更新] を選択します。
-
[サービスの構成] ページの [タスク数] に 0 を入力します。
-
[次のステップ] を選択してサービス更新ウィザードの最後まで進み、[サービスを更新] を選択します。
これでサービスは定常状態になり、AWS CloudFormation の Amazon ECS サービスリソースは CREATE_COMPLETE or UPDATE_COMPLETE に移行します。
重要: 基盤となるタスクの問題を解決した後、AWS CloudFormation スタックを Amazon ECS サービスのプロパティと同期します。同期を実行するには、目的のカウント (desiredCount) を手動でテンプレートの元の値に戻します。
関連情報
Amazon Elastic Container Service について
services-stable
DescribeServices