本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon ECS Events
Amazon ECS 将以下类型的事件发送到 EventBridge: 容器实例状态更改事件、任务状态更改事件、服务操作和服务部署状态更改事件。如果这些资源发生更改,那么将生成事件。以下部分中更详细地介绍了这些事件及可能原因。
注意
Amazon ECS 将来可能会增加其他事件类型、源和详细信息。如果您以代码方式对事件 JSON 数据反序列化,请确保应用程序已准备好处理未知属性,以避免在增加这些附加属性时出现问题。
在某些情况下,将为同一活动生成多个事件。例如,在容器实例上启动任务时,将为新任务生成任务状态更改事件。生成容器实例状态更改事件以说明容器实例上的可用资源(例如 CPU、内存和可用端口)的更改。同样,如果终止容器实例,将为容器实例、容器代理连接状态以及在容器实例上运行的每个任务生成事件。
容器状态更改和任务状态更改事件包含两个 version
字段:一个字段在事件的主体中,一个字段在事件的 detail
对象中。下面介绍了这两个字段之间的差异:
-
对于所有事件,事件主体中的
version
字段设为0
。有关以下内容的更多信息 EventBridge 参数,请参阅事件和事件模式在亚马逊 EventBridge 用户指南。 -
事件的
detail
对象中的version
字段描述了关联资源的版本。当资源状态发生更改时,此版本会递增。由于可多次发送事件,因此您可以使用该字段来确定重复事件。重复事件在detail
对象中具有相同版本。如果你正在复制你的亚马逊 ECS 容器实例和任务状态为 EventBridge,您可以将 Amazon ECS API 报告的资源版本与中报告的版本进行比较 EventBridge 对于资源(内部detail
object) 来验证事件流中的版本是否为最新版本。
服务操作事件仅包含主体中的 version
字段。
本主题的后续部分中包含了示例。有关如何集成 Amazon ECS 的更多信息 EventBridge,请参阅整合亚马逊 EventBridge 和亚马逊 ECS
容器实例状态更改事件
以下方案将引起容器实例状态更改事件:
- 您调用
StartTask
、RunTask
或StopTask
API 操作(直接调用,或者通过 AWS Management Console或开发工具包调用)。 -
在容器实例上放置或停止任务将修改容器实例上的可用资源(例如 CPU、内存和可用端口)。
- Amazon ECS 服务调度器启动或停止任务。
-
在容器实例上放置或停止任务将修改容器实例上的可用资源(例如 CPU、内存和可用端口)。
- 针对状态为
RUNNING
的任务,Amazon ECS 容器代理调用状态为STOPPED
的SubmitTaskStateChange
API 操作。 -
Amazon ECS 容器代理监控容器实例上的任务状态,并报告任何状态更改。如果应为
STOPPED
的任务转换为RUNNING
,则代理将释放分配给已停止任务的资源(例如 CPU、内存和可用端口)。 - 您可以使用
DeregisterContainerInstance
API 操作(直接调用,或者通过 AWS 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
下面的部分类似于ContainerInstance从 a 返回的对象DescribeContainerInstances中的 API 操作亚马逊弹性容器服务 API 参考。有关以下内容的更多信息 EventBridge 参数,请参阅事件和事件模式在亚马逊 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"
}
}
任务状态更改事件
以下方案将引起任务状态更改事件:
- 您调用
StartTask
、RunTask
或StopTask
API 操作(直接调用,或者通过 AWS Management Console、AWS CLI 或开发工具包调用)。 -
启动或停止任务将创建新的任务资源或修改现有任务资源的状态。
- Amazon ECS 服务调度器启动或停止任务。
-
启动或停止任务将创建新的任务资源或修改现有任务资源的状态。
- Amazon ECS 容器代理调用
SubmitTaskStateChange
API 操作。 -
Amazon ECS 容器代理监控容器实例上任务状态,并报告任何状态更改。状态更改可能包括从
PENDING
到RUNNING
或从RUNNING
到STOPPED
的更改。
- 您可以使用
DeregisterContainerInstance
API 操作和force
标志(直接调用,或者通过 AWS Management Console或开发工具包调用)强制取消注册基础容器实例。 -
注销容器实例将更改容器实例的状态以及 Amazon ECS 容器代理的连接状态。如果任务正在容器实例上运行,则必须设置
force
标志以允许取消注册。这将停止实例上的所有任务。 - 停止或终止基础容器实例。
-
在停止或终止容器实例时,该实例上运行的任务会转换为
STOPPED
状态。 - 任务中的容器状态发生更改。
-
Amazon ECS 容器代理监控任务中的容器状态。例如,如果在任务中运行的容器停止,则此容器状态更改将生成事件。
- 使用 Fargate Spot 容量提供程序的任务会收到终止通知。
-
当任务正在使用
FARGATE_SPOT
容量提供程序并且由于 Spot 中断而停止时会生成任务状态更改事件。
例 任务状态更改事件
任务状态更改事件以下面的形式传送。的detail
下面的部分类似于任务从 a 返回的对象DescribeTasks中的 API 操作亚马逊弹性容器服务 API 参考。如果您的容器使用通过 Amazon ECR 托管的映像,则返回 imageDigest
字段。
注意
createdAt
、connectivityAt
、pullStartedAt
、startedAt
、pullStoppedAt
和 updatedAt
字段的值是 DescribeTasks
操作的响应中的 UNIX 时间戳,而在任务状态更改事件中,它们是 ISO 字符串时间戳。
有关以下内容的更多信息 CloudWatch 事件参数,请参阅事件和事件模式在亚马逊 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
响应字段中不包含版本号。以下是一个事件模式,用于创建 EventBridge 亚马逊 ECS 服务操作事件的规则。有关更多信息,请参阅创建一个 EventBridge规则在亚马逊 EventBridge 用户指南。
{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Service Action" ] }
Amazon ECS 发送具有 INFO
、WARN
, 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
-
由于 AWS 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 参数,请参阅事件和事件模式在亚马逊 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 参数,请参阅事件和事件模式在亚马逊 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部署状态更改的服务部署更改状态事件。以下是一个事件模式,用于创建 EventBridge 亚马逊 ECS 服务部署状态更改事件的规则。有关更多信息,请参阅创建一个 EventBridge 规则在亚马逊 EventBridge 用户指南。
{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Deployment State Change" ] }
Amazon ECS 发送具有INFO
和 ERROR
事件类型的事件。下列是服务部署状态更改的事件:
SERVICE_DEPLOYMENT_IN_PROGRESS
-
正在进行服务部署。此事件同时针对初始部署和回滚部署发送。
SERVICE_DEPLOYMENT_COMPLETED
-
服务部署已完成。一旦服务在部署后达到稳定状态,就会发送此事件。
SERVICE_DEPLOYMENT_FAILED
-
服务部署失败。将针对启用了部署断路器逻辑的服务发送此事件。
例 正在进行的服务部署事件
初始部署和回滚部署启动时,将传递服务部署进行中的事件。两者之间的差异在 reason
字段中。有关以下内容的更多信息 EventBridge 参数,请参阅事件和事件模式在亚马逊 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."
}
}