如何防止 Amazon ECS 服务在 AWS CloudFormation 中无法保持稳定?

2 分钟阅读
0

我的 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

相关视频

AWS 官方
AWS 官方已更新 3 年前