服务事件消息 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

服务事件消息

如果您正在解决与服务相关的问题,首先应查看服务事件日志中的诊断信息。您可以使用 DescribeServices API Amazon CLI、或使用来查看服务事件 Amazon Web Services Management Console。

使用 Amazon ECS API 查看服务事件消息时,仅返回服务调度器中的事件。这些包括最近的任务放置和实例运行状况事件。但是,Amazon ECS 控制台显示来自以下来源的服务事件。

  • 来自 Amazon ECS 服务调度器的任务放置和实例运行状况事件。这些事件的前缀为服务(服务名称)。为了确保此事件视图有帮助,我们只显示 100 最近的事件,并忽略重复的事件消息,直到问题得到解决或过去六个小时。如果问题未能在六小时内得到解决,则您会收到另一条有关该原因的服务事件消息。

  • 服务 Auto Scaling 事件。这些事件的前缀为 “消息”。10 将显示最近扩展的事件。只有在使用 Application Auto Scaling 扩展策略配置服务时,才会发生这些事件。

可以使用以下步骤查看您当前的服务事件消息。

Console
  1. https://console.aws.amazon.com/ecs/v2 打开控制台。

  2. 在导航窗格中,选择集群

  3. Clusters(集群)页面上,选择集群。

  4. 选择要检查的服务。

  5. 选择 Deployments and events(部署和事件),在 Events(事件)下查看消息。

Amazon CLI

使用 describe-services 命令查看指定服务的服务事件消息。

以下 Amazon CLI 示例描述了默认集群中的服务名称服务,该服务将提供最新的服务事件消息。

aws ecs describe-services \ --cluster default \ --services service-name \ --region us-west-2

服务事件消息

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

服务调度器会在service (service-name) has reached a steady state.服务运行状况良好、任务数达到所需数量时发送服务事件,从而达到稳定状态。

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

当服务调度器找不到可用资源来添加其他任务时,它会发送此事件消息。导致出现此情况的可能原因是:

未在您的集群中找到任何容器实例

如果您尝试在其中运行任务的集群中未注册任何容器实例,则会收到此错误。您应向集群添加容器实例。有关更多信息,请参阅 启动 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 的内存,则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的内存,以便为每个容器实例启动多个任务,或者在集群中启动更多容器实例。

注意

如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源,请参阅容器实例内存管理

CPU 不足

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

没有足够的可用 ENI 附加点

每个使用 awsvpc 网络模式的任务都会收到自己的弹性网络接口 (ENI),且会附加到托管任务的容器实例。Amazon EC2 实例对可以附加到它们的 ENI 数量有限制,并且集群中没有带可用 ENI 容量的容器实例。

单个容器实例的 ENI 限制取决于以下条件:

  • 如果您尚未选择使用 awsvpcTrunking 账户设置,则每个容器实例的 ENI 限制取决于实例类型。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的每个实例类型的每个网络接口的 IP 地址

  • 如果您选择awsvpcTrunking账户设置,但在选择加入后仍使用支持的实例类型启动新的容器实例,则每个容器实例的 ENI 限制仍为默认值。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的每个实例类型的每个网络接口的 IP 地址

  • 如果您选择使用 awsvpcTrunking 账户设置,并且您在选择使用后启动使用支持的实例类型的新容器实例,则其他 ENI 将可用。有关更多信息,请参阅 支持的 Amazon EC2 实例类型

有关选择使用 awsvpcTrunking 账户设置的更多信息,请参阅 弹性网络接口中继

您可以将容器实例添加到您的集群以提供更多可用的网络适配器。

容器实例缺少必需属性

一些任务定义参数需要在容器实例上安装特定的 Docker 远程 API 版本。其他任务定义(例如,日志记录驱动程序选项)需要容器实例使用 ECS_AVAILABLE_LOGGING_DRIVERS 代理配置变量注册这些日志记录驱动程序。如果您的任务定义包含需要特定容器实例属性的参数,并且您没有任何可用的容器实例可以满足此要求,则无法放置该任务。

此错误的常见原因是您的服务使用的是使用awsvpc网络模式和 EC2 启动类型的任务。您指定的集群在创建服务awsvpcConfiguration时指定的子网中没有向其注册容器实例。

有关特定任务定义参数和代理配置变量所需的属性的更多信息,请参阅任务定义参数Amazon ECS 容器代理配置

与任务放置最接近的匹配容器实例包含的 CPU 单元不足以满足任务定义中的要求。查看任务定义的任务大小和容器定义参数中的 CPU 要求。

用于任务放置的最近匹配容器实例上的 Amazon ECS 容器代理已断开连接。如果您可以通过 SSH 连接到容器实例,则可以查看代理日志;有关更多信息,请参阅 Amazon ECS 容器代理日志。您还应验证代理是否正在该实例上运行。如果您使用的是经 Amazon ECS 优化的 AMI,则可以尝试通过以下命令停止并重新启动代理。

  • 适用于亚马逊 ECS 优化的亚马逊 Linux 2 AMI 和亚马逊 ECS 优化的亚马逊 Linux 2023 AMI

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

    sudo stop ecs && sudo start ecs

此服务已注册到一个负载均衡器,并且未通过负载均衡器运行状况检查。有关更多信息,请参阅 服务负载均衡器问题排查

此服务包含在连续多次尝试之后仍无法启动的任务。此时,服务计划程序开始逐渐增加重试间隔的时间。您应该排查任务无法启动的原因。有关更多信息,请参阅 亚马逊 ECS 服务限制逻辑

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

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

要请求 API 速率限制配额增加,请打开 Amazon Web Services Support 中心页面,必要时登录,然后选择创建案例。选择提高服务限制。填写并提交表格。

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

minimumHealthyPercent表示在部署期间或容器实例耗尽时应为服务运行的任务数的下限。这是该服务所需任务数的百分比。此值四舍五入。例如,如果最小健康百分比为,50而所需的任务计数为四,则计划程序可以在开始两个新任务之前停止两个现有任务。同样,如果最小运行状况百分比为 75%,所需任务计数为 2,则由于结果值也为 2,调度器无法停止任何任务。

maximumPercent表示在部署期间或容器实例耗尽时应为服务运行的任务数量的上限。它是服务所需任务数的百分比。此值四舍五入。例如,如果最大百分比为,200而所需的任务计数为四,则计划程序可以在停止四个现有任务之前启动四个新任务。同样,如果最大百分比为 125,且目标任务计数为三,则调度器无法启动任何任务,因为结果值也是三。

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

您可以请求增加导致错误的资源的配额。有关更多信息,请参阅 Amazon ECS 服务配额。要请求提高限额,请参阅《服务限额用户指南》中的请求提高限额

以下是此错误出现的可能原因:

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

    有关支持的 Fargate 区域和可用区的信息,请参阅 Amazon ECS 在 Amazon Fargate 上的支持区域

    有关如何查看子网可用区的信息,请参阅 Amazon VPC 用户指南中的查看您的子网

  • 你正在尝试在 Fargate Spot 上运行使用 ARM 架构的任务定义。

您可以请求增加导致错误的资源的配额。有关更多信息,请参阅 Amazon ECS 服务配额。要请求提高限额,请参阅《服务限额用户指南》中的请求提高限额

您可以请求增加导致错误的资源的配额。有关更多信息,请参阅 Amazon ECS 服务配额。要请求提高限额,请参阅《服务限额用户指南》中的请求提高限额

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

您可以请求对基于 Fargate vCPU 的限额增加限额。有关更多信息,请参阅 Amazon ECS 服务配额。要请求提高 Fargate 限额,请参阅《Service Quotas 用户指南》中的请求增加限额

服务的受保护任务数量超过了所需的任务数量。您可以执行以下操作之一:

  • 等到当前任务的保护到期,使它们能够被终止。

  • 确定哪些任务可以停止,然后使用 UpdateTaskProtection API,将protectionEnabled选项设置为false,取消对这些任务的保护。

  • 增加服务的所需任务计数,以大于受保护任务的数量。

当服务调度器找不到可用资源来添加其他任务时,它会发送此事件消息。导致出现此情况的可能原因是:

未在您的集群中找到任何容器实例

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

端口不足

如果您的任务使用固定主机端口映射(例如,您的任务使用主机上的端口 80 作为 Web 服务器),则每个任务必须至少有一个容器实例。一次只能有一个容器使用一个主机端口。您应向集群添加容器实例,或减少所需的任务数。

注册的端口过多

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

端口已在使用

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

The closest matching container-instance is already using a port required by your task.
内存不足

如果您的任务定义指定 1000 MiB 的内存,并且集群中的每个容器实例均具有 1024 MiB 的内存,则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的内存,以便为每个容器实例启动多个任务,或者在集群中启动更多容器实例。

注意

如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源,请参阅容器实例内存管理

没有足够的可用 ENI 附加点

每个使用 awsvpc 网络模式的任务都会收到自己的弹性网络接口 (ENI),且会附加到托管任务的容器实例。Amazon EC2 实例对可以连接的 ENI 数量有限制,并且集群中没有可用 ENI 容量的容器实例。

单个容器实例的 ENI 限制取决于以下条件:

  • 如果您尚未选择使用 awsvpcTrunking 账户设置,则每个容器实例的 ENI 限制取决于实例类型。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的每个实例类型的每个网络接口的 IP 地址

  • 如果您选择awsvpcTrunking账户设置,但在选择加入后仍使用支持的实例类型启动新的容器实例,则每个容器实例的 ENI 限制仍为默认值。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的每个实例类型的每个网络接口的 IP 地址

  • 如果您选择使用 awsvpcTrunking 账户设置,并且您在选择使用后启动使用支持的实例类型的新容器实例,则其他 ENI 将可用。有关更多信息,请参阅 支持的 Amazon EC2 实例类型

有关选择使用 awsvpcTrunking 账户设置的更多信息,请参阅 弹性网络接口中继

您可以将容器实例添加到您的集群以提供更多可用的网络适配器。

容器实例缺少必需属性

一些任务定义参数需要在容器实例上安装特定的 Docker 远程 API 版本。其他任务定义(例如,日志记录驱动程序选项)需要容器实例使用 ECS_AVAILABLE_LOGGING_DRIVERS 代理配置变量注册这些日志记录驱动程序。如果您的任务定义包含需要特定容器实例属性的参数,并且您没有任何可用的容器实例可以满足此要求,则无法放置该任务。

导致此错误的一个常见原因是,如果您的服务使用的是使用awsvpc网络模式和 EC2 启动类型的任务,而您指定的集群没有在创建服务awsvpcConfiguration时指定的子网中向其注册容器实例。

有关特定任务定义参数和代理配置变量所需的属性的更多信息,请参阅任务定义参数Amazon ECS 容器代理配置

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

您可以执行以下操作之一:

  • 等待 Fargate 容量或 EC2 容器实例变为可用。

  • 重新启动服务并指定其他子网。

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

有关如何调试已停止的任务的信息。请参阅已停止的任务错误代码

用于任务放置的最近匹配容器实例上的 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

由于找不到目标组,该服务的任务集无法通过运行状况检查。您应该删除并重新创建该服务。除非相应的 Amazon ECS 服务已被删除,否则不要删除任何 Elastic Load Balancing 目标组。

由于找不到目标,该服务的任务集无法通过运行状况检查。