

# Amazon ECS Express Mode 服务的最佳实践
<a name="express-service-best-practices"></a>

了解在生产环境中有效使用 Express Mode 服务的最佳实践和建议。

## 安全最佳实践
<a name="express-service-best-practices-security"></a>

### 密钥管理
<a name="express-service-secrets-management"></a>
+ **使用 Secrets Manager 获取密钥**：将敏感数据存储在 Secrets Manager 中（例如私有存储库或数据库凭证）。

  有关 Secrets Manager 最佳实践的更多信息，请参阅《Secrets Manager 用户指南》**中的 [Secrets Manager 最佳实践](secretsmanager/latest/userguide/best-practices.html)
+ **启用静态加密**：确保存储在 AWS 服务中的密钥都经过加密。

  使用 Secrets Manager 等服务，您可以使用 AWS 管理的密钥或客户提供的密钥进行加密。
+ **实现密钥轮换**：对数据库密码和 API 密钥使用自动轮换。

  使用 Secrets Manager 等服务可以管理 Amazon Aurora 和 Amazon RDS 等服务的密钥轮换

在 Express Mode 服务中使用密钥的示例：

```
aws ecs update-express-gateway-service \
    --primary-container \
        ‘{“environment”=[{“name”=“DB_PASSWORD”,”value”=“arn:aws:secretsmanager:us-west-2:123456789012:secret:prod/db/password”}, \
        {“name”=“API_KEY”,”value”=“arn:aws:ssm:us-west-2:123456789012:parameter/prod/api-key”}]}’ \
```

### 网络安全
<a name="express-service-network-security"></a>
+ **对敏感应用程序使用私有子网**：将不需要直接访问互联网的应用程序部署在私有子网中。

  有关推荐架构的更多信息，请参阅[将 Amazon ECS 应用程序连接到互联网](AmazonECS/latest/developerguide/networking-outbound.html)。
+ **将安全组配置为最低限度**：将入站和出站流量限制为仅限必要的端口和源。

  要限制 Express Mode 服务安全组的出站流量，您可以通过修改出站规则直接在 Amazon EC2 安全组控制台中进行编辑，或使用以下命令：

  ```
                      
  aws ec2 authorize-security-group-egress
      --group-id sg-xxxxxxxx \
      --protocol tcp \ 
      --port 443 \ 
      --cidr 0.0.0.0/0
  
  aws ec2 revoke-security-group-egress
      --group-id sg-xxxxxxxx \
      --protocol tcp \
      --port 443 \ 
      --cidr 0.0.0.0/0
  ```
+ **启用 Amazon VPC 流日志**：监控网络流量以进行安全分析和故障排除。

  您可以在 VPC 子网控制台中为 Express Mode 应用程序使用的每个子网启用此功能，或者使用 ` aws ec2 create-flow-logs --resource-ids subnet-xxx`
+ **将 AWS WAF 用于 Web 应用程序**：防范常见的 Web 漏洞利用和攻击。

  您可以通过创建 Web ACL，然后将其与 Express Mode 服务使用的应用程序负载均衡器关联来启用此功能。在控制台中，在 WAF & Shield Service 中创建 Web ACL 并关联到您的应用程序负载均衡器。或者，使用 `aws wafv2 create-web-acl` 和 `aws wafv2 associate-web-acl --resource-arn <alb>`。

## 性能和计算优化
<a name="express-service-performance-best-practices"></a>

### 资源大小调整
<a name="express-service-resource-sizing"></a>
+ **适当调整 CPU 和内存大小**：监控应用程序性能，并根据实际使用模式调整 CPU 和内存分配。

  AWS Compute Optimizer 可针对 Amazon ECS 任务和容器大小生成建议。有关更多信息，请参阅《AWS Compute Optimizer 用户指南》**中的[什么是 AWS Compute Optimizer？](https://docs.aws.amazon.com/compute-optimizer/latest/ug/what-is-compute-optimizer.html)。
+ **对应用程序进行性能测试**：要确保您的应用程序大规模运行并采用给定的扩展阈值和资源分配，请执行负载测试。

### 自动扩缩配置
<a name="express-service-auto-scaling"></a>
+ **设置合适的扩展阈值**：配置 CPU 或内存阈值，以便在性能下降之前触发扩展。

  您可以在 Express Mode 服务控制台中修改服务指标的目标值。

  考虑添加预测性扩展策略，尤其是您的流量遵循基于时间的模式时。有关更多信息，请参阅[预测式自动扩缩](AWSEC2ContainerServiceDocs/latest/shared/predictive-auto-scaling.html)。
+ **使用多个扩展指标**：考虑同时使用 CPU 或内存以及基于请求的扩展来提高扩展响应速度。

  您可以向服务添加多个策略。Express Mode 会默认添加一个策略，但式您可以直接将其他策略附加到您的服务。
+ **配置任务的最小和最大限制**：设置合理的界限以控制成本并确保可用性。

  对于生产工作负载，一旦初始测试完成，我们建议在三个可用区中运行，以遵循可用性最佳实践。您可以在 Express Mode 控制台中更新**最小任务数**，也可以使用 `update-express-gateway-service --scaling-target '{“minTaskCount”=3}'` 进行更新。

### 运行状况检查
<a name="express-service-health-checks"></a>
+ **实施有意义的运行状况检查**：创建用于验证关键应用程序依赖项的运行状况检查端点。

  您可以在 Express Mode 控制台中更新**运行状况检查路径**。或者使用 `update-express-gateway-service --health-check-path "/health"`。

  有关为应用程序生成运行状况检查的更多信息，请参阅 [Implementing Health Checks](https://d1.awsstatic.com/builderslibrary/pdfs/implementing-health-checks.pdf)
+ **保持运行状况检查轻量级**：避免在运行状况检查端点中进行昂贵的操作。

  示例可能包括外部 API 调用、CPU 或内存密集型操作，或者可能超时的长时间运行的操作。
+ **使用合适的超时**：配置运行状况检查超时，以允许正常的响应时间，同时快速检测故障。

  可以在应用程序负载均衡器目标组上配置 Express Mode 的运行状况检查超时。在 Amazon EC2 控制台中，导航至**目标组**部分，然后选择您的 Express Mode 目标组。选择**运行状况检查**选项卡并单击**编辑**，在**高级运行状况检查设置**下，您可以调整超时。或者使用 `aws elbv2 modify-target-group --target-group-arn <targetgroup> --health-check-timeout`。
+ **返回正确的 HTTP 状态码**：使用 200 表示运行状况良好， 4xx/5xx 表示运行状况不佳。

## 运营最佳实践
<a name="express-service-operational-best-practices"></a>

### 监控和日志记录
<a name="express-service-monitoring"></a>
+ **启用 Enhanced Container Insights**：使用 Enhanced Container Insights 全面监控您的 Express Mode 服务应用程序。

  有关更多信息，请参阅[在 Amazon ECS 上设置 Container Insights](AmazonCloudWatch/latest/monitoring/deploy-container-insights-ECS-cluster.html)。
+ **设置自定义指标**：将特定于应用程序的指标发布到 CloudWatch；用于业务逻辑监控。

  有关更多信息，请参阅《CloudWatch 用户指南》**中的[发布自定义指标](AmazonCloudWatch/latest/monitoring/publishingMetrics.html)。
+ **配置日志保留**：设置合适的日志保留期，以平衡成本和合规性要求。

  Express Mode 创建的 CloudWatch 日志组配置为永不过期，并且在 Express Mode 服务被删除后仍然会保留。您可以在 CloudWatch 日志组中调整此设置。
+ **创建控制面板和警报**：设置 CloudWatch 控制面板和警报以主动监控。

### 部署策略数
<a name="express-service-deployment"></a>
+ **实施烘焙时间**：Express Mode 实施金丝雀烘焙时间来确保部署有时间保持稳定，同时减少有问题部署的影响范围。如果您的应用程序需要更多时间来稳定，则可以在 Express Mode 服务的 Amazon ECS 服务定义中进行配置。有关更多详细信息，请参阅[创建 Amazon ECS 金丝雀部署](AmazonECS/latest/developerguide/deploy-canary-service.html)。
+ **实施回滚过程**：制定计划，以便在出现问题时能够快速恢复到以前的版本。

  有意义的运行状况检查和基于警报的回滚都有助于回滚。Express Mode 的金丝雀部署策略与 4xx 和 5xx 流量上基于警报的回滚相结合，可在应用程序代码或配置出现故障时为您的部署设置快速回滚。