优化计算资源是客户在最大化其 AWS 投资回报时最重要的考量之一。过度配置计算可能导致不必要的基础设施成本,而过少配置则可能导致应用性能不佳。自 2019 年 12 月以来,我们推出了 AWS Compute Optimizer,帮助客户为其应用识别最佳的 Amazon Elastic Compute Cloud (Amazon EC2) 实例类型。随着容器在软件工程中的流行,我们收到的最普遍的客户请求是对容器化应用程序的支持。
今天,我们将 Compute Optimizer 的推荐扩展到帮助您识别运行在 AWS Fargate 上的 Amazon Elastic Container Service (Amazon ECS) 服务的最佳 CPU 和内存配置。许多客户每天在 Fargate 上运行数百个应用程序,为了保持基础设施的优化,通常会在每个服务团队中指派专门的工程师分析 Fargate 的 CPU 和内存使用情况,并定期进行调整。随着应用程序和使用模式的变化以及新应用程序的部署,这一努力和成本逐渐增加,而跟上这个任务变得困难重重。
加速器下载永久免费版通过这些新推荐,您不再需要专门的工程资源来分析您在 Fargate 上的 Amazon ECS 服务的 CPU 和内存利用率。Compute Optimizer 会持续监控您的 ECS 服务,利用历史资源利用率指标生成推荐。您可以通过实施 AWS Compute Optimizer 的建议,轻松实现成本节约和性能提升的潜力。
让我们开始了解如何启用 Compute Optimizer,并理解和应用针对 Fargate 上 Amazon ECS 服务的建议。
在您的 AWS 账户中,选择加入 Compute Optimizer 以开始分析您的 AWS 资源。请确保您已根据 这些步骤 配置好适当的 IAM 权限。如果您希望通过控制台选择加入,请按照 这些步骤 操作。要通过 CLI 加入,请在终端窗口中输入以下命令:
aws computeoptimizer updateenrollmentstatus status Active
一旦启用 Compute Optimizer,它开始生成针对在最近 14 天内至少积累了 24 小时利用率数据的 Fargate 上的 Amazon ECS 服务的推荐。您可以通过 Compute Optimizer 控制台、AWS 命令行界面 (AWS CLI) 和 AWS 软件开发工具包 (AWS SDK) 访问推荐。
图 1 Compute Optimizer 为 Amazon ECS 服务生成推荐
Amazon ECS 服务根据其任务定义和服务配置进行任务的编排和管理。一个 Amazon ECS 服务只能有一个任务定义,该任务定义指定如何配置相关任务,例如 CPU 和内存设置,以便运行容器。因此,Compute Optimizer 为 Fargate 上的每个 Amazon ECS 服务提供一个配置建议。
进入 Compute Optimizer 控制台后,单击 “ECS services on Fargate” 查看您的 Amazon ECS 服务列表。列表优先列出未优化的 Amazon ECS 服务,这些服务的当前性能风险较高且潜在节约机会较大。性能风险极低意味着当前实例预计始终提供足够的能力。性能风险越高,越可能需要考虑 Compute Optimizer 生成的建议。您可以看到为每个 Amazon ECS 服务推荐的 CPU 和内存设置、当前性能风险和预计的月度节省。预计的月度节省是根据 AWS Fargate 按需定价和您 Amazon ECS 服务的历史利用率计算得出的。根据当前的性能风险和成本节约机会,您可以决定是否采取行动来优化资源,或查看详细信息以获取更多信息。
图 2 Compute Optimizer 中对每个 AWS Fargate 上的 Amazon ECS 服务推荐的 CPU 和内存设置的样本视图。
点击 “View details” 可获得当前设置与推荐设置之间的定价信息的更详细信息。会显示服务的自动扩展配置情况。如果您的服务具有逐步扩展策略,Compute Optimizer 将不会生成任何推荐。如果在 CPU 利用率上有目标跟踪策略,则 Compute Optimizer 仅会生成内存大小建议,反之亦然。
在详细视图中,您也可以找到针对容器级 CPU 和内存大小的建议。它们在必要时生成,以确保您的 ECS 任务定义在缩小任务大小时仍然有效。
图 3 单服务当前设置与推荐设置之间详细定价信息的样本视图。
你还可以通过 CLI 获取 Amazon ECS 服务在 Fargate 上的建议:

aws computeoptimizer getecsservicerecommendations servicearn yourservicearn
将 “yourservicearn” 替换为您感兴趣的 Amazon ECS 服务的 Amazon 资源名称ARN。无论您现有 ARN 的格式如何,均使用长期服务 ARN。长期服务 ARN 的格式如下:
arnawsecsregionaccountIdservice/clusterName/serviceName
返回的数据将包含任务大小和容器大小的建议。以下是示例返回数据:
json{ ecsServiceRecommendations[ { serviceArnarnawsecsuseast1123456789012service/MyCluster/MyService accountId123456789012 utilizationMetrics[ { nameDuration statisticAverage value11693175363965134 } ] findingUnderprovisioned currentPerformanceRisk High currentServiceConfiguration { } serviceRecommendationOptions[ { memorySize512 cpuSize 32 savingsOpportunity { } containerRecommendations [ { } ] } ] errors [] } ]}
以下是如何在 Amazon ECS 控制台中应用 Compute Optimizer 推荐的步骤。首先,在 Amazon ECS 控制台中使用推荐的 CPU 和内存设置创建任务定义修订版本:
图 4 根据您的基础设施要求创建新的任务定义。
要替换当前任务定义,找到相关的 Amazon ECS 服务,单击 “Edit”,并在 “Revision” 下拉列表中选择新的任务定义修订版本。单击 “Update”,Amazon ECS 将根据修订任务定义中新的配置重新部署您的任务和容器。您现在可以享受在 AWS Fargate 上的 Amazon ECS 服务上获得更好的成本效益或性能!
图 5 根据修订任务定义重新部署您的任务和容器。
除了使用 Amazon ECS 控制台外,您还可以使用以下 CLI 命令创建任务定义的新修订版:
aws ecs registertaskdefinition family newtaskdefinition cliinputjson file///Users/newtaskdefinitionrev1json
将 “newtaskdefinition” 和 “file///Users/newtaskdefinitionrev1json” 替换为您当前的任务定义名称和任务定义 JSON 文件路径。确保在任务定义 JSON 文件中更新建议的 CPU 和内存设置。
使用以下 CLI 命令将服务的当前任务定义替换为新修订的任务定义替换红色字体部分为您自己的设置:
aws ecs updateservice cluster clustername service myservicename taskdefinition newtaskdefinitionrevision
将 “clustername”、 “myservicename” 和 “newtaskdefinitionrevision” 替换为与服务关联的集群名称、服务名称和任务定义及修订版本号。
开始使用 AWS Compute Optimizer 来帮助识别在 Fargate 上运行的 Amazon ECS 服务的最佳 CPU 和内存配置。Compute Optimizer 支持在 21 个 AWS 区域 上的 Amazon ECS 服务,这些建议不需要额外费用。
如需了解更多信息,请访问:开始使用 AWS Compute Optimizer。
标签: 优化与节省
Wenyen 是 AWS 优化团队的高级产品经理。他热衷于帮助客户优化其 AWS 支出的价值。目前,Wenyen 正在与 AWS Compute Optimizer 一起支持新的资源类型并增强定制能力。