亚马逊AWS官方博客

Amazon Compute Optimizer 在 Amazon Fargate 上推出对 Amazon ECS 服务的支持

优化计算资源是客户最关心的问题之一,因为客户希望最大限度地提高支出的投资回报。计算资源预置过度会导致不必要的基础设施成本,而预置不足又会导致应用程序性能不佳。2019 年 12 月,我们推出了 Amazon Compute Optimizer,以帮助客户为应用程序确定最佳 Amazon EC2 实例类型。 随着时间的推移,Compute Optimizer 已经扩展为可以支持更多资源类型,例如 Amazon EBS 卷和 Amazon Lambda 函数。

随着容器在软件工程中越来越受欢迎,客户提出的最常见请求之一就与支持容器化应用程序有关。我们在不断扩展 Compute Optimizer 的建议,目的就是帮助您确定在 Amazon Fargate 上运行的 Amazon ECS 服务的最佳 CPU 和内存配置。

许多客户每天在 Fargate 上使用 Amazon ECS 运行数百个应用程序。为了不断优化基础设施,客户通常会在每个服务团队中指派专门的工程师来分析 Fargate CPU 和内存使用情况,并定期进行调整。随着应用程序和使用模式的变化以及新应用程序的部署,这种工作量越来越大,成本也越来越高,难以跟上这项任务的步伐。

有了这些新建议,您不再需要专门的工程资源来分析在 Fargate 上运行的 Amazon ECS 服务的 CPU 和内存利用率。Compute Optimizer 持续监控 ECS 服务,使用历史资源利用率指标生成建议。通过执行 Amazon Compute Optimizer 的建议,您可以轻松节约成本并提高性能。

让我们从如何启用 Compute Optimizer 开始,了解它对在 Fargate 上运行的 Amazon ECS 服务的建议,并进行应用。

启用 Compute Optimizer

在亚马逊云科技账户中,选择加入 Compute Optimizer 开始分析亚马逊云科技资源。务必按照以下步骤配置适当的 IAM 权限。如果您希望使用控制台加入,请按照以下步骤操作。要通过 CLI 加入,请在终端窗口中输入以下命令:

$ aws compute-optimizer update-enrollment-status --status Active

了解 Compute Optimizer 的建议

启用 Compute Optimizer 后,它会开始为在过去 14 天内累积了至少 24 小时利用率数据的服务生成对 Fargate 上运行的 Amazon ECS 服务的建议。您可以通过 Compute Opimizer 控制台Amazon 软件开发工具包(Amazon SDK)访问建议。

Amazon ECS 服务根据其任务定义和服务配置协调并管理任务。一项 Amazon ECS 服务只能有一个任务定义,用于指定应如何配置关联任务(如 CPU 和内存设置)以运行容器。因此,Compute Optimizer 为每项 Fargate 上的 Amazon ECS 服务提出一项配置建议。

进入 Compute Optimizer 控制台后,单击 “ECS services on Fargate”(Fargate 上的 ECS 服务)查看 Fargate 上的 Amazon ECS 服务列表。该列表优先排列具有更高当前性能风险和费用节省机会的未优化的 Fargate 上的 Amazon ECS 服务。极低的性能风险意味着预计当前实例可始终提供足够的功能。性能风险越高,您就越应该考虑由 Compute Optimizer 生成的建议。您可以查看为每个 Amazon ECS 服务推荐的 CPU 和内存设置、当前的性能风险以及预计的月度节省费用。预计的月度节省费用根据 Amazon Fargate 按需定价和您的 Amazon ECS 服务的历史利用率计算得出。根据当前的性能风险和费用节省机会,您可以决定是要采取措施优化资源,还是要查看详细视图以获取更多信息。

通过单击 “View details”(查看详细信息),您可以更精确地了解单个服务的当前设置和推荐设置之间的定价信息。其中一栏会显示该服务具有哪些自动扩展配置。如果服务具有逐步扩展策略,Compute Optimizer 将不会生成任何建议。如果存在针对 CPU 利用率的目标跟踪策略,则 Compute Optimizer 将仅生成内存大小建议,反之亦然。

您还可以在详细视图下找到容器级 CPU 和内存大小建议。必要时会生成上述建议,以确保在缩减任务时 ECS 任务定义仍然有效。

您也可以通过 CLI 获得对 Fargate 上的 Amazon ECS 服务的建议:

$ aws compute-optimizer get-ecs-service-recommendations --service-arn yourservicearn

将 “yourservicearn” 替换为你感兴趣的 Amazon ECS 服务的 Amazon Web Services 资源名称(ARN)。无论您现有的 ARN 格式是什么,请在所有情况下使用长期服务 ARN。长期服务 ARN 的格式如下:arn:aws:ecs:region:accountId:service/clusterName/serviceName。将返回包括任务大小和容器大小的建议。以下是返回示例:

{
   "ecsServiceRecommendations":[
      {
         "serviceArn":"arn:aws-cn:ecs:cn-north-1:123456789012:service/MyCluster/MyService",
         “accountID”: “123456789012”,
         "utilizationMetrics":[
            {
               "name":"Duration",
               "statistic":"Average",
               "value":11.693175363965134
            },
            {
               "name":"Duration",
               "statistic":"Maximum",
               "value":131.33999633789062
            },
            {
               "name":"Memory",
               "statistic":"Average",
               "value":54.89910979228487
            },
            {
               "name":"Memory",
               "statistic":"Maximum",
               "value":55.0
            },
            {
               "name":"CPU",
               "statistic":"Average",
               "value":54.89910979228487
            },
            {
               "name":"CPU",
               "statistic":"Maximum",
               "value":55.0
            }
         ],
         "lookbackPeriodInDays":14.0,
         "lastRefreshTimestamp":"2022-08-13T21:04:10.299000+00:00",
         "launchType": "FARGATE"
         "finding":"Underprovisioned",
         "findingReasonCodes":[
            "MemoryUnderprovisioned"
         ],
         "currentPerformanceRisk": High,
         "currentServiceConfiguration": {
            "taskDefinitionArn": "arn:aws-cn:ecs:cn-north-1:123456789012:task-definition/MyTaskDefinition"
            "memorySize": 1024,
            "cpuSize": 16,
            "containerConfigurations": [
              {
                "containerName": "myWebService",
                "memorySizeConfiguration": {
                    "memory":512,
                    "memoryReserved": 512
                },
                "cpuSize": 8
              },
              {
                "containerName": "myMonitoringService",
                "memorySizeConfiguration": {
                    "memory":512,
                    "memoryReserved": 512
                },
                "cpuSize": 8
              }
            ],
            "autoScalingConfiguration": "STEP_SCALING"
         },
         "serviceRecommendationOptions":[
            {
               "memorySize":512,
               "cpuSize": 32,
               "savingsOpportunity": {
                   "savingsOpportunityPercentage": 50,
                   "estimatedMonthlySavings": {
                        "currency": "USD",
                        "value": 0.10
                   }
               
               },
               "containerRecommendations: [
                  {
                    "containerName": "myWebService",
                    "memorySizeConfiguration": {
                        "memory":256,
                        "memoryReserved":256
                    },
                    "cpuSize": 8
                },
                {
                    "containerName": "myMonitoringService",
                    "memorySizeConfiguration": {
                        "memory":256,
                        "memoryReserved":256
                    },
                    "cpuSize": 8
                }
               ]
            }
         ],
         "errors" []
      }
   ]
}

应用 Compute Optimizer 建议

以下是如何在 Amazon ECS 控制台中应用 Compute Optimizer 的建议。首先,在 Amazon ECS 控制台中使用推荐的 CPU 和内存设置创建任务定义修订:

要替换当前的任务定义,请找到有问题的 Amazon ECS 服务,单击 ‘Edit’(编辑),然后从 ‘Revision’(修订)下拉列表中选择新的任务定义修订。单击 “Update”(更新)然后 Amazon ECS 将根据修订后的任务定义中的新配置重新部署任务和容器。您就可以享受费用更低或性能更高的 Fargate 上的 Amazon ECS 服务!

除控制台外,您还可以使用以下 CLI 命令来完成这一任务。要创建任务定义的新修订:

$ aws ecs register-task-definition --family newtaskdefinition --cli-input-json file:///Users/newtaskdefinition_rev1.json

将 “newtaskdefinition” 和 “file: ///users/newTaskDefinition_rev1.json” 分别替换为你当前的任务定义名称和任务定义 JSON 文件路径。务必在任务定义 JSON 文件中更新推荐的 CPU 和内存设置。

使用以下 CLI 命令将服务的当前任务定义替换为修订后的任务定义(将以下红色字体部分替换为自己的设置):

$ aws ecs update-service --cluster cluster_name --service my_service_name --task-definition newtaskdefinition:revision

将 “cluster_name“、”my_service_name” 和 “newtaskdefinition: revision” 分别替换为与服务相关的集群名称、服务名称以及任务定义和修订版号。

总结

  • 本次发布仅支持在 Amazon Fargate 上运行的 Amazon ECS 服务。对于未在 Fargate 上运行的 Amazon ECS 服务,Compute Optimizer 无法生成建议。
  • 一项 Amazon ECS 服务下的所有任务都根据附加到该服务的任务定义进行配置。一项服务只能有一个任务定义。因此,每项 Amazon ECS 服务仅获得一项任务大小建议,包括 CPU 和内存设置。
  • 对环境进行的任何更改都应该先进行测试,我们也强烈建议您先对推荐的 CPU 和内存大小配置进行测试,再应用到生产中。

开始使用 Compute Optimizer 来帮助您为 Fargate 上运行的 Amazon ECS 服务确定最佳 CPU 和内存配置。Compute Optimizer 支持由光环新网运营的亚马逊云科技中国(北京)区域和由西云数据运营的亚马逊云科技中国(宁夏)区域 Fargate 上的 Amazon ECS 服务,这些建议不收取额外费用。

要了解更多信息,请访问 Amazon Compute Optimizer 入门

 

Original URL:https://aws.amazon.com/blogs/aws-cloud-financial-management/aws-compute-optimizer-launches-support-for-amazon-ecs-services-on-aws-fargate/