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

Amazon ECS Events

Amazon ECS 跟踪每个任务和服务的状态。如果任务或服务的状态发生更改,则会触发事件并将其发送到 Amazon EventBridge。这些事件归类为任务状态更改事件和服务操作事件。以下部分中更详细地介绍了这些事件及可能原因。

注意

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

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

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

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

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

任务状态更改事件

以下方案将触发任务状态更改事件:

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

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

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

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

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

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

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

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 Resource Name (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." } }