我的 Amazon Elastic Container Service (Amazon ECS) 服务无法在 AWS CloudFormation 中稳定工作。我遇到以下错误:“Service arn:aws:ecs:us-east-accountID:service/ServiceName did not stabilize”(服务 arn:aws:ecs:us-east-accountID:service/ServiceName 不稳定)。
简短描述
如果 Amazon ECS 中创建的服务未处于 AWS CloudFormation 模板指定的状态,则该服务无法稳定工作。为了确保服务使用所需的任务定义启动了所需数量的任务,AWS CloudFormation 会重复 DescribeService API 调用。这些调用检查服务的状态,直到满足所需的状态。调用过程最多可能需要三个小时。然后 AWS CloudFormation 超时,并返回“Service ARN did not stabilize”(服务 ARN 不稳定)消息。AWS CloudFormation 检查服务的状态时,包含该服务的堆栈将保持处于 CREATE_IN_PROGRESS 或 UPDATE_IN_PROGRESS 状态,并且无法更新。
如果您无法立即修复 Amazon ECS 服务任务的底层问题,并且您不希望等待 DescribeService API 调用超时,则可以手动强制让 Amazon ECS 服务资源的状态在 AWS CloudFormation 中进入 CREATE_COMPLETE 状态。为此,请在 Amazon ECS 控制台中手动将所需的服务计数设置为零,以停止正在运行的任务。然后,AWS CloudFormation 会将更新视为成功,因为任务数达到所需的数字零。
**重要:**对于生产服务,手动强制让 AWS CloudFormation 进入 CREATE_COMPLETE 状态并非最佳做法,因为所有任务都会停止,这样做可能会导致生产中断。
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
解决方法
验证资源的创建
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. 选择事件选项卡,然后验证是否正在创建资源。
更新所需的服务计数
您可以使用 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. 在导航窗格中,选择集群,然后选择包含您创建的 Amazon ECS 服务的集群。
3. 在集群页面上,选择包含您创建的 Amazon ECS 服务的集群。
4. 在所选集群的页面上,从服务名称列中,选择您的服务。
5. 选择事件选项卡,然后选择更新。
6. 在配置服务页面上,对于任务数量,请输入 0。
7. 选择下一步以逐步到达更新服务向导的末尾,然后选择更新服务。
该服务现在达到稳定状态,并将 AWS CloudFormation 中的 Amazon ECS 服务资源转换为 CREATE_COMPLETE 或 UPDATE_COMPLETE。
**重要提示:**要在修复底层任务问题后使 AWS CloudFormation 堆栈与 Amazon ECS 服务属性同步,您必须根据您的模板手动将所需的计数(DesiredCount)更改回原始值。
相关信息
更新服务
update-service
services-stable