# Cost Optimization on AWS Cloud - Part 2

## ကျွန်တော်တို့ အရင် [**article**](https://blog.awsugmm.org/cost_and_billing/cost_optimization) မှာတော့ Cost Optimize လုပ်ဖို့လိုအပ်တဲ့ အရာလေးတွေနဲ့ Billing သဘောတရားများကို အကြမ်းဖျင်းအနေနဲ့ ပြောပြီးပြီဆိုတော့ ဒီ Part 2 မှာနောက်ထပ် အကြောင်းအရာလေးတွေ ကိုထပ်ပြီးဆွေးနွေးကြရအောင်ဗျာ။&#x20;

{% hint style="info" %}
Cost Optimization နဲ့ ပတ်သက်တဲ့ ဆက်စပ်နေတဲ့ နောက်ထပ်အကြောင်း အရာတစ်ခုက တော့ Right Sizing   ပါ။ Right Sizing ပြုလုပ်တာက ကိုယ့် ရဲ့ infrastructure cost ကို သိသိသာသာသက်သာစေပါတယ်။&#x20;
{% endhint %}

AWS မှာ Right Sizing လုပ်မယ်ဆိုရင်တော့ ကျွန်တော်တို့ အနေနဲ့ ရှေ့ article မှာပြောခဲ့သလိုတွေပြုလုပ်နိုင်ပါတယ်။ နောက်ပြီးတော့ ကျွန်တော်တို့ အနေနဲ့ AWS က သူ Ecosystem မှာ Right Sizing ပြုလုပ်နိုင်ဖို့ ထုတ်ပေးထားတဲ့ Tools တွေကို သုံးပြီးလည်းပြုလုပ်နိုင်ပါတယ်။&#x20;

* ပထမဆုံးတစ်ခုက **AWS Cost Explorer** ပါ။ ဒီကောင်လေးကတော့ ကိုယ်သုံးနေတဲ့ ဘယ် resource တွေက ဘယ်လောက်တော့ ကုန်ကျနေတယ်ဆိုတာကိုပြန်ကြည့်လို့ရပါတယ်။ နောက်ပြီး လွန်ခဲ့တဲ့ ၇ရက် ၁လ ၂လ ကကိုယ်သုံးခဲ့တဲ့ resource တွေရဲ့ utilization ကိုအခြေခံပြီး ဘယ် resource တွေကတော့ reserved လုပ်သင့်တယ် တစ်ချို့ဆိုလည်း Down Sizing လုပ်သင့်တယ် ဘာညာစတာတွေကို ပြပေးထားတဲ့ အတွက် ကျွန်တော့်တို့ က သူ့ tools က ထုတ်ပးတဲ့ Data တွေနဲ့ ကိုယ့် environment , organization ကလိုချင်တဲ့ လိုအပ်တဲ့အရာတွေနဲ့ ကိုက်ညီတယ်ဆိုရင် ကျွန်တော်တို့က လွယ်လွယ်ကူကူပဲ Cost Optimize ပြုလုပ်နိုင်မှာပါ။&#x20;

![AWS Cost Explorer](https://511706876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx_1FIX5j8jW_GuTTY-%2F-LzeGiInvG9nvfbxeVMJ%2F-LzeW7NSWz6fwiWobTmd%2FScreenshot%20from%202020-01-28%2011-28-50.png?alt=media\&token=ce8144b1-96ff-4f26-a343-63b0900a3ded)

![AWS Cost Explorer](https://511706876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx_1FIX5j8jW_GuTTY-%2F-LzaVsR9edOjXqCUDTK0%2F-LzaZSCeE7A3Ck8-VR5h%2FScreenshot%20from%202020-01-27%2016-59-31.png?alt=media\&token=785a8792-cfde-4deb-b9b5-831bb07cb555)

* နောက်ထပ်တစ်ခုကတော့ AWS Trusted Advisor ပါ။ **သူကတော့ ကိုယ့် AWS account ရဲ့ Support Plan ပေါ်မူတည်ပြီး သုံးလို့ရတဲ့ Features တွေတော့ ကွာခြားချက်ရှိပါတယ်။** ကိုယ်တော်တို့ ကတော့ Business Plan ယူထားတဲ့ အတွက် Feature အစုံသုံးလို့ရနေပါတယ်။ Trusted Advisor ထဲက Cost Optimization Checks ဆိုတဲ့ feature ရဲ့ အကူအညီနဲ့လည်း Low utilization EC2 Instance တွေ Idle ဖြစ်နေတဲ့ RDS Instance တွေ မသုံးပဲ ထားမိနေတဲ့ Resources တွေကို ပြပေးပါတယ်။ အဲ့သည်လိုပြပေးတဲ့ အတွက်ကျွန်တော်တို့က ဘယ် resource တွေကကိုယ်တစ်ကယ်မသုံးပဲ ပိုက်ဆံကုန်နေသလဲ ဆိုတာကို မြန်မြန်ဆန်ဆန်သိနိုင်တာပေါ့ဗျာ။&#x20;

![AWS Trusted Advisor](https://511706876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx_1FIX5j8jW_GuTTY-%2F-LzaaMEGPMKrTPuLP6uC%2F-Lzab5c1WSsg0P9Qkdqu%2FScreenshot%20from%202020-01-27%2017-10-47.png?alt=media\&token=3eca4140-00e7-48d3-8925-33f9ca2d4649)

![Trusted Advisor](https://511706876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx_1FIX5j8jW_GuTTY-%2F-LzeGiInvG9nvfbxeVMJ%2F-LzeWTnhsaeOn3TEWAEg%2FScreenshot%20from%202020-01-28%2011-30-25.png?alt=media\&token=387eda54-3aad-4ce8-bfef-4326ecb991ec)

* နောက်ထပ်တစ်ခုကတော့ AWS Compute Optimizer ဆိုတဲ့ Tools လေးပါ။ သူကတော့ AWS ရဲ့ Service တစ်ခုအနေနဲ့ဖြစ်လာတာတော့ မကြာသေးပါဘူး။ ဒါပေ့မယ် တော်တော်လေးအသုံးဝင်တဲ့ Tool တစ်ခုပါ။ Compute Optimizer ဆိုတဲ့ အတိုင်းပဲ EC2 Instance တွေ Optimize ဖြစ်ရဲ့လား Over Provision/Under Provision ဖြစ်နေလားဆိုတာကိုကြည့်လို့ရမယ်၊ မြန်မြန်ကြည့် မြန်မြန်သိတော့ Cost Optimize မြန်မြန်လုပ်နိုင်တာပေါ့ဗျာ။  လက်ရှိမှာတော့ Compute Resource တွေထဲကမှာ AWS EC2 Instance နဲ့ Autoscaling Group တွေအတွက်ပဲ အသုံးပြုလို့ရနိုင်ပါသေးတယ်။ နောက်ထပ်တစ်ခုက အခုအချိန်မှာတော့ AWS Region ၅ ခုမှာပဲ အသုံးပြုနိုင်ပါသေးတယ်။&#x20;

![AWS Compute Optimizer](https://511706876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx_1FIX5j8jW_GuTTY-%2F-LzacshP7WvhbcPrelKm%2F-LzafVhZZD2ecxDEse1K%2FScreenshot%20from%202020-01-27%2017-27-29.png?alt=media\&token=42d377b2-7ffa-42c2-92f5-67801c51c54c)

ကျွန်တော့်ကိုယ်ပိုင် အမြင်နဲ့ပြောရရင်တော့ ဒီ tools လေးတွေကတော်တော် အထောက်အကူပြုပါတယ်။ ကျွန်တော်တို့အနေနဲ့ Instance တစ်လုံး နှစ်လုံးဆိုရင်တော့ tools တွေ အကူအညီမယူပဲ ကိုယ့်ဘာသာကိုယ်တွက်လို့ရနိုင်ပါတယ်။ Server အလုံး တစ်ဆယ် နှစ်ဆယ် တစ်ရာ နှစ်ရာဖြစ်လာပြီဆိုရင်တော့ ဒီ tools တွေရဲ့ အကူအညီနဲ့ Monitoring Metric ကရတဲ့ဒေတာတွေနဲ့ ပေါင်းပြီး မှန်မှန်ကန်ကန်နဲ့ မြန်မြန်ဆန်ဆန် Cost Optimized ပြုလုပ်နိုင်မှာဖြစ်ပါတယ်။&#x20;

## Reserved Instance

နောက်ထပ် Cost Optimize လုပ်နိုင်မဲ့ အချက်ကတော့ မိမိ Infrastructure က Steady Workload လိုမျိုးရှိနေပြီဆိုရင် ကိုယ်ရဲ့ Business နဲ့လည်းကိုက်ညီမယ်ဆိုရင် Reserved လုပ်ခြင်းကို ရွေးချယ် ။ ဥပမာ ကျွန်တော်တို့ Gym မှာပိုက်ဆံပေးပြီးသွားဆော့သလိုပဲ တစ်နေ.ဆော့ရင် ( On-Demand ) ဆိုရင် စျေးတစ်မျိုး ၁နှစ်စာကြိုပေးပြီးဆော့မယ်ဆိုရင်စျေးတစ်မျိုး (  AllUpFront ) ၁ နှစ်တော့ဆော့မယ် တစ်လချင်တစ်မျိုး ( NoUpfront ) ၁နှစ်တော့ ဆော့မယ် ၆လတစ်ဖြတ်ပေးမယ် ( PartialUpFront ) ဆိုတဲ့ သဘောတရားပါပဲ။ ဆိုလိုတာက ကိုယ့်ရဲ့ Infra အနေအထား မြွေဖားက ပြောင်းဖို့မရှိဘူး ဒါမှမဟုတ် တစ်နှစ်အတွင်းဒီ ဟာကို အပြီပြင်သုံးမယ်ဆို Reserved Instance က On-Demand ထက်ပို စျေးသက်သာပါတယ်။ ဆိုတော့ Compute EC2 Reserved Instance သုံးတော့မယ်ဆို သိသင့်တာလေးတစ်ခုက သူရဲ့ အမျိုးအစားလေးပါပဲ ဘာတွေလဲဆိုတော့&#x20;

1. **Standard**&#x20;
2. **Convertible**&#x20;

တွေပဲဖြစ်ပါတယ်။ အဲ့ထဲမှာ Standard က  Convertible ထက်ပိုပြီးစျေးကိုသက်သာစေပါတယ်။ အဲ့နှစ်မျိုးဘာတွေကွာလဲ ဆို တော့ Standard က သာမန် တစ်နှစ် သုံးနှစ် Reserved လုပ်လိုက်ပြီဆိုရင် သူက Region or AZ ပြောင်းလိုတော့ရပါတယ် နောက်ပြီး Instance Flexible ရတယ်ဆို တော့ Same Instance Family က Size အတိုးလျော့လုပ်လို.ရပါတယ် ဒါပေမဲ့ Instance Family တော့ပြောင်းမရပါဘူး ဆိုလိုတာ က T-series standard reserved ကို တစ်နှစ်ဝယ်ထားရင်  M-series ကို ပြောင်းမရပါဘူး။ ဒါလေးက Standard Reserved ရဲ့ Limitation လေးပေါ့။ Convertible ဆိုရင်တော့ Standard ထက်နည်းနည်းလေးပိုစျေးပေးရမယ် ဒါပေမဲ့ သူက convertible ဆိုတဲ့အတိုင်း Instance Size or Family လေးတွေပြောင်းလို.ရတယ်။ အကျယ်တဝန့် ကိုလည်း သူရဲ့ Official Documentation မှာဝင်ရောက်ဖတ်လို.ရပါတယ်။ ဒါဆို reserved instance ကို ယေဘူယျ တော့ သဘောပေါက်လောက်ပြီထင်ပါတယ်။ ခြုံပြောရရင်တော့ ကျွန်တော်တို့ က အချိန်ဘယ်လောက်အတိုင်းအတာသုံးပါမယ်ဆိုပြီး commit လုပ်ထားမယ် အချိန်များများ commit လုပ်ရင် Discount ( 31%\~75% ) လောက်ထိ များများသက်သာမယ်ပေါ့ဗျာ။&#x20;

{% hint style="success" %}
<https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-types.html>
{% endhint %}

{% hint style="success" %}
<https://aws.amazon.com/blogs/aws/new-instance-size-flexibility-for-ec2-reserved-instances/>
{% endhint %}

{% hint style="warning" %}
Reserved ဝယ်တဲ့ အခါမှာ ကိုယ်တစ်ကယ်သုံးချင်တဲ့ Region နဲ့ တစ်ကယ်သုံးခင်တဲ့ လိုအပ်တဲ့ အရေအတွက် ကိုပဲဝယ်ယူသင့်ပါတယ်။ ပိုဝယ်မိလိုက်တာတို့ ဘာတို့ဆိုရင် ဒီကုန်ကျစရိတ်ကို ကိုယ်ကမသုံးလည်းပဲ ပေးချေနေရတော့မှာပါ။&#x20;
{% endhint %}

![RI Standard Convertible](https://511706876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx_1FIX5j8jW_GuTTY-%2F-Lzc7hYBgNblbC6_9rNr%2F-Lzc7y82M8VEQAN8Rooh%2FScreenshot%20from%202020-01-28%2000-23-47.png?alt=media\&token=d79c4722-8579-495a-b9dc-db7b47bac83e)

## Elasticity&#x20;

Cost Optimize ပြုလုပ်နိုင်မဲ့ နောက်တစ်ချက်အနေနဲ့ကတော့ Elasticity ပဲဖြစ်ပါတယ်။

Elasticity အနေနဲ့ဆိုရင် အဓိက ၂ ပိုင်းခွဲလို့ရတယ်ပေါ့နော်

1. **Time-Based**
2. **Volume-Based**&#x20;

#### **Time-Based**&#x20;

မှာသိသိသာသာ Cost လျော့နိုင်တာကတော့ ကျွန်တော်တို့ရဲ့ **Development/QA/Staging Environment က Server တွေကို ကိုယ့်ရုံးချိန်အလိုက် အပိတ်အဖွင့်ပြုလုပ်တာမျိုးပေါ့။** AWS EC2 Instance တွေက EBS ကလွဲရင် ပိတ်ထားရင် ပိုက်ဆံမကောက်ပါဘူး။ အဲ့သည်အတွက် ရုံးချိန်ပြင်ပနဲ့ စနေ တနင်္ဂနွေလိုနေ့မျိုးတွေမှာ ကိုယ်ရဲ့ Development/QA/Staging environment က Instance တွေကို [EC2 Instance Scheduler](https://aws.amazon.com/answers/infrastructure-management/instance-scheduler/) နဲ့ Auto **START/STOP** လုပ်ထားမယ်ဆိုရင်ရုံးချိန်အတွင်းသုံးတဲ့ ၈ နာရီစာလောက်ပဲကုန်ကျမှာဖြစ်ပါတယ်။&#x20;

{% hint style="danger" %}
Please don't ever try on your production environment. If yes, do as your own RISK !!
{% endhint %}

![Turn of resources](https://511706876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx_1FIX5j8jW_GuTTY-%2F-LzeW_DH46H0XUMziWLY%2F-LzeWkAhBenKAjsbqIXo%2FScreenshot%20from%202020-01-28%2011-27-58.png?alt=media\&token=ec4c0a85-4fa2-45fc-a742-a10f6fee3961)

#### Volume-Based

&#x20;ဥပမာ ကျွန်တော်တို့ရဲ့ Web Server က LoadBalancer အနောက်မှာ အမြဲတမ်း ၂ လုံး Up and Running ဖြစ်နေရမယ်ဆိုပါစို့။ အဲ့သည်မှာ ကျွန်တော်တို့ Company က Promotion ချလို့ User Base ကအရမ်းများလာပြီဆိုရင် အနောက်က web server ၂ လုံးက Load မခံနိုင်တော့ဘူးဆိုရင် ကျွန်တော်တို့ ကလုပ်စရာ ၃ မျိုးလောက်ဖြစ်လာပြီ။ အဖြေရှာရင် ကျွန်တော်တို့က User တွေအသုံးမများခင်မှာ ကြိုတင်ပြီးတော့ server ကို instance size ကြီးကြီးသုံးထားမလား ၊ အဲ့လိုသုံးလိုက်ပြန်ရင်လည်း User တွေမသုံးခင် ကြိုပြင်ထားရဆိုတော့ Cost effective လည်းမဖြစ်လှဘူး မသုံးပဲကြိုပေးနေရမှာ၊ နောက်တစ်ခုက User တွေများလာတော့မှ Server ကို Vertically Scaling - CPU, Memory တွေထပ်တိုတာမျိုး လုပ်မလား၊ သည်လိုဆိုရင်လည်း အဆင်မပြေသေးပြန်ဘူး။ အဲ့သည်မှာ Elasticity ဆိုတာလိုလာတယ်။ ဒီနေရာမှာ Customer Demand ဘယ်လောက်များများ ကျွန်တော်တို့ Infrastructure က အလိုလလျောက် ကြုံ့နိုင်ဆံ့နိုင်မယ်ဆိုရင် Business လည်းမထိခိုက်ဘူး Customer တွေရဲ့ စိတ်ကျေနပ်မှုကိုလည်း တိုးမလာရင်တော မကျသွားတော့ဘူးဗျာ။ နောက်တစ်ခုက အဓိက အချက်ဖြစ်တဲ့ Cost Effective လည်းဖြစ်မယ်ဆိုရင် Win-win ပဲ။ သည်တော့ ကျွန်တော်တို့ [**AWS Auto Scaling**](https://aws.amazon.com/autoscaling/) လိုဟာမျိုးကိုသုံးပြီး Customer Demand နဲ့ကိုက်ညီအောင် Auto Scale Out / In လုပ်လို့ရနိုင်မယ်။ ဆိုလိုတာကတော့ အသုံးပြုတဲ့ User တွေများလာလို့ CPU Utilization , Network Utilization , Memory Utilization ဘယ်လောက်ရောက်ရင်တော့ အစက Server ၂ လုံးရှိတာကနေ နောက်ထပ် ၃ လုံးလား ၅လုံးလာ Auto Scale Out လုပ်လို့ရနိုင်မယ်။ အိုကေ အဲ့မှာ User တွေသိပ်မသုံးတော့ဘူး ဆိုလည်း Server ရဲ့ resource utilization လည်းပြန်ကျသွားရင် ကျွန်တော်တို့က Auto Scale In ဖြစ်အောင်လုပ်ထားမယ် Elasticity ရှိမယ်ဆိုရင် အပေါ်မှာပြောခဲ့သလိုပဲ Win-win solution ဖြစ်မယ်ပေါ့‌ဗျာ :)&#x20;

![Auto Scaling](https://511706876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx_1FIX5j8jW_GuTTY-%2F-Lzc8DeTOQxuH78syfuH%2F-LzcBWBUSjtihWgKFFzy%2FScreenshot%20from%202020-01-28%2000-39-34.png?alt=media\&token=f021b8e5-8d8c-4e97-a410-239f560df09a)

## Spot Instance

[**Spot Instance**](https://aws.amazon.com/ec2/spot/) အသုံးပြုခြင်းဟာလည်း Cost Optimization လုပ်တဲ့နေရာမှာ အရေးပါပါတယ်။ Spot Instance တွေက ကျွန်တော်တို့သုံးနေတဲ့ On-Demand Instance တွေနဲ့ စျေးနှုန်းခြင်းယှဉ်ရင် 60% ကနေ 90% လောက်ထိကိုသက်သာပါတယ်။ Spot Instance ကတော့ AWS ကသူရဲ့ ပိုလျံနေတဲ့ spare compute resource တွေကို စျေးသက်သက်သာသာနဲ့ ငှားတဲ့ သဘောပါပဲ။ Spot Instance အကြောင်းကို [**ဒီမှာ** ](https://blog.awsugmm.org/compute/reduce_cloud_compute_cost_with_ec2_spot_instance)လည်းဖတ်ရှုလို့ရပါတယ် ခင်ဗျာ။

![Spot Instance cost saving](https://511706876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx_1FIX5j8jW_GuTTY-%2F-LzeX6LtOC0x6VbsUMlT%2F-Lze_fU98pGC-FtKo2Tg%2FScreenshot%20from%202020-01-28%2011-42-36.png?alt=media\&token=345365b5-78a0-490a-961a-a2d98e0c4814)

သည်လောက်ဆိုရင် တော့ မိမိတို့ Organization နဲ့ကိုက်ညီမဲ့ Cost Optimization ကိုအလွယ်တကူပြုလုပ်နိုင်မယ်လို့ မျှော်လင့်မိပါတယ်။ နောက်ထပ် နောက်ထပ် အကြောင်းအရာတွေနဲ့ပတ်သက်ပြီး ရေးသား ဝေမျှသွားဦးမှာဖြစ်တဲ့ အတွက်ဆက်လက်အားပေးကြပါဦးခင်ဗျာ။&#x20;

ကြိုးစားပါဦးမည်

လေးစားစွာဖြင့်

[**AWS User Group Myanmar**](https://www.facebook.com/groups/AWSusergroupmyanmar)
