AWS Outposts 上的 Amazon Elastic Container Service - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS Outposts 上的 Amazon Elastic Container Service

AWS Outposts 在本地设施中启用本机 AWS 服务、基础设施和操作模型。在 AWS Outposts 环境中,您可以使用与 AWS 云中所用相同的 AWS API、工具和基础设施。AWS Outposts 上的 Amazon ECS 非常适合需要靠近本地数据和应用程序运行的低延迟工作负载。有关 AWS Outposts 的更多信息,请参阅 AWS Outpost 用户指南

先决条件

以下是使用 AWS Outposts 上的 Amazon ECS 的先决条件:

  • 您必须已在本地数据中心中安装并配置了 Outpost。

  • Outpost 与其 AWS 区域之间必须具有可靠的网络连接。

  • 您的 Outpost 中必须有足够的实例类型容量。

  • 所有 Amazon ECS 容器实例必须具有 Amazon ECS 容器代理 1.33.0 或更高版本。

限制

以下是使用 Outpost 上的 Amazon ECS 的限制:

  • Amazon Elastic Container Registry、AWS Identity and Access Management、应用程序负载均衡器、网络负载均衡器、传统负载均衡器 和 Amazon Route 53 在 AWS 区域中运行,而不是在 Outpost 上运行。这将增加这些服务和容器之间的延迟。

  • AWS Fargate 在 AWS Outposts 上不可用。

网络连接注意事项

以下是 AWS Outposts 的网络连接注意事项:

  • 如果 Outpost 与其 AWS 区域之间的网络连接丢失,集群将继续运行。但是,在恢复连接之前,您无法创建新集群或对现有集群执行新操作。如果实例出现故障,系统不会自动替换该实例。CloudWatch Logs 代理将无法更新日志和事件数据。

  • 建议在 Outpost 与其 AWS 区域之间提供可靠且高度可用的低延迟连接。

在 Outpost 上创建 Amazon ECS 集群

在 Outpost 上创建 Amazon ECS 集群类似于在 AWS 云中创建 Amazon ECS 集群。在 Outpost 上创建 Amazon ECS 集群时,您必须指定与您的 Outpost 关联的子网。

Outpost 是 AWS 区域的扩展,您可以在账户中扩展 Amazon VPC 以跨越多个可用区和所有关联的 Outpost。在配置 Outpost 时,您将一个子网与它相关联,以将区域 VPC 环境扩展到本地设施。Outpost 上的实例显示为区域 VPC 的一部分,类似于具有关联子网的可用区。

AWS CLI

要使用 AWS CLI 在 Outpost 上创建 Amazon ECS 集群,请指定与您的 Outpost 关联的安全组和子网。

创建与您的 Outpost 关联的子网。

aws ec2 create-subnet \ --cidr-block 10.0.3.0/24 \ --vpc-id vpc-xxxxxxxx \ --outpost-arn arn:aws:outposts:us-west-2:123456789012:outpost/op-xxxxxxxxxxxxxxxx \ --availability-zone-id usw2-az1

以下示例在 Outpost 上创建一个 Amazon ECS 集群。

  1. 创建具有 Outpost 权限的角色和策略。

    aws iam create-role –-role-name ecsRole \ –assume-role-policy-document file://ecs-policy.json aws iam put-role-policy –-role-name ecsRole –-policy-name ecsRolePolicy \ –-policy-document file://role-policy.json
  2. 创建具有 Outpost 权限的 IAM 实例配置文件。

    aws iam create-instance-profile --instance-profile-name outpost aws iam add-role-to-instance-profile --instance-profile-name outpost \ --role-name ecsRole
  3. 创建 VPC。

    aws ec2 create-vpc --cidr-block 10.0.0.0/16
  4. 为容器实例创建安全组,为 Outpost 指定适合的 CIDR 范围。(AWS Outposts 的这个步骤不一样。)

    aws ec2 create-security-group --group-name MyOutpostSG aws ec2 authorize-security-group-ingress --group-name MyOutpostSG --protocol tcp \ --port 22 --cidr 10.0.3.0/24 aws ec2 authorize-security-group-ingress -~-~group-name MyOutpostSG -~-~protocol tcp \ --port 80 --cidr 10.0.3.0/24
  5. 创建集群。

  6. 定义 Amazon ECS 容器代理环境变量以将实例启动到上一步创建的集群中,并定义所有必要的标签。

    #! /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

  7. 创建容器实例,指定要在其中运行此实例的 Outpost 的 VPC 和子网以及 Outpost 上可用的实例类型。(AWS Outposts 的这个步骤不一样。)

    aws ec2 run-instances --count 1 --image-id ami-xxxxxxxx --instance-type c5.large \ --key-name aws-outpost-key –-subnet-id subnet-xxxxxxxxxxxxxxxxx \ --iam-instance-profile Name outpost --security-group-id sg-xxxxxx \ --associate-public-ip-address --user-data file://userdata.txt
    注意

    向集群添加其他实例时,也使用此命令。集群中部署的任何容器都将置于该特定 Outpost 上。

  8. 注册任务定义。

    aws ecs register-task-definition -~-~cli-input-json file://ecs-task.json
  9. 运行任务或创建服务。

    Run the task
    aws ecs run-task --cluster mycluster --count 1 --task-definition outpost-app:1
    Create the service
    aws ecs create-service –-cluster mycluster –-service-name outpost-service \ –-task-definition outpost-app:1 –-desired-count 1