对 Amazon ECS 部署策略更新进行问题排查
本节提供在迁移部署策略时可能遇到的常见问题的解决方案。
多个服务修订版或任务集
以下问题与部署存在多个服务修订版有关。
- 更新 ECS 部署控制器时存在多个任务集
-
错误消息:
Updating the deployment controller is not supported when there are multiple tasksets in the service. Please ensure your service has only one taskset and try again.解决方案:尝试更改具有多个有效任务集的服务的部署控制器类型时,会发生此错误。要解决
CODE_DEPLOY或EXTERNAL部署控制器中出现的此问题,请执行以下操作:-
检查当前任务集:
aws ecs describe-services --clusteryour-cluster-name--servicesyour-service-name--query "services[0].taskSets" -
等待任何正在进行的部署完成。
-
强制实施新部署以清理任务集:
aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--force-new-deployment -
如有必要,请手动删除额外的任务集:
aws ecs delete-task-set --clusteryour-cluster-name--serviceyour-service-name--task-settask-set-id -
当只剩下一个任务集后,重新尝试更新部署控制器。
有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略。
-
- 更新
ECS部署控制器时缺少主任务集 -
错误消息:
Updating the deployment controller requires a primary taskset in the service. Please ensure your service has a primary taskset and try again.解决方案:尝试更改没有主任务集的服务部署控制器类型时,会发生此错误。要解决此问题,请执行以下操作:
-
验证服务状态和任务集。如果服务中存在任务集,则应将其标记为
ACTIVE。aws ecs describe-services --clusteryour-cluster-name--servicesyour-service-name--query "services[0].taskSets[*].[status,id]如果服务中没有处于
ACTIVE状态的任务集,请迁移部署。有关更多信息,请参阅迁移方法。 -
如果服务没有正在运行的任务,请通过更新服务来部署至少一个任务:
aws ecs update-service-primary-task-set --clusteryour-cluster-name--serviceyour-service-name--primary-task-set your-taskset-id这会将服务中的(先前为
ACTIVE)任务集标记为PRIMARY状态。 -
等待任务达到稳定的运行状态。可以通过以下方式查看状态:
aws ecs describe-services --clusteryour-cluster-name--servicesyour-service-name--query "services[0].deployments" -
当服务拥有主任务集且任务正在运行后,重新尝试更新部署控制器。
有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略。
-
部署失败检测类型和部署控制器不匹配
以下问题与部署失败检测类型和部署控制器不匹配有关。
- 使在非 ECS 控制器上使用部署断路器
-
错误消息:
Deployment circuit breaker feature is only supported with ECS deployment controller. Update to ECS deployment controller and try again.解决方案:尝试在未使用
ECS部署控制器的服务上启用部署断路器功能时,会发生此错误。部署断路器仅与ECS部署控制器兼容。-
检查服务的当前部署控制器:
aws ecs describe-services --clusteryour-cluster-name--servicesyour-service-name--query "services[0].deploymentController" -
更新服务以使用
ECS部署控制器:aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--deployment-controller type=ECS -
服务使用
ECS部署控制器后,启用部署断路器:aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}"
有关更多信息,请参阅 Amazon ECS 部署断路器如何检测故障。
-
- 在非 ECS 控制器上使用基于警报的回滚
-
错误消息:
Alarm based rollback feature is only supported with ECS deployment controller. Update to ECS deployment controller and try again.解决方案:尝试在未使用
ECS部署控制器的服务上配置基于警报的回滚时,会发生此错误。基于警报的回滚功能仅与ECS部署控制器兼容。-
检查服务的当前部署控制器:
aws ecs describe-services --clusteryour-cluster-name--servicesyour-service-name--query "services[0].deploymentController" -
更新服务以使用
ECS部署控制器:aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--deployment-controller type=ECS -
服务使用
ECS部署控制器后,配置基于警报的回滚:aws ecs update-service --clusteryour-cluster-name--servicesyour-service-name--deployment-configuration "alarms={alarmNames=[your-alarm-name],enable=true,rollback=true}"
有关更多信息,请参阅 CloudWatch 警报如何检测 Amazon ECS 部署故障。
-
Service Connect 和部署控制器不匹配
以下问题与 Service Connect 和部署控制器不匹配有关。
- 在
EXTERNAL控制器上使用 Service Connect -
错误消息:
The EXTERNAL deployment controller type is not supported for services using Service Connect.解决方案:尝试在启用了 Service Connect 的服务上使用
EXTERNAL部署控制器时,会发生此错误。EXTERNAL控制器与 Service Connect 不兼容。-
检查服务是否启用了 Service Connect:
aws ecs describe-services --clusteryour-cluster-name--services your-service-name --query "services[0].serviceConnectConfiguration" -
如果需要使用
EXTERNAL部署控制器,请通过更新服务来禁用 Service Connect:aws ecs update-service --cluster your-cluster-name --service your-service-name --service-connect-configuration "{}" -
或者,如果必须使用 Service Connect,请改用
ECS部署控制器:aws ecs update-service --cluster your-cluster-name --service your-service-name --deployment-controller type=ECS
有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略。
-
- 在非 ECS 控制器上使用 Service Connect
-
错误消息:
Service Connect feature is only supported with ECS (rolling update) deployment controller. Update to ECS deployment controller and try again.解决方案:尝试在未使用
ECS部署控制器的服务上启用 Service Connect 时,会发生此错误。Service Connect 功能仅与ECS部署控制器兼容。-
检查服务的当前部署控制器:
aws ecs describe-services --clusteryour-cluster-name--servicesyour-service-name--query "services[0].deploymentController" -
更新服务以使用 ECS 部署控制器:
aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--deployment-controller type=ECS -
服务使用 ECS 部署控制器后,启用 Service Connect:
aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--service-connect-configuration "enabled=true,namespace=your-namespace"
有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略。
-
控制器类型和计划策略不匹配
以下问题与控制器类型和计划策略不匹配有关。
- 将
CODE_DEPLOY控制器与DAEMON计划策略结合使用 -
错误消息:
The CODE_DEPLOY deployment controller type is not supported for services using the DAEMON scheduling strategy.解决方案:尝试将 CODE_DEPLOY 部署控制器与使用
DAEMON计划策略的服务结合使用时,会发生此错误。CODE_DEPLOY控制器仅与REPLICA计划策略兼容。-
检查服务的当前计划策略:
aws ecs describe-services --clusteryour-cluster-name--servicesyour-service-name--query "services[0].schedulingStrategy" -
如果需要蓝绿部署,请将服务更改为使用
REPLICA计划策略:aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--scheduling-strategy REPLICA -
或者,如果必须使用
DAEMON计划策略,请改用ECS部署控制器:aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--deployment-controller type=ECS
有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略。
-
- 将 EXTERNAL 与 DAEMON 计划策略结合使用
-
错误消息:
The EXTERNAL deployment controller type is not supported for services using the DAEMON scheduling strategy.解决方案:尝试将 EXTERNAL 部署控制器与使用 DAEMON 计划策略的 ECS 服务结合使用时,会发生此错误。EXTERNAL 控制器仅与 REPLICA 计划策略兼容。
-
检查服务的当前计划策略:
aws ecs describe-services --clusteryour-cluster-name--servicesyour-service-name--query "services[0].schedulingStrategy" -
如果需要使用
EXTERNAL部署控制器,请将服务更改为使用REPLICA调度策略:aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--scheduling-strategy REPLICA -
或者,如果必须使用
DAEMON计划策略,请改用ECS部署控制器:aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--deployment-controller type=ECS
有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略。
-
- 具有外部启动类型的服务注册表
-
错误消息:
Service registries are not supported for external launch type.解决方案:尝试为使用
EXTERNAL启动类型的服务配置服务发现(服务注册表)时,会发生此错误。服务发现与EXTERNAL启动类型不兼容。-
检查服务的当前启动类型:
aws ecs describe-services --clusteryour-cluster-name--servicesyour-service-name--query "services[0].launchType" -
如果需要使用服务发现,请将服务更改为使用
EC2或FARGATE启动类型:aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--launch-type FARGATE -
或者,如果必须使用
EXTERNAL启动类型,请删除服务注册表配置:aws ecs update-service --clusteryour-cluster-name--serviceyour-service-name--service-registries "[]"
有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略。
-
恢复部署控制器更新
如果决定要恢复到之前的部署控制器,可以执行以下操作之一:
-
如果使用的是 Amazon CloudFormation,可以使用之前的模板创建新堆栈。有关更多信息,请参阅《Amazon CloudFormation 用户指南》中的通过 CloudFormation 控制台创建堆栈。
-
如果使用的是 Amazon ECS 控制台或 Amazon CLI,可以更新服务。有关更多信息,请参阅 更新 Amazon ECS 服务。
如果使用了 update-service 命令,请使用
--deployment-controller选项并将其设置为之前的部署控制器。