see more blog

Tối Ưu Chi Phí Bằng Tự Động Hóa Nguồn Lực Trong Môi Trường Non-Production

toi-uu-chi-phi-bang-tu-dong-hoa-nguon-luc-trong-moi-truong-non-production-1

Thiếu đi việc tạo ra các nguồn lực theo nhu cầu trên AWS đôi khi sẽ dẫn đến việc dự phòng quá mức (over-provisioning) hoặc không khai thác hết công suất (under-utilization) của tài nguyên AWS như Amazon EC2 và Amazon RDS. Tình trạng này có thể dẫn tới gia tăng chi phí không mong muốn khi hoạch định và quản lý. Trong môi trường non-critical như môi trường Development hay môi trường Kiểm thử (QA), thường không yêu cầu giám sát thường xuyên, có thể thấy trình trạng không khai thác hết công suất của tài nguyên AWS.

Trong bài viết này, ta sẽ bàn luận về chiến lược tối ưu chi phí cho AWS, thường là giải pháp tự động hóa, có thể triển khai để lên lịch khởi động/dừng cho tài nguyên AWS. Chúng ta sẽ cân nhắc việc triển khai trong các môi trường phi sản xuất (non-production), bởi trong phần lớn trường hợp, bởi chúng không nhất thiết phải hoạt động 24/7. Bằng việc ứng dụng giải pháp này, kỹ sư cloud có thể tự động hóa việc khởi động/dừng các dịch vụ tùy theo thói quen sử dụng, tiết kiệm tới 70% chi phí khi chạy các môi trường phi sản xuất.

Một số giải pháp được thiết kế để tự động hóa việc dừng và khởi động dịch vụ AWS dựa trên nhu cầu của doanh nghiệp bao gồm: Amazon RDS, Amazon Aurora, Amazon EC2, các nhóm Auto Scaling, AWS Beanstalk, và Amazon EKS. Giải pháp này được tự động hóa qua việc sử dụng các chức năng AWS Steps, AWS Lambda, AWS CloudFormation Templates, Amazon EventBridge, và IAM (AWS Identity & Access Management).

Trong giải pháp này, chúng ta cũng sẽ đưa ra các lựa chọn để loại trừ Amazon Resource Names (ARNs) cụ thể, đã được liệt kê phía trên. Giải pháp sắp được trình bày dưới đây hứa hẹn sẽ giúp các kỹ sư cloud loại bỏ chức năng khởi động/dừng trong rất nhiều trường hợp như ở trong môi trường kiểm thử (QA), khi mọi người không muốn dừng Aurora hay khi mọi người muốn khởi động RDS trong môi trường Development. Ta có thể áp dụng giải pháp này để khởi động/dừng các dịch vụ được nhắc phía trên theo lịch trình tự đặt hoặc sử dụng trong các dịch vụ khác như Amazon ECS, Amazon SageMaker Notebook Instances, Amazon Redshift, và rất nhiều ứng dụng khác nữa.

Chú thích – Không nên ứng dụng giải pháp này trong môi trường Production hay bất kỳ môi trường nào khác yêu cầu tính khả dụng của dịch vụ liên tục (SA – service availability).

Điều Kiện Tiên Quyết

Trước khi “check” qua giải pháp này, bạn cần có một số điều kiện sau:

  • Một tài khoản AWS được cấp quyền để có thể chạy các tài nguyên được yêu cầu;
  • Một Amazon Aurora instance đang chạy trong source account AWS.

Kiểm Tra

Để đưa giải pháp này vào sử dụng, ta cần thực hiện hai bước sau:

  1. Đặt ra luồng công việc (workflow) cho các hàm bước (step function) để dừng các dịch vụ đang sử dụng template CloudFormation. Theo lịch trình, workflow này sẽ chạy và dừng ở đúng các dịch vụ do mình chọn.
  2. Đặt workflow cho các hàm bước để khởi chạy các dịch vụ sử dụng template CloudFormation. Theo lịch trình, workflow này sẽ chạy và dừng ở đúng các dịch vụ được thiết lập cấu hình trong giai đoạn setup CloudFormation.

1. Dừng Các Dịch Vụ Sử Dụng Workflow Hàm Bước Theo Thời Gian Định Sẵn

toi-uu-chi-phi-bang-tu-dong-hoa-nguon-luc-trong-moi-truong-non-production-1

Ảnh 1 – Architecture thể hiện workflow các hàm bước AWS khi dừng dịch vụ.

AWS Lambda function xuất hiện trong workflow trên bao gồm:

  • StopAuroraCluster: dừng mọi Aurora Cluster được setup ở mọi Region, bao gồm cả read replica;
  • StopRDSInstances: dừng mọi Instance RDS trừ các Aurora được setup ở mọi Region;
  • ScaleDownEKSNodeGroups: giảm số lượng nodegroups xuống thành 0 instances ở mọi Region;
  • ScaleDownASG: giảm số lượng các nhóm Auto Scaling bao gồm Elastic Beanstalk xuống 0 instance ở mọi Region. Ta có thể chỉnh sửa template CloudFormation để bổ sung thêm các giá trị tùy chỉnh.
  • StopEC2Instances: dừng mọi instance EC2 được setup ở mọi Region.

Khi sử dụng template AWS CloudFormation, ta thiết lập các dịch vụ và workflow theo yêu cầu như sau:

a. Khởi chạy template trong source account và source Region:

b. Điền các trường thông tin như phía trên, sau đó bấm Next.

Stack name: Đặt stack name theo nhu cầu của bạn.

ExcludeAuroraClusterArnListInCommaSeprated: Đặt dấu chấm để ngăn cách các ARN Aurora cluster mà doanh nghiệp không muốn dừng lại, nếu không cần, giữ nguyên các giá trị.

e.g.  arn:aws:rds:us-east-1:111111111111:cluster:aurorcluster1, arn:aws:rds:us-east-2:111111111111:cluster:auroracluster2

ExcludeRDSDBInstancesArnListInCommaSeprated: Sử dụng dấu phẩy để ngăn cách các ARN instance DB mà doanh nghiệp không muốn dừng lại, nếu không cần, giữ nguyên các giá trị.

e.g.   arn:aws:rds:us-east-1:111111111111:db:rds-instance-1, arn:aws:rds:us-east-2:111111111111:db:rds-instance-2

ExcludeEKSClusterNodeGroupsArnListInCommaSeprated: Sử dụng dấu phẩy để ngăn cách các ARN EKS clusters mà doanh nghiệp không muốn dừng lại, nếu không cần, giữ nguyên các giá trị.

e.g.   arn:aws:eks:us-east-2:111111111111:cluster/testcluster

ExcludeAutoScalingGroupIncludingBeanstalkListInCommaSeprated: Sử dụng dấu phẩy để ngăn cách các Beanstalk và các nhóm ARN Auto Clusters (ngoại trừ Amazon EKS) mà doanh nghiệp không muốn dừng lại, nếu không cần, giữ nguyên các giá trị. e.g.  arn:aws:autoscaling:us-east-1:111111111111:autoScalingGroup:6d5af669-eb3b-4530-894b-e314a667f2e7:autoScalingGroupName/test-0-ASG

ExcludeEC2InstancesIdListInCommaSeprated: Sử dụng dấu phẩy để ngăn cách các ID instance EC2 mà doanh nghiệp không muốn dừng lại, nếu không cần, giữ nguyên các giá trị.

e.g.  i-02185df0872f0f852, 0775f7e39513c50dd

ScheduleExpression: Đặt lịch cho các biểu thức cron (cron expression) mà bạn muốn chạy trong workflow.

c.     Chọn role IAM để khởi chạy template. Được cho là cách thực hành tốt nhất, lựa chọn role dịch vụ AWS CloudFormation để quản lý dịch vụ AWS và tài nguyên có sẵn cho từng user.

d.     Cho biết bạn mong muốn tạo nhiều tài nguyên bao gồm các role/chính sách IAM, sau đó chọn Create Stack.

2. Bắt Đầu Dịch Vụ Bằng Việc Sử Dụng Workflow Hàm Bước Trong Thời Gian Pre-Configured

Ảnh 2 – Architecture thể hiện workflow các hàm bước AWS để khởi chạy dịch vụ.

AWS Lambda function xuất hiện trong workflow trên bao gồm:

  • StartAuroraCluster: khởi động mọi Aurora Cluster được setup ở mọi Region, bao gồm cả read replica;
  • StartRDSInstances:  Khởi động mọi Instance RDS trừ các Aurora được setup ở mọi Region;
  • ScaleUpEKSNodeGroups: Tăng số lượng nodegroups tối thiểu từ 2, tối đa lên 4 instances ở mọi Region. Ta có thể chỉnh sửa template CloudFormation để bổ sung thêm các giá trị tùy chỉnh.
  • ScaleUpASG: Tăng số lượng các nhóm Auto Scaling bao gồm Elastic Beanstalk tối thiểu từ 2, tối đa lên 4 instances ở mọi Region. Ta có thể chỉnh sửa template CloudFormation để bổ sung thêm các giá trị tùy chỉnh.
  • StartEC2Instances: Khởi động mọi instance EC2 được setup ở mọi Region.

Khi sử dụng template AWS CloudFormation, ta thiết lập các dịch vụ và workflow theo yêu cầu như sau:

a. Khởi chạy template trong source account và source Region:

b. Điền các trường thông tin như phía trên, sau đó bấm Next.

Stack name: Đặt stack name theo nhu cầu của bạn.

ExcludeAuroraClusterArnListInCommaSeprated: Đặt dấu chấm để ngăn cách các ARN Aurora cluster mà doanh nghiệp không muốn khởi chạy, nếu không cần, giữ nguyên các giá trị.

For example:  arn:aws:rds:us-east-1:111111111111:cluster:aurorcluster1, arn:aws:rds:us-east-2:111111111111:cluster:auroracluster2

ExcludeRDSDBInstancesArnListInCommaSeprated: Sử dụng dấu phẩy để ngăn cách các ARN instance DB mà doanh nghiệp không muốn khởi chạy, nếu không cần, giữ nguyên các giá trị.

For example: arn:aws:rds:us-east-1:111111111111:db:rds-instance-1, arn:aws:rds:us-east-2:111111111111:db:rds-instance-2

ExcludeEKSClusterNodeGroupsArnListInCommaSeprated: Sử dụng dấu phẩy để ngăn cách các ARN EKS clusters mà doanh nghiệp không muốn khởi chạy, nếu không cần, giữ nguyên các giá trị.

For example: arn:aws:eks:us-east-2:111111111111:cluster/testcluster

ExcludeAutoScalingGroupIncludingBeanstalkListInCommaSeprated: Sử dụng dấu phẩy để ngăn cách các Beanstalk và các nhóm ARN Auto Clusters (ngoại trừ Amazon EKS) mà doanh nghiệp không muốn khởi chạy, nếu không cần, giữ nguyên các giá trị. 

For example:  arn:aws:autoscaling:us-east-1:111111111111:autoScalingGroup:6d5af669-eb3b-4530-894b-e314a667f2e7:autoScalingGroupName/test-0-ASG

ExcludeEC2InstancesIdListInCommaSeprated: Sử dụng dấu phẩy để ngăn cách các ID instance EC2 mà doanh nghiệp không muốn khởi chạy, nếu không cần, giữ nguyên các giá trị.

For example: i-02185df0872f0f852, 0775f7e39513c50dd

ScheduleExpression: Đặt lịch cho các biểu thức cron (cron expression) mà bạn muốn chạy trong workflow.

c.     Chọn role IAM để khởi chạy template. Được cho là cách thực hành tốt nhất, lựa chọn role dịch vụ AWS CloudFormation để quản lý dịch vụ AWS và tài nguyên có sẵn cho từng user.

d.     Cho biết bạn mong muốn tạo nhiều tài nguyên bao gồm các role/chính sách IAM, sau đó chọn Create Stack.

Dọn Dẹp

Xóa hết các tài nguyên không dùng đến để tránh các chi phí phát sinh không đáng có trong tương lai.

Kết Luận

Bài viết này đã trình bày một vài giải pháp giúp cho doanh nghiệp có thể tối ưu chi phí bằng tự động hóa việc khởi động/dừng cho dịch vụ AWS trong môi trường phi sản xuất. Tối ưu chi phí và quản trị tài chính trong đầu tư cloud được coi là những bước đi tiên phong cho mọi doanh nghiệp muốn dẫn đầu thị trường trong việc ứng dụng cloud hiệu quả.

Về VTI Cloud

VTI Cloud là Đối tác cấp cao (Advanced Consulting Partner) của AWS, với đội ngũ hơn 50+ kỹ sư về giải pháp được chứng nhận bởi AWS. Với mong muốn hỗ trợ khách hàng trong hành trình chuyển đổi số và dịch chuyển lên đám mây AWS, VTI Cloud tự hào là đơn vị tiên phong trong việc tư vấn giải pháp, phát triển phần mềm và triển khai hạ tầng AWS cho khách hàng tại Việt Nam và Nhật Bản.

Xây dựng các kiến trúc an toàn, hiệu suất cao, linh hoạt, và tối ưu chi phí cho khách hàng là nhiệm vụ hàng đầu của VTI Cloud trong sứ mệnh công nghệ hóa doanh nghiệp.

Liên hệ với chúng tôi: Tại đây

Nguồn: Ashutosh Pateriya, Nirmal Tomar từ aws.amazon.com

Related news

what’s up at VTI