AWS Outposts 上的 Amazon Elastic Container Service
AWS Outposts 支持本地设施中的本机 AWS 服务、基础设施和操作模型。在 AWS Outposts Outposts 环境中,您可以使用与 AWS 云中相同的 AWS API、工具和基础设施。AWS Outposts 上的 Amazon ECS 非常适合需要靠近本地数据和应用程序运行的低延迟工作负载。有关 AWS Outposts 的更多信息,请参阅《AWS Outposts 用户指南》。
先决条件
以下是使用 AWS Outposts 上的 Amazon ECS 的先决条件:
-
您必须在本地数据中心中安装并配置了 AWS Outposts。
-
AWS Outposts 与其 AWS 区域之间必须具有可靠的网络连接。
-
您的 AWS Outposts 中必须有足够的实例类型容量。
-
所有 Amazon ECS 容器实例必须具有 Amazon ECS 容器代理 1.33.0 或更高版本。
限制
以下是使用 AWS Outposts 上的 Amazon ECS 的限制:
-
Amazon Elastic Container Registry、AWS Identity and Access Management、网络负载均衡器和 Amazon Route 53 在 AWS 区域而不是 AWS Outposts 上运行。这将增加这些服务和容器之间的延迟。
-
AWS Fargate 在 AWS Outposts 上不可用。
网络连接注意事项
以下是 AWS Outposts 的网络连接注意事项:
-
如果您的 AWS Outposts 与其 AWS 区域之间的网络连接丢失,您的集群将继续运行。但是,在恢复连接之前,您无法创建新集群或对现有集群执行新操作。如果实例出现故障,则不会自动替换该实例。CloudWatch Logs 代理将无法更新日志和事件数据。
-
建议在 AWS Outposts 与其 AWS 区域之间提供可靠且高度可用的低延迟连接。
在 AWS Outposts 上创建 Amazon ECS 集群
在 AWS Outposts 上创建 Amazon ECS 集群类似于在 AWS 云内创建 Amazon ECS 集群。在 AWS Outposts 上创建 Amazon ECS 集群时,您必须指定与您的 AWS Outposts 关联的子网。
AWS Outposts 是 AWS 区域的扩展,您可以在账户中扩展 Amazon VPC 以跨越多个可用区和所有关联的 AWS Outposts。在配置 AWS Outposts 时,您将一个子网与它相关联,以将区域 VPC 环境扩展到本地设施。AWS Outposts 上的实例显示为区域 VPC 的一部分,类似于具有关联子网的可用区。

AWS CLI
要使用 AWS CLI 在 AWS Outposts 上创建 Amazon ECS 集群,请指定与您的 AWS Outposts 关联的安全组和子网 。
创建与您的 AWS Outposts 关联的子网。
aws ec2 create-subnet \ --cidr-block
10.0.3.0/24
\ --vpc-idvpc-xxxxxxxx
\ --outpost-arn arn:aws:outposts:us-west-2
:123456789012:outpost/op-xxxxxxxxxxxxxxxx
\ --availability-zone-idusw2-az1
以下示例在 AWS Outposts 上创建一个 Amazon ECS 集群。
-
创建具有 AWS Outposts 权限的角色和策略。
role-policy.json
文件是包含资源效果和操作的策略文档。有关文件格式的信息,请参阅 IAM API 参考中的 PutRolePolicyaws iam create-role –-role-name
ecsRole
\ --assume-role-policy-document file://ecs-policy.json aws iam put-role-policy --role-nameecsRole
--policy-nameecsRolePolicy
\ --policy-document file://role-policy.json -
在 AWS Outposts 创建具有权限的 IAM 实例配置文件。
aws iam create-instance-profile --instance-profile-name
outpost
aws iam add-role-to-instance-profile --instance-profile-nameoutpost
\ --role-nameecsRole
-
创建 VPC。
aws ec2 create-vpc --cidr-block
10.0.0.0/16
-
为容器实例创建安全组,为 AWS Outposts 指定适合的 CIDR 范围。(此步骤不同于 AWS Outposts。)
aws ec2 create-security-group --group-name
MyOutpostSG
aws ec2 authorize-security-group-ingress --group-nameMyOutpostSG
--protocol tcp \ --port 22 --cidr10.0.3.0/24
aws ec2 authorize-security-group-ingress --group-nameMyOutpostSG
--protocol tcp \ --port 80 --cidr10.0.3.0/24
-
创建集群。
-
定义 Amazon ECS 容器代理环境变量以将实例启动到上一步创建的集群中,并定义您想添加的所有标签以帮助识别集群(例如,
Outpost
表示集群用于 Outpost)。#! /bin/bash cat << ‘EOF’ >> /etc/ecs/ecs.config ECS_CLUSTER=MyCluster ECS_IMAGE_PULL_BEHAVIOR=prefer-cached ECS_CONTAINER_INSTANCE_TAGS={“environment”: ”Outpost”} EOF
注意 为了避免因从区域中的 Amazon ECR 拉取容器映像而导致的延迟,请使用映像缓存。为此,每次运行任务时,请将 Amazon ECS 代理配置为默认使用实例本身的缓存映像,方法是将
ECS_IMAGE_PULL_BEHAVIOR
设置为prefer-cached
。 -
创建容器实例,指定该实例 AWS Outposts 应运行的VPC和子网以及 AWS Outposts 上可用的实例类型。(此步骤不同于 AWS Outposts。)
userdata.txt
文件包含用户数据,实例可使用这些数据执行常见的自动配置任务,甚至是在实例启动后运行脚本。有关 API 调用的文件信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 启动时对 Linux 实例运行命令。aws ec2 run-instances --count 1 --image-id
ami-xxxxxxxx
--instance-typec5.large
\ --key-nameaws-outpost-key
–-subnet-idsubnet-xxxxxxxxxxxxxxxxx
\ --iam-instance-profile Nameoutpost
--security-group-idsg-xxxxxx
\ --associate-public-ip-address --user-datafile://userdata.txt
注意 向集群添加其他实例时,也使用此命令。集群中部署的任何容器都将置于该特定 AWS Outposts 上。
-
注册您的任务定义。使用以下命令并将
ecs-task.json
替换为您的任务定义名称。aws ecs register-task-definition --cli-input-json file://
ecs-task.json
-
运行任务或创建服务。