Amazon ECS Express Mode 服务的最佳实践
了解在生产环境中有效使用 Express Mode 服务的最佳实践和建议。
安全最佳实践
密钥管理
-
使用 Secrets Manager 获取密钥:将敏感数据存储在 Secrets Manager 中(例如私有存储库或数据库凭证)。
有关 Secrets Manager 最佳实践的更多信息,请参阅《Secrets Manager 用户指南》中的 Secrets Manager 最佳实践
-
启用静态加密:确保存储在 Amazon 服务中的密钥都经过加密。
使用 Secrets Manager 等服务,您可以使用 Amazon 管理的密钥或客户提供的密钥进行加密。
-
实现密钥轮换:对数据库密码和 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”}]}’ \
网络安全
-
对敏感应用程序使用私有子网:将不需要直接访问互联网的应用程序部署在私有子网中。
有关推荐架构的更多信息,请参阅将 Amazon ECS 应用程序连接到互联网。
-
将安全组配置为最低限度:将入站和出站流量限制为仅限必要的端口和源。
要限制 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 -
将 Amazon 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>。
性能和计算优化
资源大小调整
-
适当调整 CPU 和内存大小:监控应用程序性能,并根据实际使用模式调整 CPU 和内存分配。
Amazon Compute Optimizer 可针对 Amazon ECS 任务和容器大小生成建议。有关更多信息,请参阅《Amazon Compute Optimizer 用户指南》中的什么是 Amazon Compute Optimizer?。
-
对应用程序进行性能测试:要确保您的应用程序大规模运行并采用给定的扩展阈值和资源分配,请执行负载测试。
自动扩缩配置
-
设置合适的扩展阈值:配置 CPU 或内存阈值,以便在性能下降之前触发扩展。
您可以在 Express Mode 服务控制台中修改服务指标的目标值。
考虑添加预测性扩展策略,尤其是您的流量遵循基于时间的模式时。有关更多信息,请参阅预测式自动扩缩。
-
使用多个扩展指标:考虑同时使用 CPU 或内存以及基于请求的扩展来提高扩展响应速度。
您可以向服务添加多个策略。Express Mode 会默认添加一个策略,但式您可以直接将其他策略附加到您的服务。
-
配置任务的最小和最大限制:设置合理的界限以控制成本并确保可用性。
对于生产工作负载,一旦初始测试完成,我们建议在三个可用区中运行,以遵循可用性最佳实践。您可以在 Express Mode 控制台中更新最小任务数,也可以使用
update-express-gateway-service --scaling-target '{“minTaskCount”=3}'进行更新。
运行状况检查
-
实施有意义的运行状况检查:创建用于验证关键应用程序依赖项的运行状况检查端点。
您可以在 Express Mode 控制台中更新运行状况检查路径。或者使用
update-express-gateway-service --health-check-path "/health"。有关为应用程序生成运行状况检查的更多信息,请参阅 Implementing Health Checks
-
保持运行状况检查轻量级:避免在运行状况检查端点中进行昂贵的操作。
示例可能包括外部 API 调用、CPU 或内存密集型操作,或者可能超时的长时间运行的操作。
-
使用合适的超时:配置运行状况检查超时,以允许正常的响应时间,同时快速检测故障。
可以在应用程序负载均衡器目标组上配置 Express Mode 的运行状况检查超时。在 Amazon EC2 控制台中,导航至目标组部分,然后选择您的 Express Mode 目标组。选择运行状况检查选项卡并单击编辑,在高级运行状况检查设置下,您可以调整超时。或者使用
aws elbv2 modify-target-group --target-group-arn <targetgroup> --health-check-timeout。 -
返回正确的 HTTP 状态码:使用 200 表示运行状况良好, 4xx/5xx 表示运行状况不佳。
运营最佳实践
监控和日志记录
-
启用 Enhanced Container Insights:使用 Enhanced Container Insights 全面监控您的 Express Mode 服务应用程序。
有关更多信息,请参阅在 Amazon ECS 上设置 Container Insights。
-
设置自定义指标:将特定于应用程序的指标发布到 CloudWatch;用于业务逻辑监控。
有关更多信息,请参阅《CloudWatch 用户指南》中的发布自定义指标。
-
配置日志保留:设置合适的日志保留期,以平衡成本和合规性要求。
Express Mode 创建的 CloudWatch 日志组配置为永不过期,并且在 Express Mode 服务被删除后仍然会保留。您可以在 CloudWatch 日志组中调整此设置。
-
创建控制面板和警报:设置 CloudWatch 控制面板和警报以主动监控。
部署策略数
-
实施烘焙时间:Express Mode 实施金丝雀烘焙时间来确保部署有时间保持稳定,同时减少有问题部署的影响范围。如果您的应用程序需要更多时间来稳定,则可以在 Express Mode 服务的 Amazon ECS 服务定义中进行配置。有关更多详细信息,请参阅创建 Amazon ECS 金丝雀部署。
-
实施回滚过程:制定计划,以便在出现问题时能够快速恢复到以前的版本。
有意义的运行状况检查和基于警报的回滚都有助于回滚。Express Mode 的金丝雀部署策略与 4xx 和 5xx 流量上基于警报的回滚相结合,可在应用程序代码或配置出现故障时为您的部署设置快速回滚。