AWS Thai Blog

5 AWS Cost Optimization Best Practices

บน AWS เราสามารถทำ Cost Optimization หรือ การใช้งาน resource ให้มีความคุ้มค่ามากที่สุดเพื่อลดค่าใช้จ่ายที่เกิดขึ้นได้ ซึ่งจะทำให้เราสามารถนำค่าใช้จ่ายที่ลดลง มาสร้างสรรค์ innovation หรือ experiment ใหม่ๆ เพื่อเพิ่มประสิทธิภาพของบริษัท หรือองค์กร ในโพสต์นี้เราจะมาเรียนรู้เกี่ยวกับ Cost Optimization Best Practices กันครับ

5 Best Practices ในการทำ Cost Optimization บน AWS

1. ทำ Rightsizing กับ Resource (การเลือกขนาดของ resource ให้เหมาะกับการใช้งาน)

การเลือกขนาดของ resource ให้เหมาะสม จะต้องตอบโจทย์ทาง business requirement, ด้านราคา, และด้านประสิทธิภาพ ตัวอย่างถ้ามีการใช้งาน EC2 instance ขนาด instance m6i.4xlarge ซึ่งมี 16 vCPU, Memory 64 GiB มีค่าใช้จ่าย $0.96 ต่อชั่วโมง, เมื่อมีการใช้แอปพลิเคชัน ไปซักระยะ เช่น ครบ 1 รอบการทำงานของแอปพลิเคชัน เราจะเริ่มเห็น utilization ของ resource ที่เกิดขึ้น เช่น vCPU, Memory ซึ่งสามารถ monitor ได้โดยใช้ Amazon CloudWatch, สามาถ monitor memory usage โดยใช้ CloudWatch Agent ดูรายละเอียดได้ที่นี่ ถ้าพบว่าการใช้งาน หรือ utilization ใช้ค่อนข้างน้อย สามารถปรับขนาดของ EC2 instance ได้เช่น ปรับเหลือขนาด m6i.larget มี 2 vCPU, Memory 8 GiB ถ้ามีการทดสอบประสิทธิภาพแล้วไม่มีปัญหา ก็จะช่วยประหยัดค่าใช้จ่ายไปได้กว่า 87.5%

แนวทางเรื่องปรับ Rightsizing ยังสามารถ optimize เพิ่มเติมได้เช่น

  • เลือก Processor ให้เหมาะสม เช่น แอปพลิเคชันสามารถใช้งานบน arm architecture บน Linux, AWS จะมี processor Graviton ที่ช่วยปรับปรุงเกี่ยวกับ price performance คือราคาถูกลง และ performance ที่ดีขึ้น, รวมทั้งในกรณีที่ใช้ Fully Managed service เช่น Amazon RDS ก็สามารถเลือกใช้ Instance type ที่เป็น processor Graviton ได้, เรียนรู้เพิ่มเติมเกี่ยวกับการเปลี่ยนมาใช้ Graviton ได้ที่นี่
  • เมื่อมี EC2 Instance Generation ใหม่ๆออกมา เช่นปัจจุบัน มี EC2 instance type: C6i (เป็น Intel processor generation ที่ 6) ก็จะมีประสิทธิภาพและ performance ที่ดีกว่า C5 (เป็น Intel processor generation ที่ 5) ดังนั้นเราสามารถเปลี่ยน Instance type ที่เป็น generation ที่ใหม่กว่าได้ สามารถเรียนรู้เพิ่มเติมเกี่ยวกับ EC2 instance type ต่างๆได้ที่นี่

AWS Compute Optimizer จะเป็น service ที่เข้ามาช่วยแนะนำ การเลือกขนาด resource ให้เหมาะสม ซึ่งจะใช้ Machine Learning ในการวิเคราะห์การทำงานของ workload และสรุปผลเป็นคำแนะนำ

ภาพที่ 1: AWS Compute Optimizer Dashboard

ตามภาพที่ 1 ตัวอย่าง Dashboard ของ AWS Compute Optimizer จะแสดงข้อมูลเกี่ยวกับ EC2 instance เช่น สีแดง Under-provisioned คือ EC2 instance ที่มีขนาดเล็กเกินไป เมื่อเทียบกับ workload, สีเขียว Optimized คือมีขนาดที่ เหมาะสมกับ workload, และ สีส้ม Over-provisioned คือ EC2 instance มีขนาดใหญ่เกินไป ซึ่งแต่ละข้อสามารถคลิกเข้าไปดู รายละเอียดของแต่ instance ได้ ในส่วนของ EBS volumes สีเขียวคือ Optimized EBS volumes มีขนาดที่เหมาะสม, สีแดง Not-optimized คือยังสามารถปรับเพิ่มประสิทธิภาพได้

ภาพที่ 2: Recommendations สำหรับ EC2 Instance

2. ใช้ Autoscaling เพื่อเพิ่ม Elasticity หรือความยืดหยุ่นในการใช้งาน

จุดเด่นในการ run workload บน AWS คือการเพิ่มความยืดหยุ่นในการ scale เพื่อให้มีการขยาย resource ให้รองรับกับ workload ที่เพิ่มมากขึ้น และลด resource เมื่อ workload ลดน้อยลง, Auto Scaling ช่วยให้สามารถปรับ capacity ของ resource ได้อย่างเหมาะสมตามการใช้งาน ช่วยให้ลด over-provisioning และยังสามารถตั้ง schedule ในการ scale ได้อีกด้วย, สามารถเรียนรู้ hands-on workshop เกี่ยวกับการใช้ Autoscaling ใน Web application ได้ที่นี่

ภาพที่ 3: การใช้งาน Auto Scaling จะช่วยให้ปรับ capacity ตาม workload ที่ใช้งานจริงมากยิ่งขึ้น

3. เลือก Pricing model ให้เหมาะสม

AWS มี Pricing model 4 แบบ สามารถเลือกใช้ให้เหมาะกับการใช้งาน คือ

ภาพที่ 4: Pricing model บน AWS

  1. On-Demand: จ่ายตามใช้งานจริง ไม่ต้องมีการทำ commitment การใช้งาน เช่น ถ้าใช้งาน EC2 instance ที่เป็น Linux จะคิดค่าใช้จ่ายตามจริงเป็นวินาที (ถ้าเป็น Windows จะคิดเป็นรายชั่วโมง) เหมาะสำหรับเริ่มต้นการใช้งานหรือไม่ได้ใช้ตลอดเวลา
  2. Reserved Instances (RI): มีการทำ commitment ว่าจะมีการใช้งานเป็นระยะยาว 1 ปี หรือ 3 ปี และได้ส่วนลด เหมาะกับ service non-compute เช่น Amazon RDS, Amazon ElastiCache, Amazon OpenSearch Service, Amazon Redshift, Amazon DynamoDB, เหมาะสำหรับ workload ที่ต้องใช้งานตลอดเวลา
    1. Convertible Reserved Instances จะมีความยืดหยุ่นมากกว่า แต่จะส่วนลดน้อยกว่า Standard Reserved Instances สามาถเปลี่ยนแปลง Instance family, เพิ่ม Instance size, เปลี่ยน OS Type, Tenancy ได้
    2. Standard Reserved Instances จะสามารถเพิ่ม Instance size และ Availability Zone ได้
  3. Savings Plans: มีการทำ commit ว่าจะใช้ค่าใช้จ่ายต่อชั่วโมงเป็นเท่าไหร่ และใช้งานเป็นระยะยาว 1 ปี หรือ 3 ปี จะเพิ่มความยืดหยุ่นในการใช้งาน เหมาะสำหรับ Compute service เช่น Amazon EC2, AWS Lambda, AWS Fargate โดยจะมีการ commit ในรูปแบบของ $/hour เป็น Long term 1 ปี หรือ 3 ปี เหมาะกับ workload ที่ต้องใช้งานตลอด
    1. Compute Savings Plans จะมีความยืดหยุ่นมากกว่า แต่จะส่วนลดน้อยกว่า EC2 Instances Savings Plans สามารถเปลี่ยนเเปลง Instance family, เพิ่ม Instance size, Region, เปลี่ยน OS Type, Tenancy, Compute options (ระหว่าง EC2, Fargate, Lambda)
    2. EC2 Instances Savings Plans จะสามารถเพิ่ม Instance Size, เปลี่ยน OS Type, Tenancy ได้
  4. Spot Instances: คือการยืม resource จาก compute pool resource กลางของ AWS มาใช้งาน จะได้ประโยชน์ในเรื่องการ save cost มากสูงสุดถึง 90% เทียบกับประเภท On-Demand เหมาะกับ stateless หรือ workload ที่รองรับ การทำ fault tolerant สามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Spot Instances ผ่าน Hands-on workshop ที่นี่

ภาพที่ 5: รายละเอียดของ Reserved Instance (RI) และ Savings Plans

สรุปคือถ้าเป็น Non Compute service เช่น Amazon RDS, Amazon ElastiCache สามารถซื้อเป็น Reserved Instances เพื่อให้ได้ส่วนลด , ส่วนที่เป็น Compute service เช่น Amazon EC2, AWS Fargate, AWS Lambda จะสามารถซื้อเป็น Savings Plans

ในส่วนของ Reserved Instance สามารถเข้าไปที่ AWS Cost Management และคลิก Recommendations ในส่วนของ Reservations เพื่อดูคำแนะนำในการซื้อ Reserved Instance (RI) และสามารถเลือกรายละเอียด ของ Service ต่างๆที่ด้านขวา ตรง Select recommendation type ตามภาพที่ 6

ภาพที่ 6: Reserved Instances ใน AWS Cost Management

ในส่วนของ Saving Plans สามารถดูคำแนะนำในการซื้อ Saving Plans โดยที่เข้ามาที่ AWS Cost Management และ คลิก Recommendations ในส่วนของ Saving Plans และเลือก option ต่างๆ ให้เหมาะกับการใช้งาน

ภาพที่ 7: Savings Plans ใน AWS Cost Management

4. Optimize ในส่วนของ Storage

การเลือก storage class ให้เหมาะสม สำหรับ Amazon Elastic Block Store (EBS) และ Amazon Simple Storage Service (S3)

Amazon Elastic Block Store (EBS) มี Storage Type ให้เลือก เช่น Provisioned IOPS SSD เหมาะสำหรับงานที่ต้องเน้น IOPS สูงๆ , General Purpose SSD เหมาะสำหรับใช้งานทั่วไป, Throughput Optimized HDD เหมาะกับงานที่เน้นเรื่อง Throughput และ Cold HDD ซึ่งจะเป็น EBS ที่ราคาถูกที่สุด

เช่นเดียวกับ Amazon EC2, EBS ก็มีออก Generation ใหม่ๆ เช่น General Purpose SSD GP3 ซึ่งเป็น generation ที่ใหม่กว่า GP2 โดยมีข้อเด่นคือจะได้ 3000 IPOS ตั้งเเต่ byte แรก ไม่จำเป็นต้องเพิ่มขนาด storage เเล้วถึงจะได้ IOPS ที่เพิ่มขึ้น ดังนั้นแนะนำให้มีการเปลี่ยน EBS Storage เป็น generation ใหม่ๆ

ในส่วนของ Amazon Simple Storage Service (S3) จะมี Storage Class ให้เลือก เช่น

  • Standard คือมีการกระจาย copy ของ data ไปถึง 3 Availability Zones และสามารถเรียกใช้งาน data ได้อย่างรวดเร็ว
  • Intelligent Tiering คือ ให้ AWS ใช้ Machine Learning ในการวิเคราะห์รูปแบบการเข้าใช้งาน data และเลือก storage class ให้
  • ในกรณีที่ data ไม่จำเป็นต้องมีการ access บ่อยๆ ก็จะมี Standard Infrequent Access และ One Zone Infrequent Access
  • ส่วนการเก็บ data เป็นแบบ archival หรือเก็บแบบยาวนาน ก็จะมี storage class
    • Glacier Instant Retrieval ที่รองรับการดึง data แบบทันที ​
    • Glacier Flexible Retrieval รองรับการดึง data แบบหลักนาที หรือชั่วโมง ,
    • Glacier Deep Archive ซึ่งจะราคาถูกที่สุด และใช้เวลาในการดึง data มาใช้งานหลายชั่วโมง

AWS Compute Optimizer สามารถให้คำแนะนำเกี่ยวกับ EBS volume ให้เหมาะสมกับ workload เช่น แนะนำ Storage type, Size และ IOPS

ภาพที่ 8: AWS Compute Optimizer ก็สามารถ recommend ในส่วนของ Storage ได้

Amazon S3 Storage Lens คือ feature ที่ช่วย ให้เห็นภาพรวมการใช้งาน Amazon S3 และยังสามารถให้คำแนะนำ ด้าน cost และ data protection ได้อีกด้วย

ภาพที่ 9: Amazon S3 Storage Lens

5. วัดผล, monitor และ ปรับปรุงอยู่เสมอ

ในด้านการทำ cost optimization สิ่งที่สำคัญคือจะต้องมีการตกลงร่วมกัน ระหว่างทีมงาน เกี่ยวกับ cost allocation tagging , การตั้งเป้าหมายและ review , การให้ทีมงานมีความเข้าใจ เกี่ยวกับการวาง architect และ cost ต่างๆ และสุดท้ายต้องมีการทำ cost optimization อย่างต่อเนื่อง หรือมีการมอบหมายให้ทีมงานดูแล เช่น monitor utilization อย่างต่อเนื่อง,​ การดูแลค่าใช้จ่ายในการถ่ายโอนข้อมูล สามารถศึกษารายละเอียดบล็อคโพสต์ภาษาไทยได้ที่นี่

AWS มี Solutions: Cloud Intelligence Dashboard คือการใช้ Amazon QuickSight ทำ visualization ออกมาเป็น dashboard เพื่อวิเคราะห์การใช้งาน resource ต่างๆ โดยใช้ข้อมูลจาก AWS Cost and Usage Reports (CUR) หลังจากที่เห็นภาพรวมของค่าใช้จ่าย ก็จะสามารถ focus resource ที่มีค่าใช้จ่ายสูง และ drill down ไปเพื่อลดค่าใช้จ่าย และเพิ่มประสิทธิภาพของต้นทุน โดยสามารถเข้าลิ้งค์รายละเอียดทางด้านล่าง

ภาพที่ 10: Cloud Intelligence Dashboard

เท่านี้เราก็จะเห็นภาพรวม best practices ในการทำ Cost optimization กันแล้วนะครับ หวังว่าท่านผู้อ่านจะได้รับประโยชน์และนำไปปรับใช้กับการทำ cost optimization กันครับ