Amazon ECS 服务事件消息
以下是您可能会在 Amazon ECS 控制台中看到的服务事件消息的示例:
服务(service-name
)已达到稳定状态。
当服务正常运行且达到所需的任务数量,从而达到稳定状态时,服务计划程序将发送 service (
服务事件。service-name
) has
reached a steady state.
服务调度器会定期报告状态,因此您可能会多次收到此消息。
服务(service-name
)无法下达任务,因为没有满足所有条件的容器实例。
当服务计划程序找不到添加其他任务的可用资源时,其会发送此事件消息。导致出现此情况的可能原因是:
- 使用容量提供程序自动扩展您的 EC2 实例。有关更多信息,请参阅 EC2 启动类型的 Amazon ECS 容量提供程序 。
如果打算使用容量提供程序,请确保您传递一个容量提供程序策略,或者具有与集群关联的默认容量提供程序策略,并且没有将启动类型和容量提供程序策略作为输入传递
- 未在您的集群中找到任何容器实例
-
如果未向您尝试在其中运行任务的集群注册任何容器实例,您会收到此错误。您应向集群添加容器实例。有关更多信息,请参阅 启动 Amazon ECS Linux 容器实例。
- 端口不足
-
如果您的任务使用固定主机端口映射(例如,您的任务对 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 容器实例内存。
- CPU 不足
-
一个容器实例中,每个 CPU 核心有 1,024 个 CPU 单元。如果您的任务定义指定 1,000 个 CPU 单元,并且集群中的每个容器实例均具有 1,024 个 CPU 单元,则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的 CPU 单元,以便为每个容器实例启动多个任务,或者在集群中启动更多容器实例。
- 没有足够的可用 ENI 附加点
-
每个使用
awsvpc
网络模式的任务都会收到自己的弹性网络接口 (ENI),且会附加到托管任务的容器实例。Amazon EC2 实例对可以附加到它们的 ENI 数量有限制,并且集群中没有带可用 ENI 容量的容器实例。单个容器实例的 ENI 限制取决于以下条件:
-
如果您尚未选择使用
awsvpcTrunking
账户设置,则每个容器实例的 ENI 限制取决于实例类型。有关更多信息,请参阅 Amazon EC2 用户指南中的每个实例类型的每个网络接口的 IP 地址。 -
如果您已选择使用
awsvpcTrunking
账户设置,但您在选择使用后未启动使用支持的实例类型的新容器实例,则每个容器实例的 ENI 限制仍为默认值。有关更多信息,请参阅 Amazon EC2 用户指南中的每个实例类型的每个网络接口的 IP 地址。 -
如果您已选择使用
awsvpcTrunking
账户设置,并且您在选择使用后已启动使用支持的实例类型的新容器实例,则其他 ENI 将可用。有关更多信息,请参阅 增加的 Amazon ECS 容器网络接口支持的实例。
有关选择使用
awsvpcTrunking
账户设置的更多信息,请参阅 增加 Amazon ECS Linux 容器实例网络接口。您可以将容器实例添加到您的集群以提供更多可用的网络适配器。
-
- 容器实例缺少必需属性
-
一些任务定义参数需要在容器实例上安装特定的 Docker 远程 API 版本。其他任务定义(例如,日志记录驱动程序选项)需要容器实例使用
ECS_AVAILABLE_LOGGING_DRIVERS
代理配置变量注册这些日志记录驱动程序。如果您的任务定义包含一个需要特定容器实例属性的参数,并且您没有可满足此要求的任何可用容器实例,则无法放置该任务。造成此错误的常见原因是您的服务使用的任务使用
awsvpc
网络模式和 EC2 启动类型。您指定的集群中没有服务创建时在awsvpcConfiguration
中指定的同一子网中注册的容器实例。您可以使用 AWSSupport-TroubleshootECSContainerInstance 运行手册进行故障排除。此运行手册会检查实例的用户数据是否包含正确的集群信息、实例配置文件是否包含所需的权限,还会检查网络配置问题。有关更多信息,请参阅《AWS Systems Manager Automation runbook reference User Guide》中的 AWSSupport-TroubleshootECSContainerInstance。
有关特定任务定义参数和代理配置变量所需的属性的更多信息,请参阅Fargate 启动类型的 Amazon ECS 任务定义参数和 Amazon ECS 容器代理配置。
服务(service-name
)无法下达任务,因为没有满足所有条件的容器实例。最接近的匹配容器实例 container-instance-id
没有足够的 CPU 单位可用。
用于放置任务的最接近的匹配容器实例不会容纳足够的 CPU 单元来满足任务定义中的要求。查看任务定义的任务大小和容器定义参数中的 CPU 要求。
服务(service-name
)无法下达任务,因为没有满足所有条件的容器实例。最匹配的容器实例 container-instance-id
遇到错误“AGENT”(代理)。
用于任务放置的最近匹配容器实例上的 Amazon ECS 容器代理已断开连接。如果您可以通过 SSH 连接到容器实例,则可以查看代理日志;有关更多信息,请参阅 Amazon ECS 容器代理日志配置参数。您还应验证代理是否正在该实例上运行。如果您使用的是经 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 次数。)
此服务已注册到一个负载均衡器,并且未通过负载均衡器运行状况检查。该消息包含任务 ID,有助于确定未通过运行状况检查的具体任务。有关更多信息,请参阅 对 Amazon ECS 中的服务负载均衡器进行故障排除。
服务(service-name
)无法成功一致地启动任务。
此服务包含在连续多次尝试之后仍无法启动的任务。此时,服务计划程序开始逐渐增加重试间隔的时间。您应该排查任务无法启动的原因。有关更多信息,请参阅 Amazon ECS 服务节流逻辑。
服务更新后,例如,通过更新的任务定义更新后,服务计划程序恢复正常行为。
服务 (service-name
) 操作正在受限制。稍后将重试。
由于 API 限制,此服务无法启动更多任务。一旦服务调度器能够启动更多任务,它将恢复。
要请求 API 速率限制配额增加,请打开 AWS 支持 中心
因为服务部署配置,服务 (service-name
) 无法在部署期间停止或启动任务。更新 minimumHealthyPercent 或 maximumPercent 值,然后重试。
由于部署配置,此服务无法在服务部署期间停止或启动任务。部署配置由 minimumHealthyPercent
和 maximumPercent
值组成,这些值是在创建服务时定义的。这些值也可以在现有服务上更新。
minimumHealthyPercent
表示在部署期间或容器实例耗尽时应为服务运行的任务数的下限。这是服务所需任务数的百分比。此值向上取整。例如,如果最小运行状况百分比为 50
,并且所需的任务计数为 4,则调度器可以在启动两个新任务之前停止两个现有任务。同样,如果最小运行状况百分比为 75%,所需任务计数为 2,则由于结果值也为 2,调度器无法停止任何任务。
maximumPercent
表示在部署期间或容器实例耗尽时应为服务运行的任务数的上限。这是服务所需任务数的百分比。此值向下取整。例如,如果最大百分比为 200
且所需的任务计数为 4,则调度器可以在停止 4 个现有任务之前启动 4 个新任务。同样,如果最大百分比为 125
,且目标任务计数为三,则调度器无法启动任何任务,因为结果值也是三。
设置最小运行状况百分比或最大百分比时,应确保调度器在触发部署时可以停止或启动至少一个任务。
服务 (service-name
) 无法放置任务。原因:您已达到可同时运行的任务数量的上限
您可以请求增加导致错误的资源的配额。有关更多信息,请参阅 Amazon ECS 服务配额。要请求提高配额,请参阅《服务配额用户指南》中的请求提高配额。
服务 (service-name
) 无法放置任务。原因:内部错误。
出现此错误的可能原因如下:
由于子网位于不受支持的可用区中,该服务无法启动任务。
有关支持的 Fargate 区域和可用区的信息,请参阅 Amazon ECS 在 AWS Fargate 上的支持区域。
有关如何查看子网可用区的信息,请参阅 Amazon VPC 用户指南中的查看您的子网。
服务 (service-name
) 无法放置任务。原因:请求的 CPU 配置超出您的限制。
您可以请求增加导致错误的资源的配额。有关更多信息,请参阅 Amazon ECS 服务配额。要请求提高配额,请参阅《服务配额用户指南》中的请求提高配额。
服务 (service-name
) 无法放置任务。原因:请求的内存配置超出您的限制。
您可以请求增加导致错误的资源的配额。有关更多信息,请参阅 Amazon ECS 服务配额。要请求提高配额,请参阅《服务配额用户指南》中的请求提高配额。
服务 (service-name
) 无法放置任务。原因:您已达到可同时运行的 vCPU 数量的上限
AWS Fargate 正在从基于任务计数的限额过渡到基于 vCPU 的限额。
您可以请求对基于 Fargate vCPU 的限额增加限额。有关更多信息,请参阅 Amazon ECS 服务配额。要请求提高 Fargate 限额,请参阅《Service Quotas 用户指南》中的请求增加限额。
服务(service-name
)无法达到稳定状态,因为任务集(taskSet-ID
)无法横向缩减。原因:受保护任务的数量超过了所需的任务数量
服务的受保护任务数超过了所需的任务数。您可以执行以下操作之一:
-
等到当前任务的保护到期,使它们能够被终止。
-
确定哪些任务可以停止,然后使用
UpdateTaskProtection
API 和protectionEnabled
选项将false
设置为取消对这些任务的保护。 -
增加服务的所需任务计数,以大于受保护任务的数量。
服务(service-name
)无法达到稳定状态。原因:在您的容量提供程序中未找到容器实例。
当服务计划程序找不到添加其他任务的可用资源时,其会发送此事件消息。导致出现此情况的可能原因是:
- 没有与集群关联的容量提供程序
-
使用
describe-services
验证您是否有与集群关联的容量提供程序。您可以更新服务的容量提供程序策略。验证容量提供程序中是否有可用容量。如果是 EC2 启动类型,则请确保容器实例满足任务定义要求。
- 未在您的集群中找到任何容器实例
-
如果未向您尝试在其中运行任务的集群注册任何容器实例,您会收到此错误。您应向集群添加容器实例。有关更多信息,请参阅 启动 Amazon ECS Linux 容器实例。
- 端口不足
-
如果您的任务使用固定主机端口映射(例如,您的任务对 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 容器实例内存。
- 没有足够的可用 ENI 附加点
-
每个使用
awsvpc
网络模式的任务都会收到自己的弹性网络接口 (ENI),且会附加到托管任务的容器实例。Amazon EC2 实例对可以附加到它们的 ENI 数量有限制,并且集群中没有带可用 ENI 容量的容器实例。单个容器实例的 ENI 限制取决于以下条件:
-
如果您尚未选择使用
awsvpcTrunking
账户设置,则每个容器实例的 ENI 限制取决于实例类型。有关更多信息,请参阅 Amazon EC2 用户指南中的每个实例类型的每个网络接口的 IP 地址。 -
如果您已选择使用
awsvpcTrunking
账户设置,但您在选择使用后未启动使用支持的实例类型的新容器实例,则每个容器实例的 ENI 限制仍为默认值。有关更多信息,请参阅 Amazon EC2 用户指南中的每个实例类型的每个网络接口的 IP 地址。 -
如果您已选择使用
awsvpcTrunking
账户设置,并且您在选择使用后已启动使用支持的实例类型的新容器实例,则其他 ENI 将可用。有关更多信息,请参阅 增加的 Amazon ECS 容器网络接口支持的实例。
有关选择使用
awsvpcTrunking
账户设置的更多信息,请参阅 增加 Amazon ECS Linux 容器实例网络接口。您可以将容器实例添加到您的集群以提供更多可用的网络适配器。
-
- 容器实例缺少必需属性
-
一些任务定义参数需要在容器实例上安装特定的 Docker 远程 API 版本。其他任务定义(例如,日志记录驱动程序选项)需要容器实例使用
ECS_AVAILABLE_LOGGING_DRIVERS
代理配置变量注册这些日志记录驱动程序。如果您的任务定义包含一个需要特定容器实例属性的参数,并且您没有可满足此要求的任何可用容器实例,则无法放置该任务。造成此错误的常见原因是,您的服务正在使用的任务使用的是
awsvpc
网络模式和 EC2 启动类型,并且您指定的集群中没有在服务创建时在awsvpcConfiguration
中指定的同一子网中注册的容器实例。您可以使用 AWSSupport-TroubleshootECSContainerInstance 运行手册进行故障排除。此运行手册会检查实例的用户数据是否包含正确的集群信息、实例配置文件是否包含所需的权限,还会检查网络配置问题。有关更多信息,请参阅《AWS Systems Manager Automation runbook reference User Guide》中的 AWSSupport-TroubleshootECSContainerInstance。
有关特定任务定义参数和代理配置变量所需的属性的更多信息,请参阅Fargate 启动类型的 Amazon ECS 任务定义参数和 Amazon ECS 容器代理配置。
服务 (service-name
) 无法放置任务。原因:目前容量不可用。请稍后重试或在其他可用区中重试。
目前没有可用容量来运行您的服务。
您可以执行以下操作之一:
-
等待 Fargate 容量或 EC2 容器实例变为可用。
-
重新启动服务并指定其他子网。
服务(service-name
)部署失败:任务无法启动。
您的服务中的任务无法启动。
有关如何调试已停止任务的信息,请参阅Amazon ECS 已停止任务错误消息。
服务(service-name
)等待 Amazon ECS 代理启动时超时。请查看 /var/log/ecs/ecs-agent.log 中的日志。
用于任务放置的最近匹配容器实例上的 Amazon ECS 容器代理已断开连接。如果您可以通过 SSH 连接到容器实例,则可以查看代理日志。有关更多信息,请参阅 Amazon ECS 容器代理日志配置参数。您还应验证代理是否正在该实例上运行。如果您使用的是经 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
。
由于未找到目标组,该服务的任务集无法通过运行状况检查。该消息包含任务 ID,有助于确定未通过运行状况检查的具体任务。您应删除,然后重新创建该服务。除非相应的 Amazon ECS 服务已删除,否则不要删除任何 Elastic Load Balancing 目标组。
服务 (service-name
) 任务集 (taskSet-ID
)(任务 task-id
)在目标组 (targetGroup-ARN)
) 中运行不正常,原因是 TARGET IS NOT FOUND
。
由于未找到目标,该服务的任务集无法通过运行状况检查。该消息包含任务 ID,有助于确定未通过运行状况检查的具体任务。
IAM 权限策略配置错误或已更改,ECS 无法再维护您的服务
由于 IAM 权限策略配置错误或进行了更改,该服务无法维护任务。与您的 ECS 服务或任务关联的 IAM 角色可能缺少所需的权限。
要解决此问题,请将必要的权限添加到 IAM 角色。有关管理 IAM 权限策略的更多信息,请参阅《IAM 用户指南》中的添加和删除 IAM 身份权限。
IAM 信任关系配置错误或已更改,ECS 无法再维护您的服务
由于 IAM 信任关系配置错误或更改,该服务无法维护任务。与您的 ECS 服务或任务关联的 IAM 角色具有的信任策略可能不正确。
要解决此问题,请为任务定义中使用的角色配置信任策略。有关为自定义角色创建信任策略的更多信息,请参阅《IAM 用户指南》中的为自定义使用案例创建角色。