对 Amazon ECS 部署策略更新进行问题排查 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

对 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_DEPLOYEXTERNAL 部署控制器中出现的此问题,请执行以下操作:

  1. 检查当前任务集:

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].taskSets"
  2. 等待任何正在进行的部署完成。

  3. 强制实施新部署以清理任务集:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --force-new-deployment
  4. 如有必要,请手动删除额外的任务集:

    aws ecs delete-task-set --cluster your-cluster-name --service your-service-name --task-set task-set-id
  5. 当只剩下一个任务集后,重新尝试更新部署控制器。

有关更多信息,请参阅 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.

解决方案:尝试更改没有主任务集的服务部署控制器类型时,会发生此错误。要解决此问题,请执行以下操作:

  1. 验证服务状态和任务集。如果服务中存在任务集,则应将其标记为 ACTIVE

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].taskSets[*].[status,id]

    如果服务中没有处于 ACTIVE 状态的任务集,请迁移部署。有关更多信息,请参阅迁移方法

  2. 如果服务没有正在运行的任务,请通过更新服务来部署至少一个任务:

    aws ecs update-service-primary-task-set --cluster your-cluster-name --service your-service-name --primary-task-set your-taskset-id

    这会将服务中的(先前为 ACTIVE)任务集标记为 PRIMARY 状态。

  3. 等待任务达到稳定的运行状态。可以通过以下方式查看状态:

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].deployments"
  4. 当服务拥有主任务集且任务正在运行后,重新尝试更新部署控制器。

有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略

部署失败检测类型和部署控制器不匹配

以下问题与部署失败检测类型和部署控制器不匹配有关。

使在非 ECS 控制器上使用部署断路器

错误消息Deployment circuit breaker feature is only supported with ECS deployment controller. Update to ECS deployment controller and try again.

解决方案:尝试在未使用 ECS 部署控制器的服务上启用部署断路器功能时,会发生此错误。部署断路器仅与 ECS 部署控制器兼容。

  1. 检查服务的当前部署控制器:

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].deploymentController"
  2. 更新服务以使用 ECS 部署控制器:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --deployment-controller type=ECS
  3. 服务使用 ECS 部署控制器后,启用部署断路器:

    aws ecs update-service --cluster your-cluster-name --service your-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 部署控制器兼容。

  1. 检查服务的当前部署控制器:

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].deploymentController"
  2. 更新服务以使用 ECS 部署控制器:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --deployment-controller type=ECS
  3. 服务使用 ECS 部署控制器后,配置基于警报的回滚:

    aws ecs update-service --cluster your-cluster-name --services your-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 不兼容。

  1. 检查服务是否启用了 Service Connect:

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].serviceConnectConfiguration"
  2. 如果需要使用 EXTERNAL 部署控制器,请通过更新服务来禁用 Service Connect:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --service-connect-configuration "{}"
  3. 或者,如果必须使用 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 部署控制器兼容。

  1. 检查服务的当前部署控制器:

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].deploymentController"
  2. 更新服务以使用 ECS 部署控制器:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --deployment-controller type=ECS
  3. 服务使用 ECS 部署控制器后,启用 Service Connect:

    aws ecs update-service --cluster your-cluster-name --service your-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 计划策略兼容。

  1. 检查服务的当前计划策略:

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].schedulingStrategy"
  2. 如果需要蓝绿部署,请将服务更改为使用 REPLICA 计划策略:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --scheduling-strategy REPLICA
  3. 或者,如果必须使用 DAEMON 计划策略,请改用 ECS 部署控制器:

    aws ecs update-service --cluster your-cluster-name --service your-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 计划策略兼容。

  1. 检查服务的当前计划策略:

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].schedulingStrategy"
  2. 如果需要使用 EXTERNAL 部署控制器,请将服务更改为使用 REPLICA 调度策略:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --scheduling-strategy REPLICA
  3. 或者,如果必须使用 DAEMON 计划策略,请改用 ECS 部署控制器:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --deployment-controller type=ECS

有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略

具有外部启动类型的服务注册表

错误消息Service registries are not supported for external launch type.

解决方案:尝试为使用 EXTERNAL 启动类型的服务配置服务发现(服务注册表)时,会发生此错误。服务发现与 EXTERNAL 启动类型不兼容。

  1. 检查服务的当前启动类型:

    aws ecs describe-services --cluster your-cluster-name --services your-service-name --query "services[0].launchType"
  2. 如果需要使用服务发现,请将服务更改为使用 EC2FARGATE 启动类型:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --launch-type FARGATE
  3. 或者,如果必须使用 EXTERNAL 启动类型,请删除服务注册表配置:

    aws ecs update-service --cluster your-cluster-name --service your-service-name --service-registries "[]"

有关更多信息,请参阅 Amazon ECS 服务部署控制器和策略

恢复部署控制器更新

如果决定要恢复到之前的部署控制器,可以执行以下操作之一:

  • 如果使用的是 Amazon CloudFormation,可以使用之前的模板创建新堆栈。有关更多信息,请参阅《Amazon CloudFormation 用户指南》中的通过 CloudFormation 控制台创建堆栈

  • 如果使用的是 Amazon ECS 控制台或 Amazon CLI,可以更新服务。有关更多信息,请参阅 更新 Amazon ECS 服务

    如果使用了 update-service 命令,请使用 --deployment-controller 选项并将其设置为之前的部署控制器。