View a markdown version of this page

使用 Amazon CLI 创建您的第一个 Express Mode 服务 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon CLI 创建您的第一个 Express Mode 服务

本教程介绍如何使用 Amazon Amazon CLI 创建 Express Mode 服务应用程序。您将部署一个简单的 Web 应用程序来演示 Express Mode 服务的核心功能。

先决条件

在开始之前,请确保您满足以下条件:

  • 具有适当权限的 Amazon 账户

  • 已安装并配置 Amazon Amazon CLI

  • 存储在 Amazon ECR 或私有注册表中的容器映像

  • 一个默认 VPC,其公有子网位于您创建服务所在的 Amazon 区域。默认情况下,Express Mode 服务在您账户的默认 VPC 和公共子网中创建面向 Internet 的负载均衡器。如果您的账户没有默认 VPC,则在开始之前创建一个,或在创建服务时指定您自己的子网:有关更多信息,请参阅 Amazon VPC 用户指南中的默认 VPC

步骤 1:创建 IAM 角色

Express Mode 服务需要两个 IAM 角色。任务执行角色允许 Amazon ECS 代表您拉取容器映像并写入日志。请使用下面的策略来创建任务执行角色和基础设施角色:

#Create the roles with ECS trust policies aws iam create-role --role-name ecsTaskExecutionRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }' aws iam create-role --role-name ecsInfrastructureRoleForExpressServices \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessInfrastructureForECSExpressServices", "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
#Attach the AWS managed policies aws iam attach-role-policy --role-name ecsTaskExecutionRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy aws iam attach-role-policy --role-name ecsInfrastructureRoleForExpressServices \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRoleforExpressGatewayServices

有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色

注意

IAM 角色最终会保持一致,因此新创建的角色可能无法立即使用。如果在创建这些角色后第一次 create-express-gateway-service 调用失败,Unable to assume the service linked role(或出现类似的代入角色错误),请稍等片刻(大约一分钟)让角色传播,然后重试该命令。

步骤 2:创建您的第一个 Express Mode 服务应用程序

使用所需的最少参数创建 Express Mode 服务应用程序:

aws ecs create-express-gateway-service \ --primary-container "image"="public.ecr.aws/nginx/nginx:latest" \ --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \ --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \ --monitor-resources

此命令会创建具有以下内容的 Express Mode 服务应用程序:

  • 根据映像名称生成的唯一服务名称

  • 1 个 vCPU 和 2 GB 内存

  • 用于 HTTPS 流量的端口 80

  • 基于 CPU 利用率自动扩缩

  • 默认 VPC 和公有子网中面向互联网的应用程序负载均衡器

  • 此服务的唯一 URL,格式为 servicename.ecs.region.on.aws

该命令会在资源预置时持续监控资源并返回状态。服务部署完成后,应用程序 URL 即可接收流量。当您中断监控时,系统会返回有关已创建服务的信息,包括服务 ARN 和 URL:

{ "service": { "cluster": "arn:aws:ecs:region:123456789012:cluster/default", "serviceName": "nginx-1234", "serviceArn": "arn:aws:ecs:region:123456789012:service/default/nginx-1234", "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices", "status": { "statusCode": "ACTIVE" }, "createdAt": "UNIXTIMESTAMP" } }

步骤 3:创建具有自定义设置的 Express Mode 服务应用程序

您可以通过指定其他参数来自定义 Express Mode 服务应用程序:

aws ecs create-express-gateway-service \ --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \ --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \ --primary-container '{"image":"123456789012.dkr.ecr.region.amazonaws.com/my-app:latest","containerPort":8080,"environment":[{"name":"ENV","value":"production"},{"name":"DEBUG","value":"false"}]}' \ --service-name "my-web-app" \ --cpu 2 \ --memory 4 \ --health-check-path "/health" \ --scaling-target '{"minTaskCount":3,"maxTaskCount":100}' \ --monitor-resources

这将创建具有以下内容的应用程序:

  • 自定义名称“my-web-app”

  • 2 个 vCPU 和 4 GB 内存

  • 用于应用程序流量的端口 8080

  • 自定义运行状况检查端点

  • 环境变量

  • 最少 3 个任务、最多 100 个任务用于自动扩缩

使用您自己的任务定义创建新的 Express Mode 服务

您还可以使用您自己的任务定义创建 Express Mode 服务。使用您自己的任务定义,您可以完全控制任务级配置。Express Mode 继续管理基础设施,包括负载均衡、自动扩缩和金丝雀部署。

以下 Amazon Command Line Interface (AmazonAmazon CLI) 命令使用自定义任务定义创建 Express Mode 服务:

aws ecs create-express-gateway-service \ --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \ --task-definition-arn arn:aws:ecs:us-west-2:123456789012:task-definition/my-td:3 \ --health-check-path "/health" \ --monitor-resources

您的任务定义必须符合以下要求:

  • 名为 Main 的容器

  • Main 容器必须有一个 TCP 端口映射,其中包含容器端口和端口名称

  • 任务定义的兼容性中必须有 FARGATE

注意

不能在同一 API 调用中使用 primaryContainerexecutionRoleArntaskRoleArncpumemory 指定 taskDefinitionArn 参数。Express Mode 从提供的任务定义中派生这些值。

步骤 4:监控部署

--monitor-resources 标志适用于对 Express Mode 服务的任何创建、更新或删除调用。但此外,除了变异操作之外,您还可以随时监控服务中的资源。部署时间可能因需要预置的资源而异。一旦状态变为 ACTIVE,您的应用程序即可开始接收流量。

aws ecs monitor-express-gateway-service --service-arn arn:aws:ecs:region:123456789012:service/default/app-23d97h88

您还可以查看 Express Mode 服务应用程序的当前配置和状态:

aws ecs describe-express-gateway-service --service-arn arn:aws:ecs:region:123456789012:service/default/app-23d97h88

步骤 5:访问应用程序

当 Express Mode 服务应用程序处于活动状态时,请使用提供的 URL 访问该应用程序。URL 格式如下:

https://<service-name>.ecs.<region>.on.aws/

例如:

https://app-23d97h88.ecs.us-west-2.on.aws/

您的应用程序当前正在运行且具有以下功能:

  • 自动 SSL/TLS 终止

  • 跨多个可用区的负载均衡

  • 基于 CPU 利用率自动扩缩

  • CloudWatch 日志记录和监控

  • 针对未来更新的 5XX 回滚警报和金丝雀部署