

# Amazon ECS 服务事件消息
<a name="service-event-messages-list"></a>

以下是您可能会在 Amazon ECS 控制台中看到的服务事件消息的示例：

## 服务（‭*service-name‭*‬）已达到稳定状态。
<a name="service-event-messages-steady"></a>

当服务正常运行且达到所需的任务数量，从而达到稳定状态时，服务计划程序将发送 `service (service-name) has reached a steady state.` 服务事件。

服务调度器会定期报告状态，因此您可能会多次收到此消息。

## 服务（*‬service-name‭*）无法下达任务，因为没有满足所有条件的容器实例。
<a name="service-event-messages-1"></a>

当服务计划程序找不到添加其他任务的可用资源时，其会发送此事件消息。导致出现此情况的可能原因是：

使用容量提供程序自动扩展您的 EC2 实例。有关更多信息，请参阅 [适用于 EC2 工作负载的 Amazon ECS 容量提供程序](asg-capacity-providers.md)。  
如果打算使用容量提供程序，请确保您传递一个容量提供程序策略，或者具有与集群关联的默认容量提供程序策略，并且没有将启动类型和容量提供程序策略作为输入传递

未在您的集群中找到任何容器实例  
如果未向您尝试在其中运行任务的集群注册任何容器实例，您会收到此错误。您应向集群添加容器实例。有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

端口不足  
如果您的任务使用固定主机端口映射（例如，您的任务对 Web 服务器使用主机上的端口 80），则每个任务必须至少有一个容器实例，因为一次仅一个容器可以使用一个主机端口。您应向集群添加容器实例，或减少所需的任务数。

注册的端口过多  
用于任务放置的最密切匹配的容器实例不能超过允许的最大保留端口限制，即每个容器实例 100 个主机端口。使用动态主机端口映射可能会修复此问题。

端口已在使用  
此任务的任务定义在其端口映射中使用与已在所选容器实例上运行的任务相同的端口。服务事件消息将包含选定的容器实例 ID 作为下面消息的一部分。  

```
The closest matching container-instance is already using a port required by your task.
```

内存不足  
如果您的任务定义指定 1000 MiB 的内存，并且集群中的每个容器实例均具有 1024 MiB 的内存，则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的内存，以便为每个容器实例启动多个任务，或者在集群中启动更多容器实例。  
如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源，请参阅[预留 Amazon ECS Linux 容器实例内存](memory-management.md)。

CPU 不足  
一个容器实例中，每个 CPU 核心有 1024 个 CPU 单元。如果您的任务定义指定 1,000 个 CPU 单元，并且集群中的每个容器实例均具有 1024 个 CPU 单元，则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的 CPU 单元，以便为每个容器实例启动多个任务，或者在集群中启动更多容器实例。

没有足够的可用 ENI 附加点  
每个使用 `awsvpc` 网络模式的任务都会收到自己的弹性网络接口（ENI），且会附加到托管任务的容器实例。Amazon EC2 实例对可以附加到它们的 ENI 数量有限制，并且集群中没有带可用 ENI 容量的容器实例。  
单个容器实例的 ENI 限制取决于以下条件：  
+ 如果您**尚未**选择使用 `awsvpcTrunking` 账户设置，则每个容器实例的 ENI 限制取决于实例类型。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[每个实例类型的每个网络接口的 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。
+ 如果您**已**选择使用 `awsvpcTrunking` 账户设置，但您在选择使用后**未**启动使用支持的实例类型的新容器实例，则每个容器实例的 ENI 限制仍为默认值。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[每个实例类型的每个网络接口的 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。
+ 如果您**已**选择使用 `awsvpcTrunking` 账户设置，并且您在选择使用后**已**启动使用支持的实例类型的新容器实例，则其他 ENI 将可用。有关更多信息，请参阅 [增加的 Amazon ECS 容器网络接口支持的实例](eni-trunking-supported-instance-types.md)。
有关选择使用 `awsvpcTrunking` 账户设置的更多信息，请参阅 [增加 Amazon ECS Linux 容器实例网络接口](container-instance-eni.md)。  
您可以将容器实例添加到您的集群以提供更多可用的网络适配器。

容器实例缺少必需属性  
一些任务定义参数需要在容器实例上安装特定的 Docker 远程 API 版本。其他任务定义（例如，日志记录驱动程序选项）需要容器实例使用 `ECS_AVAILABLE_LOGGING_DRIVERS` 代理配置变量注册这些日志记录驱动程序。如果您的任务定义包含一个需要特定容器实例属性的参数，并且您没有可满足此要求的任何可用容器实例，则无法放置该任务。  
造成此错误的常见原因是您的服务使用的任务使用 `awsvpc` 网络模式和 EC2。您指定的集群中没有服务创建时在 `awsvpcConfiguration` 中指定的同一子网中注册的容器实例。  
您可以使用 AWSSupport-TroubleshootECSContainerInstance 运行手册进行故障排除。此运行手册会检查实例的用户数据是否包含正确的集群信息、实例配置文件是否包含所需的权限，还会检查网络配置问题。有关更多信息，请参阅《AWS Systems Manager Automation 运行手册参考用户指南》**中的 [AWSSupport-TroubleshootECSContainerInstance](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-troubleshoot-ecs-container-instance.html)。  
有关特定任务定义参数和代理配置变量所需的属性的更多信息，请参阅[Fargate 的 Amazon ECS 任务定义参数](task_definition_parameters.md)和 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

## 服务（*‬service-name‭*‬）无法下达任务，因为没有满足所有条件的容器实例。最接近的匹配容器实例 *container-instance-id* 没有足够的 CPU 单位可用。
<a name="service-event-messages-2"></a>

用于放置任务的最接近的匹配容器实例不会容纳足够的 CPU 单元来满足任务定义中的要求。查看任务定义的任务大小和容器定义参数中的 CPU 要求。

## 服务（*service-name‭*）无法下达任务，因为没有满足所有条件的容器实例。最匹配的容器实例 ‭*‬container-instance-id‭*‬ 遇到错误“AGENT”（代理）。
<a name="service-event-messages-3"></a>

用于任务放置的最近匹配容器实例上的 Amazon ECS 容器代理已断开连接。如果您可以通过 SSH 连接到容器实例，则可以查看代理日志；有关更多信息，请参阅 [Amazon ECS 容器代理日志配置参数](ecs-agent-versions.md#agent-logs)。您还应验证代理是否正在该实例上运行。如果您使用的是经 Amazon ECS 优化的 AMI，则可以尝试通过以下命令停止并重新启动代理。
+ 对于经 Amazon ECS 优化的 Amazon Linux 2 AMI 和经 Amazon ECS 优化的 Amazon Linux 2023 AMI

  ```
  sudo systemctl restart ecs
  ```
+ 对于经 Amazon ECS 优化的 Amazon Linux AMI

  ```
  sudo stop ecs && sudo start ecs
  ```

## 服务（*service-name*）（任务 *task-id*）（实例 *instance-id*）在（elb *elb-name*）中运行不正常，原因是（原因：实例连续失败的次数至少为运行状况检查的 UnhealthyThreshold 次数。）
<a name="service-event-messages-4"></a>

此服务已注册到一个负载均衡器，并且未通过负载均衡器运行状况检查。该消息包含任务 ID，有助于确定未通过运行状况检查的具体任务。有关更多信息，请参阅 [对 Amazon ECS 中的服务负载均衡器进行故障排除](troubleshoot-service-load-balancers.md)。

## 服务（‭*‬service-name‭*‬）无法成功一致地启动任务。
<a name="service-event-messages-5"></a>

此服务包含在连续多次尝试之后仍无法启动的任务。此时，服务计划程序开始逐渐增加重试间隔的时间。您应该排查任务无法启动的原因。有关更多信息，请参阅 [Amazon ECS 服务节流逻辑](service-throttle-logic.md)。

服务更新后，例如，通过更新的任务定义更新后，服务计划程序恢复正常行为。

## 服务（*service-name*）操作正在受限制。稍后将重试。
<a name="service-event-messages-6"></a>

由于 API 限制，此服务无法启动更多任务。一旦服务调度器能够启动更多任务，它将恢复。

要请求 API 速率限制配额增加，请打开 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)页面，必要时登录，然后选择**创建案例**。选择**提高服务限制**。填写并提交表格。

## 因为服务部署配置，服务（*service-name*）无法在部署期间停止或启动任务。更新 minimumHealthyPercent 或 maximumPercent 值，然后重试。
<a name="service-event-messages-7"></a>

由于部署配置，此服务无法在服务部署期间停止或启动任务。部署配置由 `minimumHealthyPercent` 和 `maximumPercent` 值组成，这些值是在创建服务时定义的。这些值也可以在现有服务上更新。

`minimumHealthyPercent` 表示在部署期间或容器实例耗尽时应为服务运行的任务数的下限。这是服务所需任务数的百分比。此值向上取整。例如，如果最小运行状况百分比为 `50`，并且所需的任务计数为 4，则调度器可以在启动两个新任务之前停止两个现有任务。同样，如果最小运行状况百分比为 75%，所需任务计数为 2，则由于结果值也为 2，调度器无法停止任何任务。

`maximumPercent` 表示在部署期间或容器实例耗尽时应为服务运行的任务数的上限。这是服务所需任务数的百分比。此值向下取整。例如，如果最大百分比为 `200` 且所需的任务计数为 4，则调度器可以在停止 4 个现有任务之前启动 4 个新任务。同样，如果最大百分比为 `125`，且目标任务计数为三，则调度器无法启动任何任务，因为结果值也是三。

设置最小运行状况百分比或最大百分比时，应确保调度器在触发部署时可以停止或启动至少一个任务。

## 服务（*service-name*）无法放置任务。原因：您已达到可同时运行的任务数量的上限
<a name="service-event-messages-8"></a>

您可以请求增加导致错误的资源的配额。有关更多信息，请参阅 [Amazon ECS 服务配额](service-quotas.md)。要请求提高配额，请参阅《服务配额用户指南》**中的[请求提高配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 服务（*service-name*）无法放置任务。原因：内部错误。
<a name="service-event-messages-9"></a>

出现此错误的可能原因如下：

由于子网位于不受支持的可用区中，该服务无法启动任务。

有关支持的 Fargate 区域和可用区的信息，请参阅 [Amazon ECS 在 AWS Fargate 上的支持区域](AWS_Fargate-Regions.md)。

有关如何查看子网可用区的信息，请参阅 *Amazon VPC 用户指南*中的[查看您的子网](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#view-subnet)。

## 服务（*service-name*）无法放置任务。原因：请求的 CPU 配置超出您的限制。
<a name="service-event-messages-10"></a>

您可以请求增加导致错误的资源的配额。有关更多信息，请参阅 [Amazon ECS 服务配额](service-quotas.md)。要请求提高配额，请参阅《服务配额用户指南》**中的[请求提高配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 服务（*service-name*）无法放置任务。原因：请求的内存配置超出您的限制。
<a name="service-event-messages-11"></a>

您可以请求增加导致错误的资源的配额。有关更多信息，请参阅 [Amazon ECS 服务配额](service-quotas.md)。要请求提高配额，请参阅《服务配额用户指南》**中的[请求提高配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 服务（*service-name*）无法放置任务。原因：您已达到可同时运行的 vCPU 数量的上限
<a name="service-event-messages-12"></a>

AWS Fargate 正在从基于任务计数的配额过渡到基于 vCPU 的配额。

您可以请求对 Fargate 基于 vCPU 的配额增加配额。有关更多信息，请参阅 [Amazon ECS 服务配额](service-quotas.md)。要请求提高 Fargate 配额，请参阅《服务配额用户指南》**中的[请求增加配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 服务（*service-name*）无法达到稳定状态，因为任务集（*taskSet-ID*）无法横向缩减。原因：受保护任务的数量超过了所需的任务数量
<a name="service-event-messages-13"></a>

服务的受保护任务数超过了所需的任务数。您可以执行以下操作之一：
+ 等到当前任务的保护到期，使它们能够被终止。
+ 确定哪些任务可以停止，然后使用 `UpdateTaskProtection` API 和 `protectionEnabled` 选项将 `false` 设置为取消对这些任务的保护。
+ 增加服务的所需任务计数，以大于受保护任务的数量。

## 服务（*service-name*）无法达到稳定状态。原因：在您的容量提供程序中未找到容器实例。
<a name="service-event-messages-14"></a>

当服务计划程序找不到添加其他任务的可用资源时，其会发送此事件消息。导致出现此情况的可能原因是：

没有与集群关联的容量提供程序  
使用 `describe-services` 验证您是否有与集群关联的容量提供程序。您可以更新服务的容量提供程序策略。  
验证容量提供程序中是否有可用容量。如果是 EC2，请确保容器实例满足任务定义要求。

未在您的集群中找到任何容器实例  
如果未向您尝试在其中运行任务的集群注册任何容器实例，您会收到此错误。您应向集群添加容器实例。有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

端口不足  
如果您的任务使用固定主机端口映射（例如，您的任务对 Web 服务器使用主机上的端口 80），则每个任务必须至少有一个容器实例。一次只有一个容器可以使用一个主机端口。您应向集群添加容器实例，或减少所需的任务数。

注册的端口过多  
用于任务放置的最密切匹配的容器实例不能超过允许的最大保留端口限制，即每个容器实例 100 个主机端口。使用动态主机端口映射可能会修复此问题。

端口已在使用  
此任务的任务定义在其端口映射中使用与已在所选容器实例上运行的任务相同的端口。服务事件消息将包含选定的容器实例 ID 作为下面消息的一部分。  

```
The closest matching container-instance is already using a port required by your task.
```

内存不足  
如果您的任务定义指定 1000 MiB 的内存，并且集群中的每个容器实例均具有 1024 MiB 的内存，则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的内存，以便为每个容器实例启动多个任务，或者在集群中启动更多容器实例。  
如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源，请参阅[预留 Amazon ECS Linux 容器实例内存](memory-management.md)。

没有足够的可用 ENI 附加点  
每个使用 `awsvpc` 网络模式的任务都会收到自己的弹性网络接口（ENI），且会附加到托管任务的容器实例。Amazon EC2 实例对可以附加到它们的 ENI 数量有限制，并且集群中没有带可用 ENI 容量的容器实例。  
单个容器实例的 ENI 限制取决于以下条件：  
+ 如果您**尚未**选择使用 `awsvpcTrunking` 账户设置，则每个容器实例的 ENI 限制取决于实例类型。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[每个实例类型的每个网络接口的 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。
+ 如果您**已**选择使用 `awsvpcTrunking` 账户设置，但您在选择使用后**未**启动使用支持的实例类型的新容器实例，则每个容器实例的 ENI 限制仍为默认值。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[每个实例类型的每个网络接口的 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。
+ 如果您**已**选择使用 `awsvpcTrunking` 账户设置，并且您在选择使用后**已**启动使用支持的实例类型的新容器实例，则其他 ENI 将可用。有关更多信息，请参阅 [增加的 Amazon ECS 容器网络接口支持的实例](eni-trunking-supported-instance-types.md)。
有关选择使用 `awsvpcTrunking` 账户设置的更多信息，请参阅 [增加 Amazon ECS Linux 容器实例网络接口](container-instance-eni.md)。  
您可以将容器实例添加到您的集群以提供更多可用的网络适配器。

容器实例缺少必需属性  
一些任务定义参数需要在容器实例上安装特定的 Docker 远程 API 版本。其他任务定义（例如，日志记录驱动程序选项）需要容器实例使用 `ECS_AVAILABLE_LOGGING_DRIVERS` 代理配置变量注册这些日志记录驱动程序。如果您的任务定义包含一个需要特定容器实例属性的参数，并且您没有可满足此要求的任何可用容器实例，则无法放置该任务。  
此错误的一个常见原因是，如果您的服务使用的任务使用 `awsvpc` 网络模式和 EC2，并且您指定的集群在创建服务时 `awsvpcConfiguration` 中指定的同一子网中没有注册容器实例。  
您可以使用 AWSSupport-TroubleshootECSContainerInstance 运行手册进行故障排除。此运行手册会检查实例的用户数据是否包含正确的集群信息、实例配置文件是否包含所需的权限，还会检查网络配置问题。有关更多信息，请参阅《AWS Systems Manager Automation 运行手册参考用户指南》**中的 [AWSSupport-TroubleshootECSContainerInstance](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-troubleshoot-ecs-container-instance.html)。  
有关特定任务定义参数和代理配置变量所需的属性的更多信息，请参阅[Fargate 的 Amazon ECS 任务定义参数](task_definition_parameters.md)和 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

## 服务（*service-name*）无法放置任务。原因：目前容量不可用。请稍后重试或在其他可用区中重试。
<a name="service-event-messages-15"></a>

目前没有可用容量来运行您的服务。

您可以执行以下操作之一：
+ 等待 Fargate 容量或 EC2 容器实例变为可用。
+ 重新启动服务并指定其他子网。

## 服务（*service-name*）部署失败：任务无法启动。
<a name="service-event-messages-16"></a>

您的服务中的任务无法启动。

有关如何调试已停止任务的信息，请参阅[Amazon ECS 已停止任务错误消息](stopped-task-error-codes.md)。

## 服务（*service-name*）等待 Amazon ECS 代理启动时超时。请查看 /var/log/ecs/ecs-agent.log 中的日志。
<a name="service-event-messages-17"></a>

用于任务放置的最近匹配容器实例上的 Amazon ECS 容器代理已断开连接。如果您可以通过 SSH 连接到容器实例，则可以查看代理日志。有关更多信息，请参阅 [Amazon ECS 容器代理日志配置参数](ecs-agent-versions.md#agent-logs)。您还应验证代理是否正在该实例上运行。如果您使用的是经 Amazon ECS 优化的 AMI，则可以尝试通过以下命令停止并重新启动代理。
+ 对于经 Amazon ECS 优化的 Amazon Linux 2 AMI

  ```
  sudo systemctl restart ecs
  ```
+ 对于经 Amazon ECS 优化的 Amazon Linux AMI

  ```
  sudo stop ecs && sudo start ecs
  ```

## 服务（*service-name*）任务集（*taskSet-ID*）（任务 *task-id*）在目标组（*targetGroup-ARN*）中运行不正常，原因是 `TARGET GROUP IS NOT FOUND`。
<a name="service-event-messages-18"></a>

由于未找到目标组，该服务的任务集无法通过运行状况检查。该消息包含任务 ID，有助于确定未通过运行状况检查的具体任务。您应删除，然后重新创建该服务。除非相应的 Amazon ECS 服务已删除，否则不要删除任何 Elastic Load Balancing 目标组。

## 服务 (*service-name*) 任务集 (*taskSet-ID*)（任务 *task-id*）在目标组 (*targetGroup-ARN)*) 中运行不正常，原因是 `TARGET IS NOT FOUND`。
<a name="service-event-messages-19"></a>

由于未找到目标，该服务的任务集无法通过运行状况检查。该消息包含任务 ID，有助于确定未通过运行状况检查的具体任务。

## IAM 权限策略配置错误或已更改，ECS 无法再维护您的服务
<a name="service-event-messages-20"></a>

由于 IAM 权限策略配置错误或进行了更改，该服务无法维护任务。与您的 ECS 服务或任务关联的 IAM 角色可能缺少所需的权限。

要解决此问题，请将必要的权限添加到 IAM 角色。有关管理 IAM 权限策略的更多信息，请参阅《IAM 用户指南》**中的[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

## IAM 信任关系配置错误或已更改，ECS 无法再维护您的服务
<a name="service-event-messages-21"></a>

由于 IAM 信任关系配置错误或更改，该服务无法维护任务。与您的 ECS 服务或任务关联的 IAM 角色具有的信任策略可能不正确。

要解决此问题，请为任务定义中使用的角色配置信任策略。有关为自定义角色创建信任策略的更多信息，请参阅《IAM 用户指南》**中的[为自定义使用案例创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

## 服务（*service-name*）无法为部署 *deployment-id* 启动 *number* 个任务。
<a name="service-event-messages-22"></a>

当部署工作流成功启动某些任务，但由于容量不足错误而无法启动所有请求的任务时，服务计划程序会发送此事件消息。这通常发生在启用断路器时，并提供有关部署可能失败或回滚的原因。

该消息包含具体的失败原因，例如 CPU、内存不足或其他资源约束。这有助于您了解需要解决哪些资源问题才能解决部署问题。

有关更多信息，请参阅 [服务（*‬service-name‭*）无法下达任务，因为没有满足所有条件的容器实例。](#service-event-messages-1)。

## 由于已超过任务预置容量限制，服务（*service-name*）无法在您的集群中放置任务。
<a name="service-event-messages-23"></a>

当您的集群中同时处于 `PROVISIONING` 状态的任务数量达到 500 个这一限制时，服务计划程序会发送此事件消息。这是集群级别的限制，而不是特定于某个服务的问题。

当您启动一个所需任务数量较高且预置容量有限的服务时，或者同时启动多个服务而导致任务流失率较高时，通常会发生这种情况。

要解决此问题，请执行以下操作：
+ 等待现有任务完成预置并进入 `RUNNING` 状态。
+ 考虑逐渐扩展服务，以避免达到预置限制。
+ 检查集群的容量提供程序配置，确保有足够的资源可用。

有关 Amazon ECS 服务配额的更多信息，请参阅《Amazon Web Services 一般参考》**中的 [Amazon Elastic Container Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html)。