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

Amazon ECS Events

Amazon ECS 将以下类型的事件发送到 EventBridge:容器实例状态更改事件、任务状态更改事件、服务操作和服务部署状态更改事件。如果这些资源发生更改,那么将生成事件。以下部分中更详细地介绍了这些事件及可能原因。

注意

Amazon ECS 将来可能会增加其他事件类型、源和详细信息。如果您以代码方式对事件 JSON 数据反序列化,请确保应用程序已准备好处理未知属性,以避免在增加这些附加属性时出现问题。

在某些情况下,将为同一活动生成多个事件。例如,在容器实例上启动任务时,将为新任务生成任务状态更改事件。生成容器实例状态更改事件以说明容器实例上的可用资源(例如 CPU、内存和可用端口)的更改。同样,如果终止容器实例,将为容器实例、容器代理连接状态以及在容器实例上运行的每个任务生成事件。

容器状态更改和任务状态更改事件包含两个 version 字段:一个字段在事件的主体中,一个字段在事件的 detail 对象中。下面介绍了这两个字段之间的差异:

  • 对于所有事件,事件主体中的 version 字段设为 0。有关 EventBridge 参数更多信息,请参阅 Amazon EventBridge 用户指南事件和事件模式

  • 事件的 detail 对象中的 version 字段描述了关联资源的版本。当资源状态发生更改时,此版本会递增。由于可多次发送事件,因此您可以使用该字段来确定重复事件。重复事件在 detail 对象中具有相同版本。如果您用 EventBridge 复制Amazon ECS 容器实例和任务状态,则可比较 Amazon ECS API 所报告的资源版本与资源的 EventBridge 事件中报告的版本(在 detail 对象中),以便验证事件流中的版本是否为最新版本。

服务操作事件仅包含主体中的 version 字段。

本主题的后续部分中包含了示例。有关如何集成 Amazon ECS 和 EventBridge 的更多信息,请参阅 Integrating Amazon EventBridge and Amazon ECS(集成 Amazon EventBridge 和 Amazon ECS)。

容器实例状态更改事件

以下方案将引起容器实例状态更改事件:

您调用 StartTaskRunTaskStopTask API 操作(直接调用,或者通过 Amazon Web Services Management Console或开发工具包调用)。

在容器实例上放置或停止任务将修改容器实例上的可用资源(例如 CPU、内存和可用端口)。

Amazon ECS 服务调度器启动或停止任务。

在容器实例上放置或停止任务将修改容器实例上的可用资源(例如 CPU、内存和可用端口)。

针对状态为 RUNNING 的任务,Amazon ECS 容器代理调用状态为 STOPPEDSubmitTaskStateChange API 操作。

Amazon ECS 容器代理监控容器实例上的任务状态,并报告任何状态更改。如果应为 STOPPED 的任务转换为 RUNNING,则代理将释放分配给已停止任务的资源(例如 CPU、内存和可用端口)。

您可以使用 DeregisterContainerInstance API 操作(直接调用,或者通过 Amazon Web Services Management Console或开发工具包调用)注销容器实例。

注销容器实例将更改容器实例的状态以及 Amazon ECS 容器代理的连接状态。

EC2 实例停止后,任务也停止。

在停止容器实例时,该实例上运行的任务会转换为 STOPPED 状态。

Amazon ECS 容器代理首次注册容器实例。

当 Amazon ECS 容器代理首次注册容器实例(在启动时注册,或者在首次运行时手动注册)时,将为实例创建状态更改事件。

Amazon ECS Container 代理与 Amazon ECS 连接或断开连接。

当 Amazon ECS 容器代理与 Amazon ECS 后端连接或断开连接时,将更改容器实例的 agentConnected 状态。

注意

Amazon ECS 容器代理每小时断开连接并重新连接多次,这是其正常操作的一部分,因此代理连接事件应该是可以预期的。这些事件并不表示容器代理或容器实例存在问题。

升级实例上的 Amazon ECS 容器代理。

容器实例详细信息包含容器代理版本的对象。如果您升级代理,此版本信息将发生更改并且将生成事件。

例 容器实例状态更改事件

容器实例状态更改事件以下面的形式传送。下面的 detail 部分类似于从 Amazon Elastic Container Service API Reference 中的 DescribeContainerInstances API 操作返回的 ContainerInstance 对象。有关 EventBridge 参数更多信息,请参阅 Amazon EventBridge 用户指南事件和事件模式

{ "version": "0", "id": "8952ba83-7be2-4ab5-9c32-6687532d15a2", "detail-type": "ECS Container Instance State Change", "source": "aws.ecs", "account": "111122223333", "time": "2016-12-06T16:41:06Z", "region": "us-east-1", "resources": [ "arn:aws:ecs:us-east-1:111122223333:container-instance/b54a2a04-046f-4331-9d74-3f6d7f6ca315" ], "detail": { "agentConnected": true, "attributes": [ { "name": "com.amazonaws.ecs.capability.logging-driver.syslog" }, { "name": "com.amazonaws.ecs.capability.task-iam-role-network-host" }, { "name": "com.amazonaws.ecs.capability.logging-driver.awslogs" }, { "name": "com.amazonaws.ecs.capability.logging-driver.json-file" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.17" }, { "name": "com.amazonaws.ecs.capability.privileged-container" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19" }, { "name": "com.amazonaws.ecs.capability.ecr-auth" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.20" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.22" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.23" }, { "name": "com.amazonaws.ecs.capability.task-iam-role" } ], "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default", "containerInstanceArn": "arn:aws:ecs:us-east-1:111122223333:container-instance/b54a2a04-046f-4331-9d74-3f6d7f6ca315", "ec2InstanceId": "i-f3a8506b", "registeredResources": [ { "name": "CPU", "type": "INTEGER", "integerValue": 2048 }, { "name": "MEMORY", "type": "INTEGER", "integerValue": 3767 }, { "name": "PORTS", "type": "STRINGSET", "stringSetValue": [ "22", "2376", "2375", "51678", "51679" ] }, { "name": "PORTS_UDP", "type": "STRINGSET", "stringSetValue": [] } ], "remainingResources": [ { "name": "CPU", "type": "INTEGER", "integerValue": 1988 }, { "name": "MEMORY", "type": "INTEGER", "integerValue": 767 }, { "name": "PORTS", "type": "STRINGSET", "stringSetValue": [ "22", "2376", "2375", "51678", "51679" ] }, { "name": "PORTS_UDP", "type": "STRINGSET", "stringSetValue": [] } ], "status": "ACTIVE", "version": 14801, "versionInfo": { "agentHash": "aebcbca", "agentVersion": "1.13.0", "dockerVersion": "DockerVersion: 1.11.2" }, "updatedAt": "2016-12-06T16:41:06.991Z" } }

任务状态更改事件

以下方案将引起任务状态更改事件:

您调用 StartTaskRunTaskStopTask API 操作(直接调用,或者通过 Amazon Web Services Management Console、Amazon CLI 或开发工具包调用)。

启动或停止任务将创建新的任务资源或修改现有任务资源的状态。

Amazon ECS 服务调度器启动或停止任务。

启动或停止任务将创建新的任务资源或修改现有任务资源的状态。

Amazon ECS 容器代理调用 SubmitTaskStateChange API 操作。

Amazon ECS 容器代理监控容器实例上任务状态,并报告任何状态更改。状态更改可能包括从 PENDINGRUNNING 或从 RUNNINGSTOPPED 的更改。

您可以使用 DeregisterContainerInstance API 操作和 force 标志(直接调用,或者通过 Amazon Web Services Management Console或开发工具包调用)强制取消注册基础容器实例。

注销容器实例将更改容器实例的状态以及 Amazon ECS 容器代理的连接状态。如果任务正在容器实例上运行,则必须设置 force 标志以允许取消注册。这将停止实例上的所有任务。

停止或终止基础容器实例。

在停止或终止容器实例时,该实例上运行的任务会转换为 STOPPED 状态。

任务中的容器状态发生更改。

Amazon ECS 容器代理监控任务中的容器状态。例如,如果在任务中运行的容器停止,则此容器状态更改将生成事件。

使用 Fargate Spot 容量提供程序的任务会收到终止通知。

当任务正在使用 FARGATE_SPOT 容量提供程序并且由于 Spot 中断而停止时会生成任务状态更改事件。

例 任务状态更改事件

任务状态更改事件以下面的形式传送。下面的 detail 部分类似于 Amazon Elastic Container Service API Reference 中的 DescribeTasks API 操作返回的任务对象。如果您的容器使用通过 Amazon ECR 托管的映像,则返回 imageDigest 字段。

注意

createdAtconnectivityAtpullStartedAtstartedAtpullStoppedAtupdatedAt 字段的值是 DescribeTasks 操作的响应中的 UNIX 时间戳,而在任务状态更改事件中,它们是 ISO 字符串时间戳。

有关 CloudWatch Events 参数的更多信息,请参阅 Amazon EventBridge 用户指南中的事件和事件模式

{ "version": "0", "id": "3317b2af-7005-947d-b652-f55e762e571a", "detail-type": "ECS Task State Change", "source": "aws.ecs", "account": "111122223333", "time": "2020-01-23T17:57:58Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:task/FargateCluster/c13b4cb40f1f4fe4a2971f76ae5a47ad" ], "detail": { "attachments": [ { "id": "1789bcae-ddfb-4d10-8ebe-8ac87ddba5b8", "type": "eni", "status": "ATTACHED", "details": [ { "name": "subnetId", "value": "subnet-abcd1234" }, { "name": "networkInterfaceId", "value": "eni-abcd1234" }, { "name": "macAddress", "value": "0a:98:eb:a7:29:ba" }, { "name": "privateIPv4Address", "value": "10.0.0.139" } ] } ], "availabilityZone": "us-west-2c", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/FargateCluster", "containers": [ { "containerArn": "arn:aws:ecs:us-west-2:111122223333:container/cf159fd6-3e3f-4a9e-84f9-66cbe726af01", "lastStatus": "RUNNING", "name": "FargateApp", "image": "111122223333.dkr.ecr.us-west-2.amazonaws.com/hello-repository:latest", "imageDigest": "sha256:74b2c688c700ec95a93e478cdb959737c148df3fbf5ea706abe0318726e885e6", "runtimeId": "ad64cbc71c7fb31c55507ec24c9f77947132b03d48d9961115cf24f3b7307e1e", "taskArn": "arn:aws:ecs:us-west-2:111122223333:task/FargateCluster/c13b4cb40f1f4fe4a2971f76ae5a47ad", "networkInterfaces": [ { "attachmentId": "1789bcae-ddfb-4d10-8ebe-8ac87ddba5b8", "privateIpv4Address": "10.0.0.139" } ], "cpu": "0" } ], "createdAt": "2020-01-23T17:57:34.402Z", "launchType": "FARGATE", "cpu": "256", "memory": "512", "desiredStatus": "RUNNING", "group": "family:sample-fargate", "lastStatus": "RUNNING", "overrides": { "containerOverrides": [ { "name": "FargateApp" } ] }, "connectivity": "CONNECTED", "connectivityAt": "2020-01-23T17:57:38.453Z", "pullStartedAt": "2020-01-23T17:57:52.103Z", "startedAt": "2020-01-23T17:57:58.103Z", "pullStoppedAt": "2020-01-23T17:57:55.103Z", "updatedAt": "2020-01-23T17:57:58.103Z", "taskArn": "arn:aws:ecs:us-west-2:111122223333:task/FargateCluster/c13b4cb40f1f4fe4a2971f76ae5a47ad", "taskDefinitionArn": "arn:aws:ecs:us-west-2:111122223333:task-definition/sample-fargate:1", "version": 4, "platformVersion": "1.3.0" } }

服务操作事件

Amazon ECS 发送具有详细信息类型 ECS Service Action 的服务操作事件。与容器实例和任务状态更改事件不同,服务操作事件在 details 响应字段中不包含版本号。以下是用于为 Amazon ECS 服务操作事件创建 EventBridge 规则的事件模式。有关更多信息,请参阅 Amazon EventBridge 用户指南中的创建 EventBridge 规则

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Service Action" ] }

Amazon ECS 发送具有 INFOWARN, and ERROR 事件类型的事件。以下是服务操作事件。

具有 INFO 事件类型的服务操作事件

SERVICE_STEADY_STATE

服务正常运行且任务数量为期望值,从而达到稳定状态。服务调度器会定期报告状态,因此您可能会多次收到此消息。

TASKSET_STEADY_STATE

任务集正常且任务数量为期望值,从而达到稳定状态。

CAPACITY_PROVIDER_STEADY_STATE

与服务关联的容量提供程序达到稳定状态。

SERVICE_DESIRED_COUNT_UPDATED

当服务计划程序为服务或任务集更新计算的期望计数时。当用户手动更新期望计数时,不会发送此事件。

具有 WARN 事件类型的服务操作事件

SERVICE_TASK_START_IMPAIRED

该服务无法始终如一地成功启动任务。

SERVICE_DISCOVERY_INSTANCE_UNHEALTHY

使用服务发现的服务包含运行状况不佳的任务。服务计划程序检测到服务注册表中的任务运行状况不佳。

具有 ERROR 事件类型的服务操作事件

SERVICE_DAEMON_PLACEMENT_CONSTRAINT_VIOLATED

使用 DAEMON 服务计划程序策略的服务中的任务不再符合服务的放置约束策略。

ECS_OPERATION_THROTTLED

由于 Amazon ECS API 节流限制,服务计划程序已被限制。

SERVICE_DISCOVERY_OPERATION_THROTTLED

由于 Amazon Cloud Map API 节流限制,服务计划程序已被限制。配置为使用服务发现的服务可能会发生这种情况。

SERVICE_TASK_PLACEMENT_FAILURE

服务计划程序无法放置任务。原因将在 reason 字段中描述。

生成此服务事件的常见原因是集群中缺乏放置任务的资源。例如,可用容器实例上的 CPU 或内存容量不足,或者没有容器实例可用。另一个常见原因是 Amazon ECS 容器代理在容器实例上断开连接,导致计划程序无法放置任务。

SERVICE_TASK_CONFIGURATION_FAILURE

由于配置错误,服务计划程序无法放置任务。原因将在 reason 字段中描述。

生成此服务事件的一个常见原因是,标签已应用于服务,但用户或角色尚未在区域中选择采用新的 Amazon 资源名称(ARN)格式。有关更多信息,请参阅Amazon Resource Names (ARN) 和 ID。另一个常见原因是 Amazon ECS 无法承担 IAM 角色所提供的任务。

例 服务稳定状态事件

服务稳定状态事件以下面的形式传送。有关 EventBridge 参数更多信息,请参阅 Amazon EventBridge 用户指南事件和事件模式

{ "version": "0", "id": "af3c496d-f4a8-65d1-70f4-a69d52e9b584", "detail-type": "ECS Service Action", "source": "aws.ecs", "account": "111122223333", "time": "2019-11-19T19:27:22Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "INFO", "eventName": "SERVICE_STEADY_STATE", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "createdAt": "2019-11-19T19:27:22.695Z" } }

例 容量提供程序稳定状态事件

容量提供程序稳定状态事件以下面的形式传送。

{ "version": "0", "id": "b9baa007-2f33-0eb1-5760-0d02a572d81f", "detail-type": "ECS Service Action", "source": "aws.ecs", "account": "111122223333", "time": "2019-11-19T19:37:00Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "INFO", "eventName": "CAPACITY_PROVIDER_STEADY_STATE", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "capacityProviderArns": [ "arn:aws:ecs:us-west-2:111122223333:capacity-provider/ASG-tutorial-capacity-provider" ], "createdAt": "2019-11-19T19:37:00.807Z" } }

例 服务任务启动受损事件

服务任务启动受损事件以下面的形式传送。

{ "version": "0", "id": "57c9506e-9d21-294c-d2fe-e8738da7e67d", "detail-type": "ECS Service Action", "source": "aws.ecs", "account": "111122223333", "time": "2019-11-19T19:55:38Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "WARN", "eventName": "SERVICE_TASK_START_IMPAIRED", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "createdAt": "2019-11-19T19:55:38.725Z" } }

例 服务任务放置失败事件

服务任务放置失败事件以下面的形式传送。有关 EventBridge 参数更多信息,请参阅 Amazon EventBridge 用户指南事件和事件模式

在以下示例中,任务试图使用 FARGATE_SPOT 容量提供程序,但服务计划程序无法获取任何 Fargate Spot 容量。

{ "version": "0", "id": "ddca6449-b258-46c0-8653-e0e3a6d0468b", "detail-type": "ECS Service Action", "source": "aws.ecs", "account": "111122223333", "time": "2019-11-19T19:55:38Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "ERROR", "eventName": "SERVICE_TASK_PLACEMENT_FAILURE", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "capacityProviderArns": [ "arn:aws:ecs:us-west-2:111122223333:capacity-provider/FARGATE_SPOT" ], "reason": "RESOURCE:FARGATE", "createdAt": "2019-11-06T19:09:33.087Z" } }

在以下 EC2 启动类型的示例中,任务尝试在容器实例 2dd1b186f39845a584488d2ef155c131 上启动,但是由于 CPU 不足,服务调度器无法放置任务。

{ "version": "0", "id": "ddca6449-b258-46c0-8653-e0e3a6d0468b", "detail-type": "ECS Service Action", "source": "aws.ecs", "account": "111122223333", "time": "2019-11-19T19:55:38Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "ERROR", "eventName": "SERVICE_TASK_PLACEMENT_FAILURE", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "containerInstanceArns": [ "arn:aws:ecs:us-west-2:111122223333:container-instance/default/2dd1b186f39845a584488d2ef155c131" ], "reason": "RESOURCE:CPU", "createdAt": "2019-11-06T19:09:33.087Z" } }

服务部署状态更改事件

Amazon ECS 发送详细信息类型为 ECS部署状态更改的服务部署更改状态事件。以下是用于为 Amazon ECS 任务状态更改事件创建 EventBridge 规则的事件模式。有关更多信息,请参阅 Amazon EventBridge 用户指南中的创建 EventBridge 规则

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Deployment State Change" ] }

Amazon ECS 发送具有INFOERROR 事件类型的事件。下列是服务部署状态更改的事件:

SERVICE_DEPLOYMENT_IN_PROGRESS

正在进行服务部署。此事件同时针对初始部署和回滚部署发送。

SERVICE_DEPLOYMENT_COMPLETED

服务部署已完成。一旦服务在部署后达到稳定状态,就会发送此事件。

SERVICE_DEPLOYMENT_FAILED

服务部署失败。将针对启用了部署断路器逻辑的服务发送此事件。

例 正在进行的服务部署事件

初始部署和回滚部署启动时,将传递服务部署进行中的事件。两者之间的差异在 reason 字段中。有关 EventBridge 参数更多信息,请参阅 Amazon EventBridge 用户指南事件和事件模式

以下显示了初始部署开始的示例输出。

{ "version": "0", "id": "ddca6449-b258-46c0-8653-e0e3a6EXAMPLE", "detail-type": "ECS Deployment State Change", "source": "aws.ecs", "account": "111122223333", "time": "2020-05-23T12:31:14Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "INFO", "eventName": "SERVICE_DEPLOYMENT_IN_PROGRESS", "deploymentId": "ecs-svc/123", "updatedAt": "2020-05-23T11:11:11Z", "reason": "ECS deployment deploymentId in progress." } }

下面显示了开始回滚部署的示例输出。reason 字段提供服务正在回滚到部署的 ID。

{ "version": "0", "id": "ddca6449-b258-46c0-8653-e0e3aEXAMPLE", "detail-type": "ECS Deployment State Change", "source": "aws.ecs", "account": "111122223333", "time": "2020-05-23T12:31:14Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "INFO", "eventName": "SERVICE_DEPLOYMENT_IN_PROGRESS", "deploymentId": "ecs-svc/123", "updatedAt": "2020-05-23T11:11:11Z", "reason": "ECS deployment circuit breaker: rolling back to deploymentId deploymentID." } }

例 服务部署已完成事件

服务部署完成状态事件以下面的形式传送。有关更多信息,请参阅滚动更新

{ "version": "0", "id": "ddca6449-b258-46c0-8653-e0e3aEXAMPLE", "detail-type": "ECS Deployment State Change", "source": "aws.ecs", "account": "111122223333", "time": "2020-05-23T12:31:14Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "INFO", "eventName": "SERVICE_DEPLOYMENT_COMPLETED", "deploymentId": "ecs-svc/123", "updatedAt": "2020-05-23T11:11:11Z", "reason": "ECS deployment deploymentID completed." } }

例 服务部署失败事件

服务部署失败状态事件以下面的形式传送。将仅针对启用了部署断路器逻辑的服务发送服务部署失败状态事件。有关更多信息,请参阅滚动更新

{ "version": "0", "id": "ddca6449-b258-46c0-8653-e0e3aEXAMPLE", "detail-type": "ECS Deployment State Change", "source": "aws.ecs", "account": "111122223333", "time": "2020-05-23T12:31:14Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "ERROR", "eventName": "SERVICE_DEPLOYMENT_FAILED", "deploymentId": "ecs-svc/123", "updatedAt": "2020-05-23T11:11:11Z", "reason": "ECS deployment circuit breaker: task failed to start." } }