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

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

Amazon ECS 事件

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

注意

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

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

  • 对于所有事件,事件主体中的 version 字段设为 0。有关 EventBridge 参数的更多信息,请参阅 https://docs.amazonaws.cn/eventbridge/latest/userguide/eventbridge-and-event-patterns.html 中的Amazon EventBridge 用户指南事件和事件模式

  • 事件的 detail 对象中的 version 字段描述了关联资源的版本。当资源状态发生更改时,此版本会递增。由于可多次发送事件,因此您可以使用该字段来确定重复事件。重复事件在 detail 对象中具有相同版本。如果您正在复制使用任务状态EventBridge,您可以比较Amazon ECSAPI 中报告的版本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部分类似于任务对象,该对象是从DescribeTasksAPI 操作Amazon Elastic Container Service API Reference。如果您的容器使用通过 Amazon ECR 托管的映像,则返回 imageDigest 字段。

注意

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

有关 CloudWatch Events 参数的更多信息,请参阅 https://docs.amazonaws.cn/eventbridge/latest/userguide/eventbridge-and-event-patterns.html 中的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 Lambda 函数来侦听 Amazon ECS 任务事件并将这些事件写出到 CloudWatch Logs 日志流的教程演练,请参阅 教程 倾听 Amazon ECS CloudWatch Events

有关创建 SNS 主题以便在发生任务状态更改事件时向您发送电子邮件的教程演练,请参阅 教程 发送 Amazon Simple Notification Service 任务停止事件警报

服务操作事件

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

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

Amazon ECS 发送具有 INFOWARNERROR 事件类型的事件。以下是服务操作事件。

服务操作事件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 资源名称 (ARN) 和 ID。另一个常见原因是 Amazon ECS 无法承担 IAM 角色所提供的任务。

例 服务稳定状态事件

服务稳定状态事件以下面的形式传送。有关 EventBridge 参数的更多信息,请参阅 https://docs.amazonaws.cn/eventbridge/latest/userguide/eventbridge-and-event-patterns.html 中的Amazon EventBridge 用户指南事件和事件模式

有关设置一个简单的 Amazon Lambda 函数来侦听 Amazon ECS 服务操作事件并将这些事件写出到 CloudWatch Logs 日志流的教程演练,请参阅 教程 倾听 Amazon ECS CloudWatch Events

有关创建 SNS 主题以便在发生服务操作事件时向您发送电子邮件的教程演练,请参阅 教程 发送 Amazon Simple Notification Service 任务停止事件警报

{ "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 参数的更多信息,请参阅 https://docs.amazonaws.cn/eventbridge/latest/userguide/eventbridge-and-event-patterns.html 中的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" } }

服务部署状态更改事件

Amazon ECS发送具有详细信息类型的服务部署更改状态事件ECS 部署状态更改。以下是用于创建一个EventBridge的规则Amazon ECS服务部署状态更改事件。有关更多信息,请参阅 。创建 EventBridge 规则中的Amazon 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 参数的更多信息,请参阅 https://docs.amazonaws.cn/eventbridge/latest/userguide/eventbridge-and-event-patterns.html 中的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." } }