Cấu hình tối ưu cho máy ảo với đề xuất từ AWS Compute Optimizer

PHẦN LÝ THYẾT

AWS Compute Optimizer là gì

AWS Compute Optimizer là một dịch vụ không tính phí nhưng cần cung cấp đầy đủ quyền + metric để phân tíchđưa ra các đề xuất - giúp tránh việc sử dụng quá mức hoặc dưới mức cần thiết của 5 dịch vụ sau:

  • EC2 instances
  • Auto Scaling groups
  • EBS volumes
  • Lambda functions
  • Dịch vụ container: ECS với máy ảo Fargate

Đúc kết: trong khuôn khổ bài lab này, việc tối ưu chi phí khi sử dụng compute (EC2, Lambda, Fargate) cần làm theo thứ tự sau:

  1. Tối ưu instance type, cấu hình
  2. Khi đã chắc chắn instance type, cấu hình đảm bảo được khối lượng công việc, tiến hành mua compute saving plans (tham khảo bước 5) để nhận được triết khấu lên đến 66% so với việc chi trả theo hình thức on-demand

Lưu ý: nếu bước 2 thực hiện trước bước 1 thì việc tối ưu sẽ thật sự vô nghĩa, như cách chúng ta chưa chắc chắn chiếc máy đó có phù hợp với khối lượng công việc hay chưa? quá mạnh - dẫn đến dư thừa, hoặc quá yếu - dẫn đến không thể xử lý workload, mà đã mua & cam kết sử dụng máy trong 1 hoặc 3 năm.

AWS Compute Optimizer dựa vào gì để phân tích và đưa ra các đề xuất

AWS Compute Optimizer dựa vào metric được thu thập bằng CloudWatch trong khoảng thời gian 14 ngày để phân tích và đưa ra các đề xuất, với các metric tiêu biểu như:

  • CPUutilization
  • Memory utilization: mem_used_percent (Linux) hoặc Available MBytes (Windows)
  • VolumeReadBytes
  • VolumeWriteBytes

Ngoài ra, còn có các metric sau: link và các custom metric đều cần đặt dưới một namespace là: CWAgent

Lưu ý: bạn có thể đặt một namespace khác để dễ dàng theo dõi các custom metric trong dịch vụ CloudWatch, tuy nhiên nếu bạn muốn nhận đầy đủ các đề xuất từ AWS Compute Optimizer thì namespace: CWAgent là điều kiện bắt buộc của dịch vụ này.

Bên cạnh đó, metric Memory utilizationcustom metric nên không được khởi tạo mặc định, việc thiếu metric này sẽ làm sự chọn lựa cấu hình máy ảo EC2 trở nên lệch lạc khi các đề xuất chỉ dựa trên metric CPU utilization! Do đó, cần cài đặt CloudWatch Agent trên các máy ảo EC2 để thu thập metric memory.

Lưu ý: Tham khảo lại bước 1 để hiểu về CloudWatch Agent link

Ví dụ 1: Bức hình thể hiện đề xuất của dịch vụ AWS Compute Optimizer cho EC2 khi chỉ có metric CPU utilization

  • Current: EC2 có instance type là m5.xlarge tưng ứng với 4 vCPU & 16 Gib Memory
  • Option: có 3 đề xuất để tối ưu instance type, với option 1r6g.large tưng ứng với 2 vCPU & 16 Gib Memory
  • CPU utilization: 3 đề xuất trên dựa vào mức sử dụng CPU của EC2
  • Memory utilizaton: chưa có thông số nào về metric này, dẫn đến 3 đề xuất trên chưa thật sự tối ưu

CloudWatchIntro

Lưu ý: mức chi trả hàng tháng đã tiết kiệm được $ 85.4000

Ví dụ 2: Bức hình thể hiện đề xuất của dịch vụ AWS Compute Optimizer cho EC2 khi có hai metric quan trọng: CPU utilization & Memory utilizaton

  • Current: EC2 có instance type là m5.xlarge tưng ứng với 4 vCPU & 16 Gib Memory
  • Option: có 3 đề xuất để tối ưu instance type, với option 1t4g.nano tưng ứng với 2 vCPU & 0.5 Gib Memory
  • CPU utilization: 3 đề xuất trên dựa vào mức sử dụng CPU của EC2
  • Memory utilizaton: 3 đề xuất trên dựa vào mức sử dụng Memory của EC2

CloudWatchIntro

Lưu ý: mức chi trả hàng tháng đã tiết kiệm được $ 163.1800 nhiều hơn ở ví dụ 1 -> Từ đó cho thấy, việc có đầy đủ metric sẽ giúp đưa ra các đề xuất chính xác trên mức độ sử dụng thật tế, giúp việc tiết kiệm đạt hiệu quả cao nhất

AWS Compute Optimizer hỗ trợ đề xuất cho các instance type nào

AWS Compute Optimizer hỗ trợ hầu hết các instance type với các loại phổ thông như: C5, M5, R5, T2, T3,… (tham khảo)

AWS Compute Optimizer không hỗ trợ các instance type sau: G2, G3, G4ad, G4dn, G5, G5g, Mac1,…(tham khảo)

Lưu ý: AWS Compute Optimizer không đề xuất cho Spot Instances

Điều kiện để AWS Compute Optimizer hỗ trợ đề xuất cho Auto Scaling group

  • Chỉ chạy một loại phiên bản duy nhất (không có nhiều instance type)
  • Các giá trị cho 3 nội dung: desired, minimum, and maximum capacity đều giống nhau (ví dụ: Auto Scaling group với số phiên bản cố định)
  • Không có scaling policy được đính kèm.
  • Không có phần ghi đè nào được cấu hình.

Ví dụ 3: Bức hình thể hiện đề xuất của dịch vụ AWS Compute Optimizer cho Auto Scaling group = ASG, với ASG được tạo tự động khi triển khai dịch vụ AWS Elastic Beanstalk

  1. Chi tiết cấu hình ASG
  • Thỏa điều kiện: Chỉ chạy một loại phiên bản duy nhất (vd: t2.micro)
  • Thỏa điều kiện: các giá trị cho cho 3 nội dung: desired, minimum, and maximum capacity đều bằng nhau (vd: 3)

CloudWatchIntro

  • Thỏa điều kiện không có bất kỳ một scaling policy

CloudWatchIntro

  1. Đề xuất của dịch vụ AWS Compute Optimizer
  • Đề xuất cho Auto Scaling group
  • Current: ASG với instance hiện tại là t2.micro
  • Option: option 1 với để xuất t4g.micro để tối ưu, tiết kiệm được $ 0.0034 trên mỗi EC2

CloudWatchIntro

  1. Đề xuất được xuất hiện đồng bộ trên giao diện EC2
  • 3 EC2 thuộc ASG
  • Các EC2 đang ở trạng thái: Under-provisioned
  • Các EC2 này đang được quản lý bởi ASG

CloudWatchIntro

Lưu ý: trong quá trình sử dụng ASG với nhu cầu khác nhau giữa các giá trị vd: desired=2, minimum=1, and maximum=4 capacity, sẽ không nhận được đề xuất tối ưu từ AWS Compute Optimizer( tìm hiểu thêm dịch vụ Auto-Scaling-group, link)

Điều kiện để AWS Compute Optimizer hỗ trợ đề xuất cho EBS

  • Đề xuất cho các loại ổ đĩa EBS SSD General Purpose (gp2 và gp3)IOPS SSD (io1 và io2) được gắn vào EC2.

  • EBS cần phải được gắn vào một EC2 trong ít nhất 30 giờ liên tục.

Ví dụ 4: Bức hình thể hiện đề xuất của dịch vụ AWS Compute Optimizer cho EBS

  • Current: SSD (gp2)
  • Option: với option 1, đề xuất sử dụng SSD (gp3)
  • IOPS: tăng lên 3000 nhưng giá rẻ hơn, tiết kiệm được $ 0.192 một tháng cho 1 ổ EBS
  • Trong thật tế, số lượng ổ EBS đến hàng trăm với Volume size vài trăm GB, số tiền tiết kiệm được lên đến vài trăm USD/tháng

CloudWatchIntro

Điều kiện để AWS Compute Optimizer hỗ trợ đề xuất cho Lambda

  • Memory của lambda nhỏ hơn hoặc bằng 1792 MB (tương ứng 1.75 GB)

  • Các hàm Lambda được gọi ít nhất 50 lần trong 14 ngày qua

Ví dụ 5: Bức hình thể hiện đề xuất của dịch vụ AWS Compute Optimizer cho Lambda

  1. Lambda đang có trạng thái sử dụng dưới mức cần thiết (Memory under-provisioned)

CloudWatchIntro

  1. Đề xuất tăng memory cho hàm Lambda
  • Current: 128 MB memory
  • Option: với option 1, đề xuất sử dụng 160 MB memory

CloudWatchIntro

Điều kiện để AWS Compute Optimizer hỗ trợ đề xuất cho Fargate

  • Amazon ECS chạy trên fargateít nhất 24 giờ hoạt động được ghi nhận bởi Cloudwatch

  • Có metric của Amazon ECS utilization từ 14 ngày đã qua

  • Không có các step scaling policy được gán vào Amazon ECS trên fargate

  • Không có các target scaling policy dựa trên các giá trị về CPU hoặc Ram của Amazon ECS trên fargate

  • Dịch vụ Fargate có trạng thái SteadyState hoặc MoreWork.

Lưu ý Nếu target tracking policy được gán vào CPU của dịch vụ fargate, thì AWS Compute Optimizer chỉ đưa ra các đề xuất cho kích thước của memory và ngược lại.

Ví dụ 6: Bức hình thể hiện đề xuất của dịch vụ AWS Compute Optimizer cho Fargate

  • Dịch vụ ECS trên Fargate
  • Current Setting: CPU và Memory hiện tại
  • Recommendation: cho CPU và Memory mới, tối ưu và tiết kiệm chi phí hơn khi chạy với nhiều máy ảo.

CloudWatchIntro

PHẦN THỰC HÀNH

  • Trong phần này, chúng ta sẽ tiến hành opt in dịch vụ AWS Compute Optimizer! Sẽ không có bất kỳ yêu cầu về permision nếu bạn đang sử dụng IAM User có quyền Admin, nhưng giả sử bạn đang là bên triển khai dịch vụ cho công ty production thì khách hàng chỉ cung cấp cho bạn quyền tối thiểu để sử dụng trên dịch vụ AWS Compute Optimizer! Vậy dưới vai trò triển khai bạn cần thông báo đến khách hàng 2 policy sau để được cấp quyền.

    • ComputeOptimizerReadOnlyAccess (được quản lý bởi AWS)
    • Specific service-linked role for Compute Optimizer (được quản lý bởi khách hàng)
  1. Tạo policy service-linked role
  • Trong giao diện IAM, chọn Policies

CloudWatchIntro

  • Chọn Create policy

CloudWatchIntro

  • Chọn JSON

CloudWatchIntro

  • Dán đoạn code sau vào khung, chọn Next:Tags
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::*:role/aws-service-role/compute-optimizer.amazonaws.com/AWSServiceRoleForComputeOptimizer*",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "compute-optimizer.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:PutRolePolicy",
            "Resource": "arn:aws:iam::*:role/aws-service-role/compute-optimizer.amazonaws.com/AWSServiceRoleForComputeOptimizer"
        },
        {
            "Effect": "Allow",
            "Action": "compute-optimizer:UpdateEnrollmentStatus",
            "Resource": "*"
        }
    ]
}

CloudWatchIntro

  • Chọn Next: Review
  • Tại trang Review policy:
    • Name: specific_service_linked_role_for_Compute_Optimizer
    • Chọn: Create policy

CloudWatchIntro

  1. Gắn quyền vào User
  • Giả sử bạn có một User nhưng chưa có quyền như trong hình
  • Chọn Add permissions

CloudWatchIntro

  • Chọn Attach policies directly
  • Trong khung tìm kiếm, gõ compute
  • Chọn ComputeOptimizerReadOnlyAccess
  • Chọn specific_service_linked_role_for_Compute_Optimizer (đã vừa được tạo ở bước trước)
  • Chọn Next

CloudWatchIntro

  • Chọn Add permissions

CloudWatchIntro

  1. Tiến hành Opt In dịch vụ AWS Compute Optimizer
  • Trong giao diện AWS Compute Optimizer, chọn Get started

Lưu ý: AWS có thông báo mặc định, dịch vụ AWS Compute Optimizer là miễn phí, chúng ta chỉ chi trả chi phí khi: chuyển đổi cấu hình của compute + volumes và hoạt động monitoring của Cloudwatch

CloudWatchIntro

  • Chọn Only this account
  • Chọn Opt in

CloudWatchIntro

Lưu ý: Trong khuôn khổ bài lab này, chúng ta sẽ chọn Only this account, nhưng trong môi trường thật tế của doanh nghiệp, khi khách hàng chia 2 môi trường: Dev-Test và Production bằng 2 tài khoản AWS riêng biệt được quản lý bằng dịch vụ AWS Organizations (đọc thêm thông tin về AWS Organizations). Chúng ta sẽ chọn All member accounts of this organization (nằm vị trí bên trái) để nhận được đề xuất tối ưu cho tất cả compute và volumes có trong các tài khoản AWS thuộc organization

  • Trong trường hợp bạn chưa cung cấp đủ quyền cho User, kết quả Opt in sẽ trả về thông tin như hình bên dưới:

CloudWatchIntro

  • Chúc mừng bạn đã Opt in thành công, hiện tại bạn sẽ không thấy bất kỳ một đề xuất nào như các ví dụ ở trong phần lý thuyết vì có thể mất tới 12 giờ để AWS Compute Optimizer đưa ra đề xuất.

CloudWatchIntro

  • Sau 12 tiếng, với các tài nguyên thỏa mãn điều kiện như phần lý thuyết ở trên, bạn có thể click vào các đề mục:
    • Dashboard: để xem tổng quan
    • EC2 instances, Auto Scaling groups, EBS volumes, Lambda functions, ECS services on Fargate: xem xét các đề xuất cụ thể cho việc tối ưu tài nguyên

CloudWatchIntro

Lưu ý:

  • Để có đề xuất đầy đủ cho EC2 dựa trên metric Memory + Ram, vui lòng đọc lại phần lý thuyết ở trên và tham khảo lại từ bước 1 đến bước 4 để hiểu rõ và cài đặt CloudWatch Agent với namespace:CWAgent (link)