

# 由 Amazon ECS Express Mode 服务创建的资源
<a name="express-service-work"></a>

Express Mode 服务通过提供合理的默认值和自动配置支持的 AWS 服务，降低了部署容器化应用程序的复杂性。Express Mode 服务不需要跨多个服务管理数百个配置参数，只需要容器映像、任务执行角色和基础设施角色即可开始使用。

Express Mode 服务简化了预置和配置 Amazon ECS 服务的过程，该服务将用于运行生产 Web 应用程序的首选基础设施捆绑在一起。Express Mode 服务会自动整合操作和配置最佳实践。将创建以下资源：
+ 具有 Fargate 容量提供程序的 ECS 默认集群（如果不存在）
+ 包含容器、日志记录和联网配置的任务定义
+ 具有金丝雀部署和自动扩缩的服务
+ 具有 HTTPS 侦听器、侦听器规则和目标组的应用程序负载均衡器
+ 具有最少所需入口的安全组
+ 用于自动扩缩和负载均衡的服务关联角色
+ Application Auto Scaling 可扩展目标和目标跟踪扩展策略。

  扩展策略根据需要增加或删除服务任务，将指标保持在指定的目标值或接近指定的目标值。除了将指标保持在目标值附近以外，目标跟踪扩展策略还会根据由于负载模式波动而造成的指标波动进行调节，并最大限度减少服务中运行的任务数发生快速波动的情况。
+ 特定于服务的日志组
+ 用于检测错误部署的指标警报
+ ACM 证书

使用默认值开始使用 Express Mode 服务，或者使用一组最少的参数配置应用程序。

## 集群默认值
<a name="express-service-cluster-defaults"></a>

可在 Express Mode 中针对集群配置以下默认值：
+ clusterName：使用 `default` 集群。

  您可以通过使用控制台中的**其他配置**选项或指定 `create-express-gateway-service --cluster` 来自定义此选项。

以下默认值由 Express Mode 设置，但可以直接在集群中更新。
+ capacityProviders：["FARGATE"]：使用 Fargate

## 任务定义默认值
<a name="express-service-task-defaults"></a>

可在 Express Mode 中针对任务定义配置以下默认值：
+ cpu：1024：分配给任务的 1 个 vCPU 单元

  您可以通过使用控制台中的**其他配置**选项或运行 `create-express-gateway-service --cpu` 来自定义此选项。
+ 内存：2048：分配给任务的 2 GB 内存

  您可以通过使用控制台中的**其他配置**选项或运行 `create-express-gateway-service --memory` 来自定义此选项。

以下默认值由 Express Mode 设置，但可以直接在任务定义中更新。
+ networkMode：“awsvpc”：使用 `awsvpc` 联网模式
+ operatingSystemFamily：“LINUX”：在 Linux 操作系统上运行
+ cpuArchitecture：“X86\$164”：使用 x86\$164 处理器架构
+ requiresCompatibilities：["FARGATE"]：与 Fargate 启动类型兼容
+ platformVersion：“LATEST”：使用最新的 Fargate 平台版本

## 容器定义默认值
<a name="express-service-container-defaults"></a>

可在 Express Mode 中针对容器配置以下默认值：
+ port：80：容器流量的默认端口

以下默认值由 Express Mode 设置，但可以直接在任务定义：容器定义中更新。
+ essential：true：容器被标记为任务运行状况必需
+ protocol：“tcp”：负载均衡器通信的默认协议
+ name：“Main”：主容器的默认名称

  更改默认容器的名称可能会影响 Express Mode 对服务进行后续更新的能力。如果您打算继续使用 Express Mode 控制台或 API，则不建议这样做
+ versionConsistency：enabled：将映像标签解析为摘要 ID 以实现一致部署
+ initProcessEnabled：true：启用 Docker init 进程支持。
+ stopTimeout：30 秒：SIGTERM 和 SIGKILL 信号之间的时间。

## 日志记录默认值
<a name="express-service-logging-defaults"></a>

可在 Express Mode 中针对 CloudWatch Logs 配置以下默认值：
+ awslogs-group：“/aws/ecs/<cluster>/<name>-\$1\$1\$1\$1”：源自集群的日志组名称和服务名称

  您可以通过使用控制台中的**其他配置**选项或运行 `create-express-gateway-service --primary-container “awsLogsConfiguration”=[{“logGroup”=“/my/logGroup/”}]` 来自定义此选项。
+ awslogs-stream-prefix：“ecs”：日志流名称的前缀

  您可以通过使用控制台中的**其他配置**选项或运行 `create-express-gateway-service --primary-container “awsLogsConfiguration”=[{“logStreamPrefix”=“myprefix”}]` 来自定义此选项。

以下默认值由 Express Mode 设置，但可以直接在任务定义：日志配置中更新：
+ logDriver：“awslogs”：使用 CloudWatch Logs
+ awslogs-region：当前区域：使用与 Express Mode 服务相同的区域
+ mode：“non-blocking”：日志记录模式设置为 non-blocking
+ max-buffer-size：“25m”：日志写入的最大缓冲区大小

## 服务默认值
<a name="express-service-service-defaults"></a>

可在 Express Mode 中针对 Amazon ECS 服务配置以下默认值：
+ serviceName：Express Mode 服务 → 名称：服务的名称（客户提供或源自映像名称）

  名称只能在创建时配置，无法在更新时进行配置。
+ cluster：Express Mode 服务 → 集群：此服务的 ECS 集群（客户提供或默认）

  集群只能在创建时配置，无法在更新时进行配置。
+ desiredCount：Express Mode 服务 → MinTasks：所需的服务计数（默认值为 1）

  您可以通过使用控制台中的**其他配置**选项或运行 `create-express-gateway-service --scaling-target ‘{“minTaskCount”=3}',` 来自定义此选项
+ tags：用于 AWS 标记的 Express Mode 服务标签（客户提供）

  您可以通过使用控制台中的**其他配置**选项或运行 `create-express-gateway-service --tags` 来自定义此选项。标签只能在创建新资源时添加。

以下默认值由 Express Mode 设置，但可以直接在 Amazon ECS 服务中更新：
+ availabilityZoneRebalancing：true：启用自动可用区重新平衡
+ CapacityProviderStrategy：\$1"base": 1, "capacityProvider": "FARGATE", "weight": 1\$1：使用 Fargate 获取计算容量
+ deploymentConfiguration：默认为金丝雀：Express Mode 服务使用金丝雀部署

  请注意，无法在 Express Mode 服务上更新部署策略。
+ enableECSManagedTags：true：启用 ECS 管理的资源标记
+ healthCheckGracePeriodSeconds：300：计划程序查看 ELB 或 Lattice 运行状况检查之前的宽限期（与 ELB 运行状况检查宽限期默认值一致）
+ launchType：<未设置>：使用容量提供程序 
+ loadBalancers：由 ECS 处理的负载均衡器配置

  请注意，无法在 Express Mode 服务上更新负载均衡器配置。
+ placementStrategy：未设置：启动时使用 Fargate（应始终为 AZ Spread）
+ platformVersion：LATEST：Fargate 平台版本（硬编码为 LATEST）
+ propagateTags：“SERVICE”：将标签从服务传播到任务
+ schedulingStrategy：“REPLICA”：Express Mode 服务是 REPLICA 服务
+ taskDefinition：已创建 Express Mode 服务：要使用的任务定义（由 Express Mode 服务提供）

## 网络配置默认值
<a name="express-service-network-defaults"></a>

可在 Express Mode 中针对 Amazon ECS 服务：网络配置配置以下默认值：
+ networkConfiguration.Subnets：如果未提供任何子网，Express Mode 将使用默认 VPC 中的默认公有子网。

  默认 VPC 必须至少有两个公有子网，位于至少两个可用区中，每个子网的每个分配的 CIDR 数据块至少有 8 个可用 IP。

  如果您提供自定义公有子网，Express Mode 将为您的任务预置面向互联网的 ALB 并启用 assignPublicIP。如果您提供私有子网（路由表中没有互联网网关的子网），Express Mode 将预置内部 ALB。

  如果您指定子网，则 VPC 的第一个 Express Mode 服务将定义与该 VPC 面向互联网的负载均衡器或内部负载均衡器关联的子网。在同一 VPC 中启动的后续 Express Mode 服务的子网必须与负载均衡器支持的可用区匹配。因此，我们建议使用来自所有可用区的子网创建 Express Mode 服务。
+ networkConfiguration.SecurityGroups：如果未提供任何安全组，则 Express Mode 会同时创建服务安全组和负载均衡器安全组

  服务安全组允许流向公共互联网的出站流量，但这可能会受到限制，具体取决于您的联网的其他方面，如子网配置。

  负载均衡器安全组 负载均衡器安全组允许 HTTPS 解析的入站流量以及通过您指定的容器端口（默认值为 80）流向服务安全组的出站流量。将自动更新以匹配您的 Express Mode 创建或更新调用中提供的容器端口。

  您可以通过使用控制台中的**其他配置**选项或运行 `create-express-gateway-service --network-configuration '{"securityGroup": ["sg-xxxxxxx"]}'` 来自定义此选项。当您提供安全组时，则您正在为您的服务提供额外的入口路径。

以下默认值由 Express Mode 设置，但可以直接在 Amazon ECS 服务：网络配置中更新：
+ assignPublicIp：基于子网类型：为公有子网启用，确保默认 VPC 的用户能够访问公共互联网，默认情况下，我们为每个任务启用公有 IP。如果您提供的是私有子网，则这将被禁用，如果您的任务需要访问互联网，则您负责配置 NAT 网关。

## IAM 角色默认值
<a name="express-service-iam-defaults"></a>

可对 Express Mode 服务配置以下 IAM 角色，并在必要时自动创建服务关联角色。
+ executionRoleArn：任务执行角色（必需参数）

  虽然所需的权限已包含在托管策略中，但还可以附加其他策略和权限。有关更多详细信息，请参阅《AWS 托管式策略参考指南》中的 [AmazonECSTaskExecutionRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonECSTaskExecutionRolePolicy.html)
+ infrastructureRoleArn：Express Gateway Services 的基础设施角色（必需参数）

  虽然所需的权限已包含在托管策略中，但还可以附加其他策略和权限。有关更多详细信息，请参阅《AWS 托管式策略参考指南》中的 [AmazonECSInfrastructureRoleforExpressGatewayServices](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonECSInfrastructureRoleforExpressGatewayServices.html) 托管式策略
+ taskRoleArn：来自容器应用程序代码的调用的任务角色（可选）

  您可以通过使用控制台中的**其他配置**选项或运行 `create-express-gateway-service --task-role-arn` 来自定义此选项。

  在创建或更新 Express Mode 服务之前，您必须先创建新的 IAM 角色。

以下 IAM 角色由 Express Mode 自动配置。
+ ecsServiceRoleForECS：允许 Amazon ECS 管理您的集群
+ AWSServiceRoleForElasticLoadBalancing：代表您调用其他 AWS 服务：由 Elastic Load Balancing 自动创建 
+ AWSServiceRoleForApplicationAutoScaling\$1ECSService：代表您调用其他 AWS 服务：由 Application Auto Scaling 自动创建

## Application Auto Scaling 默认值
<a name="express-service-autoscaling-defaults"></a>

可以在 Express Mode 中配置以下 Application Auto Scaling 设置：
+ autoScalingTargetValue：60：用于扩展的目标 CPU 利用率百分比
+ autoScalingMetric：“CPUUtilization”：用于自动扩缩决策的指标
+ desiredMinTaskCount：1：需要维护的最小任务数
+ desiredMaxTaskCount：20：要扩展到的最大任务数（可以增加或减少）

可以直接在 Application Auto Scaling 中配置以下设置：
+ policyType：“TargetTrackingScaling”：使用目标跟踪扩展策略
+ disableScaleIn：false：允许在需求减少时缩减

## 应用程序扩展目标默认值
<a name="express-service-scaling-target-defaults"></a>

Application Auto Scaling 目标定义自动扩缩操作的可扩展资源和容量限制。可以在 Express Mode 中修改以下内容：
+ MaxCapacity：Express Mode 服务 → MaxTasks：服务将纵向扩展到的最大任务数（默认值来自 CreateLoadBalancedService 或由客户提供）
+ MinCapacity：Express Mode 服务 → MinTasks：服务将缩减到的最少任务数（默认值来自 CreateLoadBalancedService 或由客户提供）
+ ScalableDimension：ecs:service:DesiredCount：要扩展的属性
+ Tags：源自 CreateLoadBalancedService 中传递的标签：此资源的资源标签

可以在 Application Auto Scaling 可扩展目标中修改以下默认值：
+ DynamicScalingInSuspended：false：指明横向缩减是否已暂停
+ DynamicScalingOutSuspended：false：指明横向扩展是否已暂停
+ ScheduledScalingSuspended：false：指明计划的扩展是否已暂停

## 应用程序扩展策略默认值
<a name="express-service-scaling-policy-defaults"></a>

扩展策略采用目标跟踪算法，监控 CPU 利用率并调整任务计数，以保持最佳性能。可以从 Express Mode 中修改以下内容：
+ TargetValue：60%：跟踪策略的目标值（Express Mode 服务 → 扩展目标值）
+ PredefinedMetricType：ECSServiceAverageCPUUtilization：正在跟踪的指标的名称类型（Express Mode 服务 → 缩放指标）

  Express Mode 提供平均 CPU 利用率、平均内存利用率和每个目标的请求计数的扩展指标。每个目标的请求计数来自应用程序负载均衡器，可以设置为每个目标每秒 65536 个请求，即应用程序负载均衡器目标组中的 Amazon ECS 服务。

以下默认值由 Express Mode 设置，但可以在 Application Auto Scaling 策略中更改：
+ PolicyName：<ServiceName><"TargetMetric">：此扩展策略的名称（源自 ECS 服务名称和目标指标）
+ PolicyType：TargetTrackingScaling：正在执行的扩展的类型（预定义的默认值）
+ ScalableDimension：“ecs:service:DesiredCount”：要缩放的属性（预定义的默认值）
+ DisableScaleIn：false：指明是否禁用横向缩减

## 应用程序负载均衡器默认值
<a name="express-service-alb-defaults"></a>

可以在 Express Mode 中配置以下应用程序负载均衡器默认值：
+ scheme：取决于子网：如果提供了公有子网，则使用公有 IP 地址创建面向互联网的负载均衡器。如果提供了私有子网，则使用私有 IP 地址创建内部负载均衡器。
+ ip-address-type：取决于子网：如果地址为 IPv4，则创建仅 IPv4 的应用程序负载均衡器。当存在启用了 IPv6 的子网时，将创建双堆栈应用程序负载均衡器。请注意，如果存在启用了 IPv6 的子网，则 VPC 中的第一个 Express Mode 服务将定义该 VPC 的内部或面向互联网的负载均衡器。因此，我们建议您先创建仅 IPv6 子网，或者在新 VPC 中创建子网。

以下默认值是在 Express Mode 中设置的，可以在应用程序负载均衡器中进行配置：
+ desync-mitigation-mode：关闭：HTTP 异步缓解已禁用
+ access-logs.enabled：false：访问日志记录已禁用
+ listener-configurations.protocol：https：使用 HTTPS 协议进行安全通信。
+ listener-configurations.port：443：侦听标准 HTTPS 端口
+ listener-configurations.rule-type：host-header：基于主机标头规则路由流量

## 目标组默认值
<a name="express-service-targetgroup-defaults"></a>

可以在 Express Mode 中配置以下 Amazon EC2 目标组默认值：
+ health-check-path：（默认值为“/”）Express Mode 服务运行状况检查路径：运行状况检查请求的 URL 路径
+ port：（默认值 80）：目标接收流量的端口
+ health-check-port：（默认值 80）：运行状况检查请求的端口

以下默认值由 Express Mode 设置，可以在 Amazon EC2 目标组中进行配置：
+ protocol：HTTP：用于将流量路由到目标的协议
+ protocol-version：HTTP1：用于通信的 HTTP 协议版本
+ vpc-id：默认值为默认 VPC：目标组的 Virtual Private Cloud 标识符，但将派生自提供的子网
+ health-check-protocol：与协议相同：运行状况检查请求的协议
+ health-check-enabled：始终启用：自动启用运行状况检查
+ health-check-interval-seconds：30：各个目标的运行状况检查的间隔时间
+ health-check-timeout-seconds：5：运行状况检查响应的超时持续时间
+ healthy-threshold-count：5：正常状态需要连续成功的运行状况检查
+ unhealthy-threshold-count：2：不正常状态需要连续失败的运行状况检查
+ target-type：ip：目标通过 IP 地址注册
+ ip-address-type：ipv4：使用 IPv4 地址进行目标注册

## 资源共享和成本优化
<a name="express-service-resource-sharing"></a>

Express Mode 服务在可能的情况下自动共享资源，以优化成本：
+ **负载均衡器共享**：同一 VPC 中的最多 25 个 Express Mode 服务可以共享一个应用程序负载均衡器。Express Mode 将根据需要预置其他应用程序负载均衡器，具体取决于您预置的 Express Mode 服务的数量。而且，随着您减少 VPC 中的 Express Mode 服务数量，Express Mode 还将取消预置未使用的应用程序负载均衡器。当您部署更多 Express Mode 服务时，此共享会降低每个应用程序的有效成本。
+ **集群共享**：Express Mode 服务可以在 Amazon ECS 集群中分组在一起。Express Mode 服务还可以与非 Express Mode 管理的 Amazon ECS 服务共享 Amazon ECS 集群。

