Amazon ECS 容器实例 - Amazon Elastic Container Service

Amazon ECS 容器实例

Amazon ECS 容器实例是运行 Amazon ECS 容器代理且已注册到 Amazon ECS 集群的 Amazon EC2 实例。当您使用 EC2 启动类型或 自动扩缩组容量提供程序使用 Amazon ECS 运行任务时,您的任务将放置在活动容器实例上。

注意

由于使用 Fargate 启动类型的任务部署到由 AWS 管理的基础设施上,因此本主题不适用。

Amazon ECS 支持以下容器实例类型。

  • Linux

  • Windows

  • 外部部署,例如本地虚拟机

容器实例概念

  • 您的容器实例必须运行 Amazon ECS 容器代理。容器代理能够将实例注册到您的某个集群中。如果使用的是经 Amazon ECS 优化的 AMI,则已安装该代理。要使用其他操作系统,请安装代理。有关更多信息,请参阅Amazon ECS 容器代理

  • 因为 Amazon ECS 容器代理代表您调用 Amazon ECS,所以,必须通过对您的账户进行身份验证并提供所需资源权限的 IAM 角色才能启动容器实例。有关更多信息,请参阅Amazon ECS 容器实例 IAM 角色

  • 从 Linux Amazon ECS 优化的 AMI 版本 20200430 及更高版本开始,您的容器实例将支持 Amazon EC2 实例元数据服务版本 2 (IMDSv2)。对于版本 20200430 之前的 Amazon ECS 优化的 AMI,支持 Amazon EC2 实例元数据服务版本 1 (IMDSv1)。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的配置实例元数据服务

  • 如果与您的任务关联的任何容器需要外部连接,您可以将其网络端口映射到主机 Amazon ECS 容器实例上的端口,以便能通过互联网访问这些容器。您的容器实例安全组必须允许对您要公开的端口进行入站访问。有关更多信息,请参阅 Amazon VPC 入门指南中的创建安全组

  • 我们强烈建议在 VPC 中启动您的容器实例,因为 Amazon VPC 可提供对您的网络的更多控制并提供更广泛的配置功能。有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的 Amazon EC2 和 Amazon Virtual Private Cloud

  • 容器实例需要访问才能与 Amazon ECS 服务端点通信。这可以通过接口 VPC 端点或具有公共 IP 地址的容器实例实现。

    有关接口 VPC 端点的更多信息,请参阅 Amazon Elastic Container Service 开发人员指南中的 Amazon ECS 接口 VPC 端点 (AWS PrivateLink)

    如果您没有配置接口 VPC 端点,并且您的容器实例没有公有 IP 地址,必须使用网络地址转换 (NAT) 来提供此访问。有关更多信息,请参阅 Amazon VPC 用户指南中的 NAT 网关和本指南中的 HTTP 代理配置。有关更多信息,请参阅创建 Virtual Private Cloud

  • 您为容器实例选择的 Amazon EC2 实例的类型将决定群集中可用的资源。Amazon EC2 提供不同的实例类型,每种类型均具有可用于运行任务的不同的 CPU、内存、存储和网络容量。有关更多信息,请参阅 Amazon EC2 实例

  • 每个容器实例均具有本地存储在容器实例和 Amazon ECS 中的唯一状态信息,

    • 因此,您不应将实例从一个集群注销,然后再将其重新注册到另一个集群。要重新定位容器实例资源,建议您从一个集群终止容器实例,然后在新集群中启动具有最新的经 Amazon ECS 优化的 Amazon Linux 2 AMI 的新容器实例。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的终止实例启动 Amazon ECS Linux 容器实例

    • 您无法停止容器实例并更改其实例类型。相反,建议您终止容器实例,然后在所需集群中启动具有所需实例大小和最新的经 Amazon ECS 优化的 Amazon Linux 2 AMI 的新容器实例。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的终止您的实例和本指南中的 启动 Amazon ECS Linux 容器实例

容器实例生命周期

当 Amazon ECS 容器代理将 Amazon EC2 实例注册到集群时,Amazon EC2 容器实例将其状态报告为 ACTIVE,并将其代理连接状态报告为 TRUE。此容器实例可接受 RunTask 请求。

如果停止(而不是终止) Amazon ECS 容器实例,则状态将保持为 ACTIVE,但代理连接状态将在几分钟内转换为 FALSE。在容器实例上运行的任何任务将停止。如果您再次启动容器实例,则容器代理将使用 Amazon ECS 服务重新连接,并且您能够在实例上再次运行任务。

重要

如果您停止并启动某个容器实例,即重启该实例,则一些旧版本的 Amazon ECS 容器代理会在未注销原始容器实例 ID 的情况下再次注册该实例。这种情况下,Amazon ECS 会在集群中列出超出实际拥有数量的容器实例。(如果具有同一 Amazon EC2 实例 ID 的重复容器实例 ID,则可以安全地注销列出为 ACTIVE 且代理连接状态为 FALSE 的重复项。) 此问题已在当前版本的 Amazon ECS 容器代理中修复。有关更新到当前版本的更多信息,请参阅更新 Amazon ECS 容器代理

如果将容器实例的状态更改为 DRAINING,则新任务不会置于该容器实例中,并将尽可能删除在此容器实例上运行的所有服务任务,以便执行系统更新。有关更多信息,请参阅容器实例耗尽

如果您注销或终止某个容器实例,则该容器实例状态将立即更改为 INACTIVE,而且在您列出您的容器实例时将不再报告该容器实例。但您仍可以在终止后的 1 小时内描述容器实例。1 小时后,该实例描述将不再可用。

重要

您可以手动耗尽实例,也可以构建 自动扩缩组生命周期钩子以将实例状态设置为 DRAINING。有关 Auto Scaling 生命周期钩子的更多信息,请参阅 Amazon EC2 Auto Scaling 生命周期钩子

检查您的账户的实例 IAM 角色

Amazon ECS 容器代理将代表您调用 Amazon ECS API。运行该代理的容器实例需要一个 IAM policy 和角色,以便该服务了解该代理属于您。

大多数情况下,在控制台首次运行体验中将自动为您创建 Amazon ECS 实例角色。您可使用以下过程检查并确定您的账户是否已有 Amazon ECS 服务角色。

在 IAM 控制台中检查 ecsInstanceRole
  1. 登录 AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择角色

  3. 在角色列表中搜索 ecsInstanceRole。如果角色存在,则您无需创建它。如果角色不存在,请按照 Amazon ECS 容器实例 IAM 角色中的过程操作来创建角色。