Amazon EC2 Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Amazon ECS 事件

Amazon ECS 将以下两种类型的事件发送到 CloudWatch Events:容器实例事件和任务事件。Amazon ECS 跟踪容器实例和任务的状态。如果这些资源中的任一资源发生更改,则将触发事件。这些事件分类为容器实例状态更改事件或任务状态更改事件。以下部分中更详细地介绍了这些事件及可能原因。

注意

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

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

事件包含两个 version 字段;一个字段在事件的主体中,一个字段在事件的 detail 对象中。

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

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

容器实例状态更改事件

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

您调用 StartTaskRunTaskStopTask API 操作(直接调用,或者通过 AWS 管理控制台或开发工具包调用)

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

Amazon ECS 服务计划程序启动或停止任务

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

Amazon ECS 容器代理为具有所需的 RUNNING 状态的任务调用带 STOPPED 状态的 SubmitTaskStateChange API 操作。

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

您可以使用 DeregisterContainerInstance API 操作(直接调用,或者通过 AWS 管理控制台或开发工具包调用)取消注册容器实例

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

任务已在 EC2 实例停止后停止

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

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

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

Amazon ECS 容器代理与 Amazon ECS 连接或断开连接

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

注意

Amazon ECS 容器代理在正常运行过程中会定期断开连接并重新连接(每小时多次),因此应会出现代理连接事件,这些事件并不表示容器代理或您的容器实例出现问题。

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

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

例 容器实例状态更改事件

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

注意

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

{
  "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 操作(直接调用,或者通过 AWS 管理控制台或开发工具包调用)

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

Amazon ECS 服务计划程序启动或停止任务

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

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

Amazon ECS 容器代理监控容器实例上的任务状态,并报告任何状态更改(例如,从 PENDING 更改为 RUNNING,或者从 RUNNING 更改为 STOPPED)。

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

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

停止或终止基础容器实例

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

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

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

例 任务状态更改事件

任务状态更改事件以下面的形式传送(下面的 detail 部分类似于从 Amazon EC2 Container Service API Reference 中的 DescribeTasks API 操作返回的 Task 对象)。有关 CloudWatch Events 参数的更多信息,请参阅 Amazon CloudWatch Events 用户指南 中的事件和事件模式

注意

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

{
  "version": "0",
  "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab",
  "detail-type": "ECS Task 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:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef"
  ],
  "detail": {
    "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",
    "containers": [
      {
        "containerArn": "arn:aws:ecs:us-east-1:111122223333:container/3305bea1-bd16-4217-803d-3e0482170a17",
        "exitCode": 0,
        "lastStatus": "STOPPED",
        "name": "xray",
        "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef"
      }
    ],
    "createdAt": "2016-12-06T16:41:05.702Z",
    "desiredStatus": "RUNNING",
    "lastStatus": "RUNNING",
    "overrides": {
      "containerOverrides": [
        {
          "name": "xray"
        }
      ]
    },
    "startedAt": "2016-12-06T16:41:06.8Z",
    "startedBy": "ecs-svc/9223370556150183303",
    "updatedAt": "2016-12-06T16:41:06.975Z",
    "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef",
    "taskDefinitionArn": "arn:aws:ecs:us-east-1:111122223333:task-definition/xray:2",
    "version": 4
  }
}