Amazon ECS 托管实例的架构 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon ECS 托管实例的架构

Amazon ECS 托管实例是 Amazon ECS 的一个完全托管计算选项,它使您能够在各种 Amazon EC2 实例类型上运行容器化工作负载,同时将基础设施管理卸载到 Amazon。借助 Amazon ECS 托管实例,您可以访问特定计算功能(例如,GPU 加速、特定 CPU 架构、高网络性能和专用实例类型),而 Amazon 负责处理底层基础设施的预置、扩展、修补和维护。

使用 Amazon ECS 托管实例时,您需要将应用程序打包在容器中并指定计算要求。Amazon 会自动选择符合工作负载需求的成本最优化的通用 Amazon EC2 实例类型,您也可以指定所需的实例属性,包括实例类型、CPU 制造商和加速器。Amazon ECS 托管实例全面管理基础设施的各个方面,包括扩展、修补和成本优化,而无需牺牲对 Amazon 功能和 Amazon EC2 集成的访问。

Amazon ECS 托管实例支持具有平台特定的优化和安全配置的 Linux 容器。默认情况下,Amazon ECS 托管实例通过将多个较小任务放置在较大实例上来优化基础设施利用率,从而帮助降低成本并缩短任务启动时间。

本主题介绍了 Amazon ECS 托管实例任务和服务的不同组件,并指出了将 Amazon ECS 托管实例与 Amazon ECS 结合使用时的特殊注意事项。

开始使用

要开始使用 Amazon ECS 托管实例,您需要创建所需的 IAM 角色并在您的 Amazon 账户中启用 Amazon ECS 托管实例。然后,您可以创建一个容量提供程序,并使用该 Amazon ECS 托管实例容量提供程序启动任务或服务。

有关开始使用的详细说明,请参阅:

容量提供程序

Amazon ECS 托管实例使用容量提供程序来管理工作负载的计算容量。您可以使用默认容量提供程序,也可以创建具有特定实例要求的自定义容量提供程序。

可用的容量提供程序选项如下:

  • 默认容量提供程序:自动为您的工作负载需求选择成本最优化的通用实例类型。

  • 自定义容量提供程序:允许您使用基于属性的实例类型选择来指定实例属性,包括 vCPU 计数、内存、CPU 制造商、加速器类型和特定实例类型。

容量提供程序策略只能包含以下列表中的一种容量提供程序类型:

  • Amazon ECS 托管实例

  • 自动扩缩组

  • Fargate/Fargate_SPOT

实例选择和优化

Amazon ECS 使用以下方法之一为 Amazon ECS 托管实例工作负载选择实例类型:

  • 自动选择:使用默认容量提供程序时,Amazon ECS 会自动选择成本最优化的通用实例类型,以满足任务定义中指定的 CPU 和内存要求。

  • 基于属性的选择:使用自定义容量提供程序时,您可以指定实例属性,例如 vCPU 计数、内存大小、CPU 制造商、加速器类型和特定实例类型。Amazon ECS 会从与指定属性匹配的所有实例类型中进行选择。

Amazon ECS 托管实例通过多种机制优化基础设施利用率和成本:

  • 多任务放置:默认情况下,Amazon ECS 将多个较小任务放置在较大实例上,以最大限度地提高利用率并降低成本。

  • 活动工作负载整合:Amazon ECS 识别容器实例何时真正处于空闲状态,同时努力避免可能影响应用程序可用性或部署性能的过早终止。系统会遵循为服务设置的最小和最大任务数、先启动后停止行为以及任务保护行为。

  • 合理调整大小:随着工作负载要求的变化,Amazon ECS 会启动大小适合当前需求的替代实例。

Amazon ECS 使用 Amazon EC2 事件窗口在您的首选时间段内安排维护活动。利用事件窗口,您能够定义 Amazon 可以对实例执行维护的重复时间段,通过使维护与运营计划保持一致来帮助最大限度地减少对工作负载的干扰。有关更多信息,请参阅《Amazon EC2 用户指南》中的实例的计划事件

如果您需要严格隔离,则可以将 Amazon ECS 托管实例配置为在具有虚拟机级别安全隔离边界的单独实例上运行每个任务。

任务定义

使用 Amazon ECS 托管实例的任务支持大多数 Amazon ECS 任务定义参数。Amazon ECS 托管实例与使用平台版本 1.4.0 的现有 Fargate 任务定义兼容,使迁移变得简单。

要使用 Amazon ECS 托管实例,请将 requiresCompatibilities 任务定义参数设置为包括 MANAGED_INSTANCES。任务定义可以同时指定 Fargate 和 Amazon ECS 托管实例兼容性,以提供更灵活的部署选项。

操作系统和 CPU 架构

支持以下操作系统:

  • Bottlerocket

有 2 个架构可用于 Amazon ECS 任务定义 ARM 和 X86_64。

在 Amazon ECS 托管实例上运行 Linux 容器时,您可以使用 X86_64 CPU 架构,也可以使用 ARM64 架构用于基于 ARM 的应用程序。

主要 功能

下面是 Amazon ECS 托管实例的主要功能:

  • 选择特定 EC2 实例类型来满足应用程序要求,从而能够访问专用硬件功能,例如 GPU 加速计算、特定 CPU 功能和大内存大小。

  • 默认情况下,通过在单个实例上运行多个任务来优化资源利用率和成本,这与 Fargate 不同,Fargate 在自己的隔离环境中运行每个任务。

  • 确保安全合规性并定期修补实例。ECS 托管实例在 14 天后启动实例耗尽,并自动将基于服务的任务替换为新实例。

  • 使用特权 Linux 功能在容器内启用高级联网和系统管理函数,包括 CAP_SYS_ADMIN、CAP_SYS_ADMIN 和 CAP_BPF。

IAM 角色

Amazon ECS 托管实例需要两个 IAM 角色:

  • 基础设施角色:此角色允许 Amazon 代表您管理 Amazon ECS 托管实例。

  • 实例配置文件:实例配置文件是一种将 IAM 角色传递给 Amazon ECS 托管实例的方法。此配置文件用于:

    • 为运行容器工作负载的 Amazon ECS 托管实例定义 IAM 权限。

    • 允许 Amazon 代表您管理这些实例。

    • 允许实例根据配置文件中定义的权限访问 Amazon 服务。

安全与合规

Amazon ECS 托管实例实施多层安全措施来保护工作负载:

  • 安全配置:Amazon ECS 托管实例遵循 Amazon 安全最佳实践,包括无 SSH 访问、不可变的根文件系统以及通过 SELinux 实现的内核级强制访问控制。

  • 自动修补:Amazon 定期使用最新安全补丁更新 Amazon ECS 托管实例,遵循您配置的维护时间段。

  • 有限的实例生命周期:ECS 在 14 天后自动启动实例耗尽,确保应用程序在配置适当且已安装最新安全补丁的实例上运行。

  • 特权功能:您可以选择为需要 Linux 特权功能的工作负载启用这些功能,例如网络监控和可观测性解决方案。

Amazon ECS 托管实例支持与 Amazon ECS 相同的合规性计划,包括 PCI-DSS、HIPAA 和 FedRAMP。在受支持的区域,Amazon ECS 托管实例会遵循账户级 FIPS 端点设置,以帮助实现 FedRAMP 合规性。

Networking

Amazon ECS 托管实例支持 awsvpchost 网络模式。awsvpc 网络模式为每个任务提供其自己的弹性网络接口和您的 VPC 内的私有 IP 地址。这使得用户能够在任务级别进行精细的安全组和网络 ACL 控制。在 host 网络模式下,任务共享主机 Amazon ECS 托管实例的网络命名空间。有关 Amazon ECS 托管实例上的任务联网的更多信息,请参阅Amazon ECS 托管实例的 Amazon ECS 任务联网

实例存储

Amazon ECS 托管实例支持配置附加到实例的 Amazon EBS 数据卷的大小。此存储由实例上运行的所有任务共享,可用于绑定挂载。可以在任务定义中使用 volumesmountPointvolumesFrom 参数的容器之间共享和挂载该卷。

卷是在创建实例期间附加的。在使用 storageConfiguration 参数创建 Amazon ECS 托管实例容量提供程序时,您可以指定卷的大小(以 GiB 为单位)。

{ ... "managedInstancesProvider": { "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRole", "instanceLaunchTemplate": { "ec2InstanceProfileArn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceProfile", "networkConfiguration": { "subnets": [ "subnet-abcdef01234567", "subnet-bcdefa98765432" ], "securityGroups": [ "sg-0123456789abcdef" ] }, "storageConfiguration": { "storageSizeinGiB" : 100 } } } ... }

此卷的最小大小为 30 GiB,最大大小为 16,384 GiB。默认情况下,此卷的大小为 80 GiB。

任务的拉取、压缩和未压缩容器映像存储在卷中。要确定任务必须用作绑定挂载的实例存储总量,必须从分配给任务的实例存储总量中减去容器映像使用的存储量。

附加到 Amazon ECS 托管实例的 Amazon EBS 卷的性能与相应的 Amazon EC2 实例的性能匹配,如《Amazon EC2 用户指南》中的 Amazon EBS 优化的实例文档所述。

您可以创建卷的快照,以便对安全问题进行取证分析或调试应用程序。有关创建 Amazon EBS 卷快照的更多信息,请参阅《Amazon EBS 用户指南》中的 Amazon EBS 快照。如果默认启用 Amazon EBS 加密,则卷默认使用指定用于加密的 Amazon KMS 密钥进行加密。有关默认加密的更多信息,请参阅《Amazon EBS 用户指南》中的默认启用 Amazon EBS 加密

除了使用附加到实例的数据卷之外,您还可以为在 Amazon ECS 托管实例上运行的每个任务配置数据卷。有关可用任务级存储选项的更多信息,请参阅 Amazon ECS 任务的存储选项

服务负载均衡

使用 Amazon ECS 托管实例的 Amazon ECS 服务可以配置为使用 Elastic Load Balancing 在服务中的任务之间均匀分配流量。

Amazon ECS 托管实例上的 Amazon ECS 服务支持应用程序负载均衡器、网络负载均衡器和网关负载均衡器类型。应用程序负载均衡器路由 HTTP/HTTPS(第 7 层)流量,而网络负载均衡器路由 TCP 或 UDP(第 4 层)流量。

当您为这些服务创建任何目标组时,必须选择 ip 而不是 instance 作为目标类型。这是因为使用 awsvpc 网络模式的任务与弹性网络接口相关联,而不是直接与 Amazon EC2 实例相关联。

监控和可观测性

Amazon ECS 托管实例通过 CloudWatch 指标和与可观测性工具的集成,提供全面的监控功能:

  • CloudWatch 指标:监控任务和实例级别的 CPU、内存、网络和存储利用率。

  • Container Insights:获取容器化应用程序的详细性能指标和日志。

  • 第三方集成:启用特权功能后,您可以运行需要提升的 Linux 权限的高级监控和可观测性解决方案。

定价和成本优化

使用 Amazon ECS 托管实例,您需要为运行任务的整个 Amazon EC2 实例付费。定价取决于为工作负载选择的实例类型。

Amazon ECS 托管实例提供了多个成本优化功能:

  • 多任务优化:通过在大小合适的实例上运行多个任务来最大限度地提高实例利用率。

您的计算和实例节省计划也适用于 Amazon ECS 托管实例工作负载。

服务配额

Amazon ECS 托管实例工作负载受您的 Amazon EC2 按需型实例服务配额约束。使用 Amazon ECS 托管实例的 Amazon ECS 服务受 Amazon ECS 服务配额约束。

有关服务配额的更多信息,请参阅:

迁移注意事项

对于大多数工作负载,迁移到 Amazon ECS 托管实例非常简单:

  • 从 Fargate:只需要更改和重新部署容量提供程序配置。使用平台版本 1.4.0 的现有任务定义完全兼容。

  • 从 EC2:与迁移到 Fargate 类似,但您可以继续使用 Amazon EC2 功能,例如特定实例类型。

在规划迁移时,请考虑以下事项:

  • 应用程序应容许 14 天的实例生命周期和计划维护时段。

  • 长时间运行的任务(超过 14 天)不适合 Amazon ECS 托管实例。

  • 不支持自定义 AMI:Amazon ECS 托管实例使用经过安全优化的 Amazon 托管式 AMI。

限制和注意事项

以下限制适用于 Amazon ECS 托管实例:

  • 自定义 AMI:AMI 由 Amazon 拥有和管理

  • 实例生命周期:每个实例的最长运行时间为 14 天,确保安全修补和合规性。

  • SSH 访问:出于安全考虑,不可用。请使用 Amazon ECS Exec 进行调试和故障排除。管理操作只能通过 Amazon ECS API 进行。

组织控制

某些组织控制可能会阻止 Amazon ECS 托管实例正常运行。如果出现这种情况,则必须更新这些控制,以允许 Amazon ECS 拥有代表您管理 EC2 实例所需的权限。

Amazon ECS 使用基础设施角色来启动支持 Amazon ECS 托管实例的 EC2 实例。此基础设施角色是在您的账户中创建的 IAM 角色,它允许 Amazon ECS 代表您管理 Amazon ECS 托管实例。服务控制策略(SCP)始终适用于使用基础设施角色执行的操作。这使得 SCP 能够禁止 Amazon ECS 托管实例操作。最常见的情况是使用 SCP 来限制可以启动的亚马逊机器映像(AMI)。要使 Amazon ECS 托管实例能够正常工作,请修改 SCP 以允许从 Amazon ECS 托管实例 AMI 账户启动 AMI。

您还可以使用 EC2 允许的 AMI 功能来限制其他账户中 AMI 的可见性。如果您使用此功能,则必须扩展映像标准,以还包含感兴趣区域中的 Amazon ECS 托管实例 AMI 账户。

用于阻止除 Amazon ECS 托管实例 AMI 之外的所有 AMI 的示例 SCP

除非 AMI 属于 us-west-2 或 us-east-1 的 Amazon ECS 托管实例 AMI 账户,否则以下 SCP 会阻止调用 ec2:RunInstances

注意

使用 ec2:Owner 上下文键。Amazon 拥有 Amazon ECS 托管实例 AMI 账户,此键的值将始终为 amazon。如果构建一个 SCP,允许当 ec2:Owneramazon 时启动 AMI,则将允许启动所有 Amazon 拥有的 AMI,而不仅限于 Amazon ECS 托管实例。

{ "Version":"2012-10-17", "Statement": [ { "Sid": "DenyAMI", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:*:ec2:*::image/ami-*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "187296253231", "260073348889" ] } } } ] }

Amazon ECS 托管实例 AMI 账户

因区域而异的 Amazon 账户托管 Amazon ECS 托管实例公有 AMI。

Amazon 区域 Account
af-south-1 070957084703
ap-east-1 587573215167
ap-northeast-1 679336465495
ap-northeast-2 309903600357
ap-northeast-3 384570461223
ap-south-1 062344138989
ap-south-2 624198668379
ap-southeast-1 832199679391
ap-southeast-2 552073033681
ap-southeast-3 368903466070
ap-southeast-4 696793786439
ap-southeast-5 003457290689
ap-southeast-6 465836752572
ap-southeast-7 622515864387
ca-central-1 853167153192
ca-west-1 899469777611
eu-central-1 832570432258
eu-central-2 041659148495
eu-north-1 851563870067
eu-south-1 766433696616
eu-south-2 003380494496
eu-west-1 986619735082
eu-west-2 591706807364
eu-west-3 108582616801
il-central-1 009537862704
me-central-1 540883425316
me-south-1 181438624895
mx-central-1 210749644920
sa-east-1 591338347621
us-east-1 260073348889
us-east-2 292185169523
us-west-1 187296253231
us-west-2 491085424538