AWS Compute Optimizer đã hỗ trợ cho các dịch vụ Amazon ECS trên AWS Fargate.

Tối ưu hóa tài nguyên tính toán là một trong những vấn đề quan trọng nhất của khách hàng khi họ tìm cách tối đa hóa lợi tức đầu tư của họ trên AWS. Quá mức cung cấp tài nguyên tính toán có thể dẫn đến chi phí hạ tầng không cần thiết, trong khi việc cung cấp quá ít có thể dẫn đến hiệu suất ứng dụng kém. Vào tháng 12 năm 2019, chúng tôi đã ra mắt AWS Compute Optimizer để giúp khách hàng xác định loại máy chủ Amazon Elastic Compute Cloud (Amazon EC2) tối ưu cho ứng dụng của họ. Theo thời gian, chúng tôi đã mở rộng hỗ trợ Compute Optimizer cho nhiều loại tài nguyên hơn, chẳng hạn như các ổ đĩa Amazon Elastic Block Store (Amazon EBS) và các hàm AWS Lambda.
Với sự phổ biến của các container trong kỹ thuật phần mềm, một trong những yêu cầu phổ biến nhất của khách hàng chúng tôi nhận được liên quan đến việc hỗ trợ các ứng dụng đóng gói container. Hiện nay, chúng tôi đang mở rộng các khuyến nghị của Compute Optimizer để giúp bạn xác định cấu hình CPU và bộ nhớ tối ưu cho các dịch vụ Amazon Elastic Container Service (Amazon ECS) chạy trên AWS Fargate.

Nhiều khách hàng chạy hàng trăm ứng dụng với Amazon ECS trên Fargate mỗi ngày. Để duy trì hạ tầng được tối ưu hóa, khách hàng thường phân công kỹ sư chuyên dụng trong mỗi nhóm dịch vụ để phân tích sử dụng CPU và bộ nhớ của Fargate và thường xuyên điều chỉnh. Chi phí và công sức này tích lũy theo thời gian khi ứng dụng và mô hình sử dụng thay đổi và ứng dụng mới được triển khai, và điều này khó để theo kịp.

Với những đề xuất mới này, bạn không còn cần phải dành tài nguyên kỹ thuật để phân tích việc sử dụng CPU và bộ nhớ cho các dịch vụ Amazon ECS trên Fargate. Compute Optimizer liên tục giám sát các dịch vụ ECS của bạn, sử dụng các số liệu lịch sử về sử dụng tài nguyên để tạo ra các đề xuất. Bạn có thể dễ dàng thực hiện các tiết kiệm chi phí và cải thiện hiệu suất bằng cách áp dụng các đề xuất của AWS Compute Optimizer.

Hãy bắt đầu bằng cách hướng dẫn cách kích hoạt Compute Optimizer và hiểu và áp dụng các đề xuất của nó cho các dịch vụ Amazon ECS trên Fargate.

Kích hoạt Compute Optimizer

Trong tài khoản AWS của bạn, hãy đăng ký để sử dụng Compute Optimizer để bắt đầu phân tích tài nguyên AWS của bạn. Đảm bảo bạn đã cấu hình đầy đủ các quyền IAM phù hợp bằng cách làm theo các bước sau. Nếu bạn muốn sử dụng giao diện điều khiển để đăng ký, hãy làm theo các bước sau. Để đăng ký thông qua CLI, hãy nhập lệnh sau vào cửa sổ terminal:

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

Hiểu về các khuyến nghị của Compute Optimizer

Sau khi bật tính năng Compute Optimizer, nó sẽ bắt đầu tạo ra các gợi ý dịch vụ Amazon ECS trên Fargate cho các dịch vụ đã tích lũy được ít nhất 24 giờ dữ liệu sử dụng trong 14 ngày gần đây. Bạn có thể truy cập các gợi ý thông qua bảng điều khiển Compute Optimizer, AWS Command Line Interface (AWS CLI)AWS Software Development Kits (AWS SDK).

Hình 1. Compute Optimizer tạo ra các gợi ý cho các dịch vụ Amazon ECS trên AWS Fargate.

Một dịch vụ Amazon ECS chỉ đạo và quản lý các tác vụ theo định nghĩa tác vụ và cấu hình dịch vụ của nó. Một dịch vụ Amazon ECS chỉ có thể có một định nghĩa tác vụ xác định cách các tác vụ liên quan, chẳng hạn như cấu hình CPU và bộ nhớ, phải được cấu hình để chạy các container. Do đó, Compute Optimizer đưa ra một gợi ý cấu hình cho mỗi dịch vụ Amazon ECS trên Fargate.

Khi bạn truy cập vào bảng điều khiển Compute Optimizer, hãy nhấp vào ‘Dịch vụ ECS trên Fargate’ để xem danh sách các dịch vụ Amazon ECS của bạn trên Fargate. Danh sách ưu tiên cho các dịch vụ Amazon ECS trên Fargate chưa được tối ưu hóa có rủi ro hiệu suất hiện tại cao và cơ hội tiết kiệm chi phí. Rủi ro hiệu suất rất thấp có nghĩa là trường hợp hiện tại được dự đoán sẽ luôn cung cấp đủ khả năng. Càng cao rủi ro hiệu suất, bạn càng nên xem xét các đề xuất được tạo ra bởi Compute Optimizer. Bạn có thể xem các thiết lập CPU và bộ nhớ được đề xuất, rủi ro hiệu suất hiện tại và tiết kiệm chi phí ước tính cho mỗi dịch vụ Amazon ECS. Tiết kiệm chi phí ước tính được tính dựa trên giá đòi hỏi của AWS Fargate và sử dụng lịch sử của các dịch vụ Amazon ECS của bạn. Dựa trên rủi ro hiệu suất hiện tại và cơ hội tiết kiệm chi phí, bạn có thể quyết định liệu bạn muốn thực hiện hành động để tối ưu hóa tài nguyên hay xem xét các thông tin chi tiết hơn.

Hình 2. Giao diện mẫu trong Compute Optimizer hiển thị các thiết lập CPU và bộ nhớ được đề xuất, rủi ro hiện tại của hiệu suất và tiết kiệm ước tính hàng tháng cho mỗi dịch vụ Amazon ECS trên AWS Fargate.

Bằng cách nhấp vào ‘Xem chi tiết’, bạn sẽ nhận được thông tin chi tiết hơn về giá giữa các thiết lập hiện tại và được đề xuất cho một dịch vụ đơn lẻ. Có một cột hiển thị cấu hình tự động điều chỉnh kích thước của dịch vụ. Compute Optimizer sẽ không tạo bất kỳ đề xuất nào nếu dịch vụ của bạn có chính sách step-scaling. Nếu có chính sách theo dõi mục tiêu trên sử dụng CPU, thì Compute Optimizer sẽ chỉ tạo ra các đề xuất kích thước bộ nhớ, và ngược lại.

Bạn cũng có thể tìm thấy các đề xuất kích thước CPU và bộ nhớ cấp container trong chế độ xem chi tiết. Chúng được tạo ra, khi cần thiết, để đảm bảo định nghĩa nhiệm vụ ECS của bạn vẫn hợp lệ khi giảm kích thước các nhiệm vụ.

Hình 3. Mẫu xem thông tin chi tiết giá giữa cài đặt hiện tại và cài đặt đề xuất trên một dịch vụ đơn

Bạn cũng có thể lấy các khuyến nghị về dịch vụ Amazon ECS trên Fargate của bạn thông qua CLI:

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

Thay “yourservicearn” bằng tên Amazon Resource Name (ARN) của dịch vụ Amazon ECS mà bạn quan tâm. Bất kể định dạng ARN hiện có của bạn là gì, hãy sử dụng ARN dài cho dịch vụ trong tất cả các trường hợp. Một ARN dịch vụ dài có định dạng như sau: arn:aws:ecs:region:accountId:service/clusterName/serviceName. Kết quả sẽ bao gồm cả khuyến nghị về kích thước tác vụ và kích thước bên trong container. Dưới đây là một mẫu kết quả trả về:

JavaScript

{

   “ecsServiceRecommendations”:[

      {

         “serviceArn”:”arn:aws:ecs:us-east-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:ecs:us-east-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” []

      }

   ]

}

Áp dụng các đề xuất từ Compute Optimizer

Đây là cách để áp dụng các khuyến nghị của Compute Optimizer trong bảng điều khiển Amazon ECS. Đầu tiên, tạo một phiên bản định nghĩa task với các thiết lập CPU và bộ nhớ được đề xuất trong bảng điều khiển Amazon ECS:

Hình 4. Tạo một định nghĩa công việc mới với yêu cầu cơ sở hạ tầng của bạn.

Để thay thế định nghĩa công việc hiện tại của bạn, tìm dịch vụ Amazon ECS tương ứng, nhấp vào “Chỉnh sửa” và chọn phiên bản định nghĩa công việc mới của bạn từ danh sách thả xuống “Phiên bản”. Nhấp vào “Cập nhật” và Amazon ECS sẽ triển khai lại các tác vụ và bên trong chứa các thiết lập mới trong định nghĩa công việc được sửa đổi. Bây giờ bạn có thể tận hưởng hiệu suất hoặc hiệu quả chi phí tốt hơn trên các dịch vụ Amazon ECS trên Fargate!

Hình 5. Triển khai lại các task và container theo task definition đã được sửa đổi

Ngoài việc sử dụng bảng điều khiển Amazon ECS, bạn cũng có thể sử dụng các lệnh CLI sau để tạo một phiên bản mới của task definition:

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

Thay thế “newtaskdefinition” và “file:///Users/newtaskdefinition_rev1.json” bằng tên hiện tại của task definition của bạn và tuyến đường tệp JSON của task definition của bạn, tương ứng. Đảm bảo bạn cập nhật các thiết lập CPU và memory được đề xuất trong tệp JSON của task definition.

Sử dụng lệnh CLI sau để thay thế task definition hiện tại của dịch vụ của bạn bằng phiên bản mới của task definition (thay thế các phần màu đỏ bên dưới bằng các thiết lập của riêng bạn):

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

Thay thế “cluster_name”, “my_service_name” và “newtaskdefinition:revision” bằng tên của cluster liên quan đến dịch vụ, tên dịch vụ và số phiên bản của task definition, tương ứng.

Kết luận

  • Phiên bản mới này chỉ hỗ trợ cho các dịch vụ Amazon ECS chạy trên AWS Fargate. Đối với các dịch vụ Amazon ECS không chạy trên Fargate, Compute Optimizer không thể tạo ra các đề xuất.
  • Tất cả các task trong một dịch vụ Amazon ECS được cấp phát theo định nghĩa task đính kèm vào dịch vụ. Một dịch vụ chỉ có thể có một định nghĩa task. Do đó, mỗi dịch vụ Amazon ECS chỉ nhận được một đề xuất về kích thước task, bao gồm cả thiết lập CPU và bộ nhớ.
  • Như với bất kỳ thay đổi nào bạn thực hiện trên môi trường, chúng tôi khuyến khích mạnh mẽ rằng bạn nên kiểm tra các cấu hình kích thước CPU và bộ nhớ được đề xuất trước khi áp dụng chúng vào sản xuất.

Bắt đầu sử dụng AWS Compute Optimizer để giúp xác định các cấu hình CPU và bộ nhớ tối ưu cho các dịch vụ Amazon ECS của bạn trên Fargate. Compute Optimizer hỗ trợ các dịch vụ Amazon ECS trên Fargate trong 21 AWS Regions và các đề xuất này có sẵn miễn phí.

Để biết thêm thông tin, hãy truy cập: Bắt đầu sử dụng AWS Compute Optimizer.