<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Myanmar Technical Blog]]></title><description><![CDATA[Learn with Kalaung Tech for Cloud, Linux, Security, Container, DevOps contents in Burmese Language.]]></description><link>https://kalaung.org</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1678465269741/ZQjsLJVo5.png</url><title>Myanmar Technical Blog</title><link>https://kalaung.org</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 06:09:20 GMT</lastBuildDate><atom:link href="https://kalaung.org/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Infrastructure ကိုင်ပြီး အိပ်ရေးမပျက် ချင် လျှင်  ဒါမျိုး Alarms လုပ် 🔥🔥🔥]]></title><description><![CDATA[High Level ရေးထားတာပါ ဒါပေမဲ့ လွယ်ပါတယ်
​ကိုယ့်မှာ AWS Infra တွေရှိတယ်ဆို တွေ့သမျှ metric တွေကို alarms တွေလုပ်ပြီး notification ယူမနေဘဲ တကယ် effective ဖြစ်တဲ့ metric တွေကိုမှ CloudWatch ရဲ့ alarm feature တွေနဲ့ ပေါင်းပြီး ပို့စေချင်ပါတယ်။
​ဥပမာ prod...]]></description><link>https://kalaung.org/infrastructure-alarms</link><guid isPermaLink="true">https://kalaung.org/infrastructure-alarms</guid><category><![CDATA[Devops]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[Myat Min Soe]]></dc:creator><pubDate>Sat, 17 Jan 2026 15:50:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768649202459/5937fedd-4074-4597-8e89-5c24a86e3a52.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>High Level ရေးထားတာပါ ဒါပေမဲ့ လွယ်ပါတယ်</p>
<p>​ကိုယ့်မှာ AWS Infra တွေရှိတယ်ဆို တွေ့သမျှ metric တွေကို alarms တွေလုပ်ပြီး notification ယူမနေဘဲ တကယ် effective ဖြစ်တဲ့ metric တွေကိုမှ CloudWatch ရဲ့ alarm feature တွေနဲ့ ပေါင်းပြီး ပို့စေချင်ပါတယ်။</p>
<p>​ဥပမာ product တွေ ကြေညာတဲ့ website အတွက် instance တလုံးရှိတယ်ဆိုပါစို့</p>
<p>100 မှာ 70 ရာခိုင်နှုန်းက လွယ်လွယ်ကူကူ CMS တမျိုးမျိုး အများဆုံးက WordPress နဲ့ လုပ်ကြတာများတယ်။ ဒီတော့ site ကို ဝင်ကြည့်တဲ့သူ များလာရင် Request Count တက်မယ်၊ လွယ်လွယ်ကူကူ ပြောရရင် CPU, Memory တက်လာမယ်ပေါ့။</p>
<p>သတ်မှတ်ထားတဲ့ Threshold ထက် ကျော်တာနဲ့ user ကြောင့် spike တာ ဖြစ်ရင်ဖြစ်၊ မဖြစ်ရင် အိန္ဒိယက အနဲ တို့ ကလိနေပြီ.... စတာ...</p>
<p><img src="https://static.xx.fbcdn.net/images/emoji.php/v9/eb4/1/16/FACE_WITH_COLON_THREE.png" alt=":3" /></p>
<p>​ဒီတော့ ဒီအခြေအနေတွေသိဖို့ alarms တွေ လုပ်ရပါတော့မယ်။</p>
<p>​Instance ကနေ CloudWatch metric ကို 5 min တစ်ကြိမ် update တွေ ပေးပါတယ်။ ဒါပေမဲ့ CPU Utilization တစ်မျိုးပဲ များများ အထောက်အကူပြုနိုင်ပါတယ်၊ ကျန်တာက တစ်ခုခုကြောင့် debug လုပ်မှသာ ဝင်ကြည့်တာများပါတယ်။ Memory နဲ့ Disk ရဲ့ metric လိုချင်ရင်လည်း Unified Agent ကနေ သွင်းယူရမှာပါ။</p>
<p>​ဒီတော့ ဘယ် metric တွေနဲ့ အလုပ်လုပ်သင့်လဲဆိုတာ မပြောခင် alarm ရဲ့ state ကို ခွဲထားဖို့ ပြောချင်ပါတယ်။ ဒီလိုခွဲဖို့အတွက် ကျွန်တော်ကတော့ critical နဲ့ high ဆိုတဲ့ SNS topic 2ခု AWS မှာ ကြိုဆောက်ထားလိုက်ပါတယ်။CW မှာ alarms create ရင် ဘယ် metric ကို ဘယ် topic ဆီပို့မလဲ ရွေးပေးသွားမှာပါ။</p>
<p>​နောက်တစ်ခုက ဒီ alarms တွေ ဖန်တီးပြီးရင်တော့ ဘယ်ကို notification ပို့မလဲ ဆိုတာပါပဲ။</p>
<p>​များသောအားဖြင့် email ကို ပို့ကြပါတယ်။ ကျွန်တော့်အမြင်ကတော့ ကိုယ့်ကိုယ်ကိုယ် ပြန်စိတ်ဒုက္ခမပေးသင့်ပါဘူး။</p>
<p>Email ကလည်း Office ကိစ္စ အရေးကြီးတဲ့နေရာ၊ မတူညီတဲ့ အဖွဲ့တွေကြားမှာ record ယူဖို့ သုံးကြတာပါ။ Infra Noti တွေကို လက်ခံဖို့ အတွက်သုံးခဲ့ရင် သေချာ manage လုပ်မထားရင် alarm email တွေနဲ့ရောပြီး တချို့ email တွေ ပျောက်သွားနိုင်ပါတယ်။</p>
<p>Team က Channel ကိုလည်း ပို့လို့ရပါတယ်။ ဒါပေမဲ့ Team အသံကလည်း လုံးဝကို ကင်ဆာပေးပါတယ်။ Team Channel တစ်ခုမှာ Alarm Noti တွေပါ ထပ်ထည့်ထားလို့ အသံကြားတိုင်း ကြည့်နေရရင် ဟုန်သွားပြီး တချို့အရေးကြီးတဲ့ message တွေ၊ conversation တွေ နောက်ကျသွားနိုင်ပါတယ်။</p>
<p>ဒီအချိန်မှာ Slack ဖြစ်ဖြစ် Discord ဖြစ်ဖြစ် သုံးသင့်တယ်လို့ မြင်ပါတယ်။ ကျွန်တော်ကတော့ Slack ကို ရွေးပါတယ်။ Setup လုပ်ရတာ လွယ်ပါတယ်။ Channel ဆောက်၊ Slack API ကနေ webhook ထုတ်ပြီး ဒီ webhook ထည့်ဖို့ Lambda function မှာ code လေး နည်းနည်းရေးပြီး trigger မှာ SNS ရွေးလိုက်ရင် Slack ကနေ message တွေကို ဖတ်နိုင်ပါပြီ။ AWS ရဲ့ message body ကို ဖတ်ရလွယ်အောင် Lambda မှာပဲ transform ဖို့ ရေးလို့ရပါတယ်။</p>
<p>​CW metric နဲ့ alarm ဆီ ပြန်သွားပါမယ်။</p>
<p>​Critical Channel ထဲ ဘာပို့မလဲ။ ကျွန်တော်ကတော့ instance အတွက်ဆို တစ်ခုပဲ ပို့ပါမယ် metric name က StatusCheckFailed ပါ။</p>
<p>StatusCheckFailed က instance ရဲ့ health ကို စစ်ပေးတဲ့ metric ပါ။ System Check (AWS hardware ပိုင်း) နှင့် Instance Check (OS သို့မဟုတ် Software ပိုင်း) ကိုစစ်ပေးပြီး တခု့ခု့ fail တာနဲ့ server down သွားနိုင်ပါတယ်။ CW မှာ status check fail ရင် alarm ထိပြီး instance reboot ပါ တစ်ခါတည်း ချလို့ရပါတယ်။</p>
<p>​နောက် ဘယ် metric တွေကို high ထဲ ပို့မလဲ။</p>
<p>​CPU Utilization, Memory used percent နဲ့ Disk usage တို့ကို High ထဲ ပို့ပါမယ်။ Application Load Balancer သုံးထားတယ်ဆိုရင် Request metric နဲ့ 5xx error ကိုပါ ပို့ပါမယ်။</p>
<p>​ဒီမှာ အဓိကပြောချင်တာက CW မှာ alarms ဘယ်လို create လုပ်မလဲဆိုတာပါ။ ပုံမှန်ဆို metric ရွေးမယ်၊ max နဲ့ တိုင်းမလား AVG နဲ့ တိုင်းမလား ရွေးမယ်။ Interval ကတော့ 5 min ပဲ ထားကြတာများတယ်၊ 1 min ထားရင်လည်း instance ဘက်က detailed monitoring ဖွင့်ပေးမှ metric တွေ 1 min တစ်ခါ ပို့နိုင်မှာဖြစ်ပြီး ဈေးကလည်း ပုံမှန်ထက်ပိုကြီးပါတယ်။ ပြီးရင် Threshold မှာ 80 လောက် ထားမယ်။ high ထဲ ပို့ပေမဲ့ 80 လောက်တော့ ထားသင့်တယ်လို့ မြင်တယ်။ ပြီးရင် SNS topic ရွေး၊ ပြီးပြီ။</p>
<p>​အဲ့မှာ သတိမထားမိရင် ကျော်သွားမှာရှိတယ်၊ ဘာလဲဆိုတော့ datapoint ပါ။ ဒီဟာလေးက တအား အသုံးဝင်ပါတယ်။ Default က 1 out of 1 ပါ။ ဘယ်လိုအလုပ်လုပ်လဲဆိုရင် ဥပမာအနေနဲ့ CPU Utilization ရဲ့ AVG 5 min interval အတွင်းမှာ သတ်မှတ်ထားတဲ့ Threshold ထက် တစ်ကြိမ်ကျော်ခဲ့ရင် alarm ထိပြီး Noti ပို့ပါမယ်။ ဒီ 5 min အတွင်း 1 ကြိမ်၊ အလွယ်ပြောရရင် 1 min သာ CPU တက်ပြီး ပြန်ကျသွားလည်း Noti ပို့မှာပါ။ ပြောရရင် မလိုအပ်ပါဘူး၊ False positive alarm လို့တောင် ပြောလို့ရပါတယ်။</p>
<p>ဒီလိုမျိုး မဖြစ်စေချင်ဘူးဆိုရင် 3 out of 3 ထားလို့ရပါတယ်။ 5min တိုင်းမှာ 1 ကြိမ်စစ်တာ 3 ကြိမ်လုံး ( စု့စု့ပေါင်း 15 min ) Threshold ထက် ကျော်နေမှ ပို့မှာပါ။ Noise တော်တော် လျော့သွားမှာပါ။ ဒီ data point ကစားတာက CPU Utilization နဲ့ Memory used percent အတွက်ပါ။ ကျန်တဲ့ဟာတွေ မလိုပါဘူး default ထားလို့ရပါတယ်။</p>
<p>​အကယ်၍ AWS Auto Scaling Group သုံးခဲ့ရင် CPU ရော Memory ရော alarm မယူတော့သင့်ပါဘူး။ ASG မှာ Unified Agent ထည့်ထားတာကလည်း CW မှာ metric တွေကို များ‌လာစေပြီး မျက်စိနောက်ပါတယ်။</p>
<p>များသောအားဖြင့် API server တွေ ဖြစ်နိုင်တဲ့အတွက် Open source tools တမျိုးမျိုးနဲ့ဖြစ်စေ New relic ဖြစ်စေ ထည့်တာက ပိုအဆင်ပြေပါလိမ့်မယ်။ ASG မှာလည်း Scaling policy တစ်မျိုးမျိုး ရှိနေမှာဖြစ်တဲ့အတွက် သတ်မှတ်ထားတဲ့ Threshold ဆိုရင် scale မှာပါ။ Metric တစ်မျိုးကိုပဲ ထပ်တိုးပြီး Critical Channel ထဲ ထည့်ထားသင့်ပါတယ်။ အဲ့ဒါကတော့ UnhealthyHostCount ပါ။ Application Load Balancer နဲ့ တွဲထားတဲ့ Target Group ကနေ ယူရမှာပါ။ ဒီ metric ကြောင့် ASG ထဲက instance လစ်သွားရင် သိပါလိမ့်မယ်။</p>
<p>RDS ကတော့ နည်းနည်း ပိုလုပ်ရပါမယ်။ Critical ထဲထည့်မှာပါ DB ဖြစ်တဲ့အတွက်။Critical Channel ထဲ ထည့်ဖို့အတွက် သေချာလေး စဉ်းစားပြီး ရေးပါမယ်။ ပုံမှန် CPU Utilization ရှိပါမယ်၊ သူက ၁ မိနစ် တစ်ခါ metric update ပါတယ်။ ဒီတော့ interval ကို 1 min ထားပြီး datapoint ကိုတော့ အနည်းဆုံး 10 out of 10 ထားသင့်ပါတယ်။ ဒါတောင် user spike ရှိရင် ခဏခဏ တံခါးလာခေါက်နေမှာပါ။ ဒီတော့ Read Latency နဲ့ Write Latency လေးပါ alarm လုပ်၊ ဒါကို CW ရဲ့ Composite Alarm နဲ့ ဒီ metric တွေကို ပြန်အုပ်ကာ Noti ယူသင့်ပါတယ်။ Aurora Serverless ဆိုရင် ACU Utilization လေးကိုပါ 10 out of 10 datapoint အနည်းဆုံးလေးနဲ့ ထားသင့်ပါတယ်။</p>
<p>​ဒါကတော့ Alarm Noti တွေရဲ့ နှိပ်စက်မှုကနေ ဝေးအောင် လက်ရှိ သုံးကြည့်နေတာလေးပါ။</p>
]]></content:encoded></item><item><title><![CDATA[How to connect On Premises Network and Cloud (AWS)? (Part-2)]]></title><description><![CDATA[ကိုယ့်ရဲ့ ‌data center (on-prem) network နဲ့ AWS ချိတ်ဆက်ဖို့ လိုလာပြီဆိုရင် ဘယ်လို ချိတ်ဆက်ကြမလဲ? အပိုင်း (၂) မှာ တော့ Direct connect အကြောင်းကို ဆွေးနွေး သွားမှာ ဖြစ်ပါတယ်။
အပိုင်း (၁) Site-to-site VPN အကြောင်းကို လေ့လာချင်ရင်တော့ အောက်ပါ link မှာ ...]]></description><link>https://kalaung.org/how-to-connect-on-premises-network-and-cloud-aws-part-2</link><guid isPermaLink="true">https://kalaung.org/how-to-connect-on-premises-network-and-cloud-aws-part-2</guid><category><![CDATA[aws direct connect]]></category><category><![CDATA[DirectConnect]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Sat, 20 Dec 2025 16:09:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1766246258873/58553cd6-207f-4e6a-83ac-36d05d31be0a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>ကိုယ့်ရဲ့ ‌data center (on-prem) network နဲ့ AWS ချိတ်ဆက်ဖို့ လိုလာပြီဆိုရင် ဘယ်လို ချိတ်ဆက်ကြမလဲ? အပိုင်း (၂) မှာ တော့ Direct connect အကြောင်းကို ဆွေးနွေး သွားမှာ ဖြစ်ပါတယ်။</p>
<p>အပိုင်း (၁) Site-to-site VPN အကြောင်းကို လေ့လာချင်ရင်တော့ အောက်ပါ link မှာ လေ့လာနိုင်ပါတယ်။</p>
<p><a target="_blank" href="https://kalaung.org/how-to-connect-on-premises-network-and-cloud-aws-part-1">https://kalaung.org/how-to-connect-on-premises-network-and-cloud-aws-part-1</a></p>
<h3 id="heading-direct-connect">Direct connect</h3>
<ul>
<li>Direct connect ဆိုတာ ကိုယ့်ရဲ့ data center (on-prem) network နဲ့ AWS ကို သီးသန့်ချိတ်ဆက်ထား တဲ့ private connection တစ်ခုဘဲ ဖြစ်ပါတယ်။</li>
</ul>
<h2 id="heading-physical-connection">Physical Connection</h2>
<p>Direct connect ချိတ်ဆက်မယ်ဆိုရင် အရင် ဆုံး ကိုယ့်ရဲ့ on-prem network နဲ့ Direct connect location ကို physical connection ရှိရပါမည်။ Direct connect location ဆိုတာ AWS direct connect router ရှိတဲ့ ‌ နေရာတစ်ခုဖြစ် သလို customer/partner ဘက်က router ရှိတဲ့ နေရာလည်း ဖြစ်ပါတယ်။ AWS direct connect router နဲ့ customer/partner ရဲ့ router ကို cross-connect ချိတ် ထား တဲ့နေရာ လည်းဖြစ်ပါသည်။ Direct connect location မှာ ကိုယ် ကိုယ်တိုင် router မထားနိုင်ဘူးဆိုရင် Direct connect location နဲ့ physical connection ရှိထားပြီးသားဖြစ်တဲ့ AWS Direct connect Partner မှ တ ဆင့် connect လုပ်လို့ရပါတယ်။ Direct Connect Partner မှ တစ်ဆင့်မသွားဘူးဆိုရင် Direct connect location နဲ့ physical connection ရဖို့ colocation facility provider ကို ဆက်သွယ်ပြီး ‌ဆောင််ရွက် ရ မှာ ဖြစ်ပါတယ်။</p>
<p>Direct Connect location နဲ့ physical connection ရဖို့ကို နည်း (၂) နည်း ဖြင့် ချိတ်ဆက်နိုင်ပါသည်။</p>
<ul>
<li><p><strong>Dedicated connections</strong></p>
</li>
<li><p><strong>Hosted connections</strong></p>
</li>
</ul>
<p><strong>Dedicated connections</strong></p>
<p>Dedicated connections ဆိုတာ physical connection တစ်ခုကို single customer နဲ့ဘဲ သီးသန့်ချိတ်ဆက်ထားတာ ဖြစ်ပါတယ်။ Dedicated connections create လုပ်ရန် ‌‌အောက်ပါ steps များအတိုင်းပြုလုပ်ရပါမည်။</p>
<ol>
<li><p>Decide on an AWS Direct Connect location and connection size</p>
</li>
<li><p>Create your connection request(s) on the AWS management console</p>
</li>
<li><p>Download Letter of Authorization (LoA) from the AWS Management console</p>
</li>
<li><p>Provide LoA to an APN Partner and ask them to establish the connection on your behalf</p>
</li>
<li><p>Configure virtual interfaces to establish network connectivity</p>
</li>
</ol>
<p>You can check the following link details of Direct Connect location , Associated AWS Region and available speed</p>
<p><a target="_blank" href="https://aws.amazon.com/directconnect/locations/">https://aws.amazon.com/directconnect/locations/</a></p>
<p>Port speed ကို 1, 10, or 100 Gbps and 400 Gbps ထိ‌ရွေးချယ်နိုင်ပါတယ်။ Direct connect location မတူလျှင် support လုပ်တဲ့ port speeds ‌တွေ မတူညီနိုင်ပါ။</p>
<p>Direct connect location, port speed ‌တွေရွေးချယ် သတ်မှတ်ပြီးပြီ ဆိုလျှင် AWS management console မှာ connection request create လုပ်လို့ရပါပြီ။ Connection request create လုပ်တဲ့အချိန်မှာ AWS direct connect partner တဆင့် connect လုပ်မှာလား/မလုပ်ဘူးလား ဆိုပြီး ‌ရွေးချယ်‌ပေး ရတဲ့ check box ‌ လေးတွေ့ရ ပါလိမ့်မည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1766245518957/79c897f4-7c9b-45ec-af6b-a37e28a4416b.png" alt class="image--center mx-auto" /></p>
<p>Check box လေး မှာ tick လုပ်ခဲ့ရင် AWS Direct connect partner မှတဆင့် AWS Direct connect location နဲ့ ကိုယ့်ရဲ့ Data Center ကို Physical connection ရအောင် ဆောင်ရွက်မှာ ဆိုတဲ့ အဓိပ္ပါတယ် ဖြစ်ပါတယ်။ Connection request create လုပ်ပြီးတဲ့ နောက် မှာ AWS က review လုပ် ပြီး 72 business hours အတွင်း မှာ <strong>Letter of Authorization - Connecting Facility Assignment (LOA-CFA)</strong> ကို provides လုပ်ပေးပါတယ်။ LOA-CFA ကို download လုပ်ပြီး ကိုယ့် ရဲ့ AWS Direct connect partner ဆီကို ပို့ပေးရပါမည်။ Partner က Physical connection ရဖို့ ဆက်လက်ဆောင်ရွက်သွားပါလိမ့်မည်။</p>
<p>Check box လေး မှာ tick မလုပ်ခဲ့ဘူးဆိုရင် AWS Direct connect location နဲ့ ကိုယ့်ရဲ့ Data Center ကို Physical connection ရဖို့ ကို third-party service provider မပါဘဲ AWS ကို direct request လုပ်လိုက်တာဖြစ်ပါတယ်။</p>
<p>Connection request create လုပ်ပြီးတဲ့ နောက် မှာ AWS ဘက်က LOA-CFA ကို provides လုပ်ပေးပါတယ်။ LOA-CFA ကို colocation facility provider ဆီကို ပို့ပေး ပြီး Physical connection ရဖို့ ဆက်လက်ဆောင်ရွက်ရပါမယ်။ AWS Direct Connect endpoint ရှိတဲ့ Data center မှာ ဘဲ ကိုယ့်ရဲ့ physical network equipment တေ ရှိထားပြီးသား သူတွေ အတွက် ပိုသင့်တော်ပါတယ်။ Direct connect partner မှ တဆင့်သွားတာနဲ့ ယှဉ်ရင် cost ပိုကုန်ပါတယ်။</p>
<p><strong>Hosted connections</strong></p>
<p>Hosted connections ဆိုတာ Physical port (1) ခုကို logical port ‌တွေ ခွဲပြီး သုံးရတာဘဲဖြစ်ပါတယ်။ Physical port သည် Partner နဲ့ဘဲ သက်ဆိုင်ပါတယ်။ Customer ‌တွေက logical port နဲ့ဘဲ သက်ဆိုင်တာဖြစ်ပါတယ်။ Hosted connections create လုပ်မယ်ဆိုရင် AWS management console ကနေ ကိုယ်တိုင် create လုပ်ရတာ မဟုတ်ပါဘူး။ AWS Direct connect delivery partner ကို အရင်ဆက်သွယ်ရပါမည်။ AWS Direct connect delivery partner က connection ကို create လုပ်ပေးတာပါ။ Partner က create လုပ်ပြီးလျှင် Direct connect console&gt; Connections Pane မှာ ‌ပေါ်လာမှာ ဖြစ်ပါတယ်။ အဲ့တာကို accept လုပ်ပေးရမှာပါ။ Port speeds အနေနဲ့ 50 Mbps up to 25 Gbps ထိ ရပါတယ်။</p>
<p>အခုပြောခဲ့တာတွေကတော့ Physical connection ရဖို့ အပိုင်းဖြစ်ပါတယ်။ Physical connection ရသွားပြီ ဆိုရင်‌ ‌တော့ virtual interfaces ‌တွေအကြောင်း ဆက် ‌ပြောပါမယ်။</p>
<h2 id="heading-virtual-interfaces-vif"><strong>Virtual Interfaces (VIF)</strong></h2>
<p>Physical Connection တွေ ရသွားပြီ ဆိုရင်တော့ နောက်တဆင့် က Virtual Interfaces (VIF) တွေ create လုပ်ဖို့ ဖြစ်ပါတယ်။ Virtual interfaces (VIF) 3 မျိုး ရှိပါတယ်။</p>
<ol>
<li><p>Private VIF</p>
</li>
<li><p>Public VIF</p>
</li>
<li><p>Transit VIF</p>
</li>
</ol>
<p>Private VIF - Private IP address ကို အသုံးပြုပြီး single VPC နဲ့ connect လုပ်ဖို့ အသုံးပြုပါတယ်။</p>
<p>Public VIF - Public IP address ကို အသုံးပြုပြီး AWS public services (like <strong>S3, DynamoDB) တွေ ကို access လုပ်ဖို့ သုံးပါတယ်။</strong></p>
<p>Transit VIF - VPC တွေ တစ်ခုထက် မက များလာပြီဆိုရင် Transit Gateway ကို သုံးပေးရပါမယ်။ အဲ့ဒီ Transit Gateway ကို connect လုပ်ဖို့ အတွက် create လုပ်ပေးရတဲ့ virtual interface သည် Transit VIF ဖြစ်ပါတယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1766245573872/2c1922aa-595e-495c-af77-af5af5f1156a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1766245638442/0fd9f1f4-25a0-4fc2-a6de-af429470594b.png" alt class="image--center mx-auto" /></p>
<p>Photo reference from : AWS Documentation</p>
]]></content:encoded></item><item><title><![CDATA[How to connect On Premises Network and Cloud (AWS)? (Part-1)]]></title><description><![CDATA[ကိုယ့်ရဲ့ ‌data center (on-prem) network နဲ့ AWS ချိတ်ဆက်ဖို့ လိုလာပြီဆိုရင် ချိတ်ဆက်နိုင်တဲ့ နည်း (၂) နည်း ရှိပါတယ်။
1. Site-to-Site VPN (Virtual Private Network)
2. Direct connect
Site-to-Site VPN
- On-prem network နဲ့ AWS resources တွေ ချိတ်ဆက်တဲ့...]]></description><link>https://kalaung.org/how-to-connect-on-premises-network-and-cloud-aws-part-1</link><guid isPermaLink="true">https://kalaung.org/how-to-connect-on-premises-network-and-cloud-aws-part-1</guid><category><![CDATA[AWS]]></category><category><![CDATA[aws vpn]]></category><category><![CDATA[vpn]]></category><category><![CDATA[Hybrid Cloud]]></category><category><![CDATA[site-to-site-vpn]]></category><category><![CDATA[On Premise]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Fri, 12 Dec 2025 08:24:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1765526902236/c2dc5e7f-e832-491b-a8dc-884ab8b4eedf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>ကိုယ့်ရဲ့ ‌data center (on-prem) network နဲ့ AWS ချိတ်ဆက်ဖို့ လိုလာပြီဆိုရင် ချိတ်ဆက်နိုင်တဲ့ နည်း (၂) နည်း ရှိပါတယ်။</p>
<p>1. Site-to-Site VPN (Virtual Private Network)</p>
<p>2. Direct connect</p>
<h3 id="heading-site-to-site-vpn">Site-to-Site VPN</h3>
<p>- On-prem network နဲ့ AWS resources တွေ ချိတ်ဆက်တဲ့ အခါမှာ VPN ကို သုံးပြီး ချိတ်ဆက် တယ်ဆိုတာ on-prem network နဲ့ ‌AWS VPC ကို internet ပေါ်က နေ tunnel ထိုးပြီးချိတ်ဆက်တာဖြစ်ပါတယ်။ (Site-to-Site VPN လို့လည်း ‌‌ခေါ်ပါတယ်။)</p>
<p>- Routing အနေနဲ့ Static route or Dynamic route (BGP) ကို သုံးပါတယ်။</p>
<p>- VPN connections တစ်ခု create လုပ်တာနဲ့ AWS ဘက်ကနေ tunnel 2 ခု support လုပ်ပါတယ်။ Redundancy ရဖို့ အတွက်ဖြစ်ပါတယ်။ Tunnel တစ်ခုက active အနေနဲ့ အလုပ်လုပ်နေရင် ကျန် tunnel တစ်ခုက standby အနေနဲ့ အလုပ်လုပ်ပါတယ်။</p>
<p>- Maximum bandwidth အနေနဲ့ tunnel တစ် ခုကို 1.25 Gbps support လုပ်ပါတယ် ။ Tunnel 2 ခု ကို auto ‌‌‌ပေါင်းပြီး double speed ဖြစ်သွားမလားဆိုရင် မဖြစ်သွားပါဘူး။ ဘာလို့လဲဆိုရင် tunnel တစ်ခုက active အနေ နဲ့ အလုပ်လုပ်‌နေချိန်မှာ ‌နောက် tunnel တစ်ခုက standby အနေနဲ့ဘဲ ရှိနေလို့ ဖြစ်ပါတယ်။ ECMP (Equal-Cost Multi-Path) ကို သုံးမယ်ဆိုရင်‌ ‌‌တော့ tunnel 2 ခုလုံးက တပြိုင်နက်တည်း active ဖြစ်နိုင်ပါတယ်</p>
<p>- ECMP ကို သုံးဖို့ဆိုရင် VPN connection သည် TGW ကို atttached လုပ်ထားတာဖြစ်ရပါမည်။ Dynamic routing (BGP) ကို သုံးရပါမည်။ On-prem router သည် လည်း ECMP ကို support လုပ်ရပါမည်။</p>
<h3 id="heading-vpn-endpoint">VPN Endpoint</h3>
<p>- AWS ဘက် မှာ VPC တစ်ခုတည်းနဲ့ ချိတ်ဆက်မယ်ဆိုရင် VGW (Virtual private Gateway) create လုပ်ပေးရပါမယ်။ VPC အရေအတွက် များလာတာနဲ့ VGW အရေအတွက် ‌တွေလည်း များလာမှာပါ။</p>
<p>- တစ်ခုထက်မက ပို များတဲ့ VPC တွေ နဲ့ ချိတ်မယ်ဆိုရင် TGW (Transit Gateway) ကို create လုပ်ပေး သင့် ပါတယ်။ TGW သုံးတဲ့ VPN connections မှာဆိုရင် Tunnel bandwidth ကို standard (or) large ရွေးချယ်လို့ရပါတယ်။ Standard သည် 1.25 Gbps ကို support လုပ်ပြီး Large သည် 5Gbps ကို support လုပ်ပါတယ်။</p>
<h3 id="heading-customer-gateway-device-and-customer-gateway">Customer Gateway device and Customer Gateway</h3>
<p>Site-to-site VPN ကို ‌လေ့လာတဲ့ အခါမှာ confuse ဖြစ်တတ်တဲ့ အသုံး အနှုန်းလေးဖြစ်ပါတယ်။</p>
<p>- Customer Gateway device ဆိုတာ VPN connection အတွက် on-prem ဘက် မှာ ရှိ ရမယ့် physical device ဖြစ်ပါတယ်။</p>
<p>- Customer Gateway ဆိုတာ ကိုယ့်ရဲ့ on-prem device (customer gateway device) ရဲ့ infomation ‌တွေကို AWS ဘက် က သိအောင် ပြောပြပေးရတဲ့ နေရာ ဖြစ်ပါတယ်။</p>
<p>- Customer Gateway create လုပ်တဲ့ အချိန်မှာ ဖြည့်ပေးရတဲ့ infomation ‌‌တွေက ဘာတွေလဲဆိုရင် on-prem device ရဲ့ Public IP, ASN, .. အစရှိတာတို့ ဖြစ်ပါတယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1765526998407/980aaab3-4511-4151-819e-3fd32b3138b9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1765527070977/c6e40582-7593-458e-bc4a-09dba694296f.png" alt class="image--center mx-auto" /></p>
<p>ဒီလောက်ဆိုရင် ‌တော့ AWS ရဲ့ site-to-site VPN အ ကြောင်းလေးအခြေခံလောက် သိသွားမယ်ထင်ပါတယ်။</p>
<p>Part -2 မှာ Direct connect အကြောင်းလေး ထပ် ဆွေးနွေးသွားမှာ ဖြစ်ပါတယ်။ Direct Connect အကြောင်း အောက်ပါ link မှာ ဝင်ရောက် လေ့လာနိုင်ပါတယ်။</p>
<p><a target="_blank" href="https://kalaung.org/how-to-connect-on-premises-network-and-cloud-aws-part-2">https://kalaung.org/how-to-connect-on-premises-network-and-cloud-aws-part-2</a></p>
]]></content:encoded></item><item><title><![CDATA[Accessibility for Designer]]></title><description><![CDATA[လွန်ခဲ့တဲ့အပတ်က ရုံးက Designer တွေနဲ့ တော်ကီပွားရင်း Accessibility နဲ့ပတ်သတ်တာတွေ သူတို့ကို ရှင်းပြဖြစ်တယ်။ ကိုယ်တိုင်ကလည်း အရင်ကတည်းက ဒီ topic ကိုစိတ်ဝင်စားလို့ လေ့လာနေတာဆိုတော့ အခွင့်အရေးရရင် ရသလို sharing လုပ်ဖြစ်တယ်။ အဓိကက Accessibility နဲ့ပတ်သတ်...]]></description><link>https://kalaung.org/accessibility-for-designer</link><guid isPermaLink="true">https://kalaung.org/accessibility-for-designer</guid><category><![CDATA[Accessibility]]></category><category><![CDATA[Design]]></category><dc:creator><![CDATA[Htut Wai Phyoe]]></dc:creator><pubDate>Fri, 21 Nov 2025 09:09:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1742578066769/24b81ddd-be9c-420a-b8ac-9f381ef1fbc9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>လွန်ခဲ့တဲ့အပတ်က ရုံးက Designer တွေနဲ့ တော်ကီပွားရင်း Accessibility နဲ့ပတ်သတ်တာတွေ သူတို့ကို ရှင်းပြဖြစ်တယ်။ ကိုယ်တိုင်ကလည်း အရင်ကတည်းက ဒီ topic ကိုစိတ်ဝင်စားလို့ လေ့လာနေတာဆိုတော့ အခွင့်အရေးရရင် ရသလို sharing လုပ်ဖြစ်တယ်။ အဓိကက Accessibility နဲ့ပတ်သတ်ပြီး awareness ကို community ထဲမှာ မြှင့်ချင်တာလည်းပါတာပေါ့။​ အရှေ့မှာတော့ Ma ရဲ့ Design Systems Workshops မှာ Frontend x Designer အတွက် ဝင်ကူတုန်းကလည်း Designer တွေအနေနဲ့ သိသင့်တဲ့ Accessibility ထဲကအရာတွေ sharing လုပ်ပေးဖြစ်ခဲ့တယ်။​အခုကတော့ အဲ့ဒီတုန်းကဟာလေးတွေကို blog ပြန်ရေးလိုက်တဲ့သဘောပါပဲ။  </p>
<p>Accessiblity လို့ပြောရင် topic ကအကျယ်ကြီးလို့ပြောရမယ်။ အဲ့ထဲမှာမှ Web Engineer တွေ Frontend သမားတွေအနေနဲ့ လုပ်ရမယ့်အပိုင်းတွေက တော်တော်ကိုများတယ်။ Designer ဆီက Design တင်မက တခြားသော accessibility နဲ့ပတ်သတ်တဲ့ techniques တွေကို apply လုပ်ပေးရတယ်။ ဒါမှ disabled person တွေအတွက် User Experience ကောင်းစေမှာပါ။ Desiger တွေအတွက်ကတော့ Design နဲ့ပတ်သတ်တဲ့ Accessibility techniques တွေကို လေ့လာထားရင်ကို လုံလောက်ပါပြီ။  </p>
<p>Accessibility ဆိုတာဘာလဲလို့ပြောရင်တော့ ရုပ်ပိုင်း/စိတ်ပိုင်းဆိုင်ရာ ချို့ယွင်းနေတဲ့လူတွေ (Disabled People) တွေအနေနဲ့ သာမန်လူတွေကဲ့သို့ နားလည်အသုံးပြုလုပ်ဆောင်နိုင်တာလို့ပြောရမယ်။ ဒီနေရာမှာ technology ပိုင်းမဟုတ်ပဲ အပြင် society မှာဆိုရင် လမ်းမလျှောက်နိုင်တဲ့သူက wheel chair သုံးပြီး သာမန်လူတွေလို သွားလာနိုင်တာမျိုးပေ့ါ။​ ထိုင်းက ရထားဘူတာတွေမှာဆို wheel chair person တွေအတွက် ရထားဝန်ထမ်းကနေ ဓာတ်လှေကားနဲ့ လာခေါ်တာ ပြီးရင် wheel chair အတွက် နေရာသီးသန့်ထားပေးထားတာမျိုးထိ Accessbility နဲ့ပတ်သတ်ပြီး လုပ်ဆောင်ပေးထားတယ်။​ ထိုနည်းတူ နည်းပညာပိုင်းမှာဆိုရင်လည်း ကိုယ့်ရဲ့ software ကို သူတို့တွေအတွက် သာမန်လူတွေကဲ့သို့ သုံးစွဲနိုင်အောင် လုပ်ပေးဖို့လိုပါတယ်။ ဒါ့အတွက် WCAG ကနေ Perceivable, Operable, Understandable, Robust ဆိုတဲ့ POUR Principles ထုတ်ပြီး standard guidlines တွေချပေးထားပါတယ်။  </p>
<p>Accessibility နဲ့ပတ်သတ်ပြီးပြောရင် Conformance နဲ့ Compliance အကြောင်းကထည့်ပြောရတယ်။​ သူ့မှာ Conformance အတွက် level သုံးခုရှိတယ်။  </p>
<p>- A (lowest, minimum level)<br />- AA (recommended, minimum legal requirement)<br />- AAA (highest)  </p>
<p>ဒီ level 3 ခုကို Engineer တွေက ဆိုင်ရာ Compliance ပေါ်မူတည်ပြီး လုပ်ဆောင်ပေးရတယ်။​လက်ရှိလုပ်ဖူးသမျှ အတွေ့အကြုံအထိတော့ ASIA ဘက်မှာ Accessibility နဲ့ပတ်သတ်ပြီး Government ဘက်ကနေ enforce လုပ်ထားတာတော့မတွေ့ဖူးသေးဘူး (ကိုယ်တိုင်လည်းမကြုံသေးတာဖြစ်နိုင်ပါတယ်)။​ ဒါပေမယ့် အနောက်နိုင်ငံတွေဖြစ်တဲ့ UK, US စတဲ့နိုင်ငံတွေမှာတော့ Government ကနေကို Disability Act (ADA) လိုမျိုး Law တွေထုတ်ပြီး Enforce လုပ်ထားတယ်။​ သူတို့နိုင်ငံတွေမှာ software တစ်ခုရေးမယ်ဆို Accessibility အတွက် Conformance level AA ကို minimun requirement အနေနဲ့သတ်မှတ်ထားတယ်။​တကယ်လို့ ကိုယ့် App က minimun requirement ကိုမမှီဘူးဆိုရင် တရားစွဲခံရနိုင်တယ်။ ဒီတော့ Designer တွေအနေ့နဲ့ ကိုယ့် ဆွဲပေးရမယ့် client က Accessbility နဲ့ပတ်သတ်ပြီးပြောလာရင် ဘာတွေလိုက်နာရမလဲ သိအောင် လေ့လာထားသင့်ပါတယ်။ Standards အနေနဲ့ WCAG ဘက်ကထုတ်တာတဲ့ Guidelines တွေလိုက်နာပေးရင်ရပါတယ်။ အကြမ်းအားဖြင့်ဆိုရင်  </p>
<p>1. Color Contrast  </p>
<p>Designer တွေအနေနဲ့ Design စပြီးဆွဲရတော့မယ်ဆို color palette ကို အရင်စဥ်းစားကြတယ်။​အဲ့အချိန်မှာ ကိုယ်ရဲ့ palette က color တွေက contrst မှန်ဖို့လိုတယ်။​ Color theory ပိုင်းကတော့ Designer တွေက ပိုသိမှာပါ။ ဥပမာ background/foreground color, button တွေ input တွေရဲ့ different state colors စတဲ့ color တွေ၊ ​နောက်တစ်ခုက light/dark theme switch လို့ရတာမျိုးဆိုရင်လည်း နှစ်ခုလုံးအတွက် color system ကို သေချာလည်းရွေးထားရမယ်။ AA requirement အရကတော့ဒီလိုရှိမယ်။​ font size 24px နဲ့ အောက်ဆို contrast ratio က at least 4.5:1, 24 px ရဲ့ အထက်ဆို contrast ratio က at least 3:1 ဖြစ်မယ်။ Non-text content တွေအတွက်ဆိုလည်း 3:1 ဖြစ်မယ်။ ကိုယ်တိုင်က Engineer မလို့ အသေးစိတ်ကိုတော့ research လုပ်ကြည့်ဖို့ တိုက်တွန်းပါတယ်။  </p>
<p>2. Layout  </p>
<p>နောက်တစ်ခုက screen layout design နဲ့ information architecture ပါ။​သူက သာမန်လူတွေအတွက်တင်မက screen reader, keyboard navigation or swtich device သုံးတဲ့ user တွေအတွက်အရမ်းအရေးကြီးတယ်။​လိုအပ်တဲ့ information ကိုအလွယ်တကူ ရနိုင်လား၊ action တစ်ခု လုပ်နိုင်ဖို့ menu/button/breadcrumbs စတာတွေဆီ focus ရောက်အောင် tab navigation နဲ့ ဘယ်နှချက်နှိပ်ရလဲ၊ content hierarchy ကရော headings, lists တွေက scannable ဖြစ်နိုင်လား စသည်ဖြင့် layout ချတာကိုလည်း သူတို့အတွက်ပါ စဥ်းစားပေးနိုင်ရင် ပိုကောင်းတယ်။​နောက်ဆုံး responsive layout ကို support လုပ်တာထိပါတယ်။ မဟုတ်ရင် mobile/desktop only user တွေအတွက်ကတော်တော်အခက်အခဲရှိနိုင်တယ်။</p>
<ol start="3">
<li>Animation</li>
</ol>
<p>Website မှာပါတဲ့ Motion တွေ animation တွေကလည်း accessibility မှာစဥ်းစားစရာ topic တစ်ခုပါပဲ။​သာမန်user တွေအတွက်တောင် animation ကိုသေချာမလုပ်ထားတာနဲ့ လုပ်တာပေါ်မူတည်ပြီး user experience ကောင်းမကောင်း အလွယ်တကူသိနိုင်တယ်။ element level animation (focus/hover state), component level animation (popup/menu transition) တွေအပြင် page level animation တွေဖြစ်တဲ့ Parallax နဲ့ scroll-based effects တွေအထိ smooth ဖြစ်အောင်လုပ်ထားသင့်တယ်။​ ဒါပေမယ့် screen reader သမားတွေအတွက်ကြ တစ်ခုခုလုပ်ရင် instant feedback ရဖို့အဓိကဖြစ်တဲ့အတွက်​ prefers-reduced-motion ဆိုတာကို device settings မှာ on ထားကြတယ်။​ ဆိုတော့ website ထဲက animation တွေက အသုံးမဝင်တော့တဲ့အတွက် animation မပါပဲ navigation လုပ်နိုင်အောင် page loading ဖြစ်နေတယ်ဆိုလည်း screen readers တွေသိအောင် စတာတွေအတွက် alternative solution တွေစဥ်းစားပေးနိုင်လေ ပိုကောင်းလေလို့ပြောလို့ရပါတယ်။  </p>
<p>Tools တွေအနေနဲ့ဆိုရင် Axe DevTools, Lighthouse, WebAIM Contrast Checker တွေအပြင် Figma plugin တွေလည်းရှိပါတယ်။ တခြား Design နဲ့မဆိုင်တဲ့ topic တွေနဲ့ ပိုပြီးအသေးစိတ်တဲ့ WCAG, WebAIM အပိုင်းတွေတော့ချန်ထားခဲ့ပါတယ်။ အရမ်းရှည်သွားမှာဆိုးလို့ပါ။  </p>
<p>အခုချိန်ထိတော့ Accessibility နဲ့ပတ်သတ်ရင် legal requirement အရ မဖြစ်မနေလုပ်ဖို့လိုမှသာလျှင် business ဘက်က attention ပေးတာမျိုးပဲ တွေ့နေရပါသေးတယ်။ FAANG လို company ကြီးတွေမှာတော့ accessibility specialist တွေခန့်ထားပြီး dedicated team တစ်ခုအနေနဲ့ရှိတာတွေ့ရပါတယ်။ ဒါပေမယ့် ကိုယ့်အနေနဲ့ compliance ကြောင့်သာမက disabled people တွေအတွက် empathy ထားပြီး စဥ်းစားပေးမယ်ဆိုရင် ကိုယ်လုပ်လိုက်တဲ့ သေးငယ်တဲ့အရာလေးတစ်ခုက သူတို့အတွက် အထောက်အကူအများကြီးဖြစ်သွားစေမှာပါ။​ ဒီစာလေးဖတ်ပြီးသွားလို့ နောက်ပိုင်း Design တွေဆွဲတဲ့အခါ Accessbility နဲ့ပတ်သတ်ပြီးထည့်စဥ်းစားမိလာတယ်ဆိုရင် awareness ရှိလာတယ်လို့ ပြောရမှာပါ။​ ဒီလောက်ဆို Accessibilty နဲ့ပတ်သတ်တဲ့ မီးပွားလေးထွန်းညှိပေးနိုင်မယ်လို့ မျှော်လင့်မိပါတယ်။</p>
]]></content:encoded></item><item><title><![CDATA[VPC Endpoint]]></title><description><![CDATA[အားလုံးဘဲ မင်္ဂလာပါ။ ဒီနေ့ sharing လုပ်ပေးချင်တာကတော့ VPC Endpoint အကြောင်းဘဲဖြစ်ပါတယ်။
VPC Endpoint ဆိုတာ VPC နဲ့ AWS services တွေ ကို public Internet ကို အသုံးမပြုဘဲနဲ့ Privately connect လုပ်ပေးတာ ဖြစ်ပါတယ်။ Internet Gateway, NAT Gateway နဲ့ Public...]]></description><link>https://kalaung.org/vpc-endpoint</link><guid isPermaLink="true">https://kalaung.org/vpc-endpoint</guid><category><![CDATA[vpc]]></category><category><![CDATA[AWS]]></category><category><![CDATA[AWSNetworking]]></category><category><![CDATA[vpcendpoint]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Tue, 18 Nov 2025 04:57:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1763441754287/6defcacb-cd5a-473a-9b6b-f7e0dffafe89.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးဘဲ မင်္ဂလာပါ။ ဒီနေ့ sharing လုပ်ပေးချင်တာကတော့ VPC Endpoint အကြောင်းဘဲဖြစ်ပါတယ်။</p>
<p>VPC Endpoint ဆိုတာ VPC နဲ့ AWS services တွေ ကို public Internet ကို အသုံးမပြုဘဲနဲ့ Privately connect လုပ်ပေးတာ ဖြစ်ပါတယ်။ Internet Gateway, NAT Gateway နဲ့ Public IP တွေ မလိုအပ်ဘဲနဲ့ VPC နဲ့ AWS services တွေကို privately connect လုပ်နိုင်မှာဖြစ်ပါတယ်။ AWS backbone network ကို အသုံးပြုတာ ဖြစ်လို့ security and performance ပိုကောင်းမှာ ဖြစ်ပါတယ်။</p>
<p>ဥပမာ အနေနဲ့ - Private subnets ထဲမှာ ရှိနေတဲ့ EC2 instance သည် AWS service တစ်ခုဖြစ်တဲ့ S3 or Secrets Manager တစ်ခုခု ကို Access လုပ်ဖို့ လိုအပ်တဲ့ အခါမှာ ဆိုရင် ပုံမှန်အားဖြင့် NAT gateway ကို ဖြတ် ပြီး Public Internet ပေါ်ကသွားရပါတယ်။ NAT ကို အ သုံး ပြုရတာ ဖြစ်လို့ cost တွေရှိမယ်။ Public Internet</p>
<p>ပေါ်က ဖြတ်သွားရတာဖြစ်လို့ security ပိုင်း အားနည်းမယ်။ ဒီနေရာမှာ VPC Endpoint ကို သာ အ သုံးပြုလိုက်မယ်ဆိုရင် VPC နဲ့ AWS services ‌တွေကို public internet ကို အ သုံးပြုစရာမလို ‌တော့ဘဲ privately connect လုပ်နိုင်မှာ ဖြစ်ပါတယ်။</p>
<p>VPC Endpoint 2 မျိုးရှိပါတယ်။</p>
<ol>
<li><p>Interface Endpoint (PrivateLink)</p>
</li>
<li><p>Gateway Endpoint</p>
</li>
</ol>
<h3 id="heading-interface-endpoint-privatelink">Interface Endpoint (PrivateLink)</h3>
<p>AWS services တော်တော်များများ နဲ့ connect လုပ်ဖို့ ဆိုရင် Interface Endpoint ကို အသုံးပြုပါတယ်။</p>
<p>e.g</p>
<ul>
<li><p>Secrets Manager</p>
</li>
<li><p>CloudWatch</p>
</li>
<li><p>SSM</p>
</li>
<li><p>KMS</p>
</li>
<li><p>SNS, etc.</p>
</li>
</ul>
<p>Interface Endpoint သည် PrivateLink ကို အသုံးပြုပါသည်။ PrivateLink ဆိုတာ AWS backbone network ပေါ် မှာ built လုပ်ထားတဲ့ service တစ်ခုဖြစ်ပါတယ်။ Interface Endpoint ကို အသုံးပြုတဲ့ အခါမှာ AWS သည် Elastic Network Interface (ENI) တစ်ခု auto create လုပ်လိုက်ပါတယ်။ ENI ကို private subnet or public subnet တစ်ခုခုထဲ မှာ create လုပ်ဖို့ ရွေးချယ်လို့ ရပါတယ်။ အများအားဖြင့် private subnets ထဲ မှာ create လုပ်ကြပါတယ်။ အဲ့ ENI မှတစ်ဆင့် privatelink ကို အသုံးပြုပြီး VPC နဲ့ AWS serivces တို့ connect လုပ်ကြပါတယ်။</p>
<h3 id="heading-gateway-endpoint">Gateway Endpoint</h3>
<p>Supports only <strong>two services</strong>:</p>
<ul>
<li><p><strong>Amazon S3</strong></p>
</li>
<li><p><strong>DynamoDB</strong></p>
<p>  Gateway Endpoint ကို create လုပ်လိုက်တဲ့ အခါမှာ ကိုယ် ‌ သတ်မှတ်ထားတဲ့ VPC ရဲ့ Route table ထဲမှာ route တစ်ကြောင်း auto create ပြီးသား ဖြစ်သွားပါတယ်။</p>
<p>  နမူနာအနေနဲ့ Private subnets ထဲမှာ ရှိတဲ့ EC2 instance က S3 ကို Gateway Endpoint ကနေတဆင့် ဘယ်လို connect လုပ်လဲဆိုတာကို ပြောပြပေးသွားပါ့မယ်။</p>
<p>  Private Subnet ထဲ မှာ ရှိတဲ့ EC2 instance မှာ အောက်ပါ command ‌run လိုက်ပါမယ်။</p>
<pre><code class="lang-jsx">  aws s3 ls s3:<span class="hljs-comment">//mybucket</span>
</code></pre>
<p>  DNS resolves လုပ် ပြီး route table မှာ check လုပ်ပါတယ်။ route table ထဲမှာ အောက်ပါအတိုင်း ‌တွေ့ ရပါမယ်။</p>
<pre><code class="lang-jsx">  Destination: pl-xxxxxx (S3 Prefix List)
  <span class="hljs-attr">Target</span>: vpce-xxxxxx (Gateway Endpoint)
</code></pre>
<p>  S3 ကို သွားဖို့ အတွက် Gateway endpoint ကနေတဆင့် သွားရမယ်ဆိုတာကို သိသွားပါတယ်။ EC2 ကနေ S3 ကို connect လုပ်ဖို့အတွက် public internet ကို ဖြတ်သွားစရာမလိုတော့ဘဲနဲ့ Gateway endpoint ကနေ တဆင့် AWS Backbone network ‌‌ပေါ်ကနေ privately connect လုပ်လို့ရသွားပါပြီ။</p>
<p>  ဒီလောက်ဆိုရင်တော့ VPC endpoint အ ကြောင်း လေး သိလောက်ပြီ ထင်ပါတယ်။ လိုအပ်တာများ ရှိခဲ့ ရင်လည်း comment မှာ ဝင်ရောက်ဆွေးနွေးလို့ ရပါတယ်။</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Transit Gateway Peering]]></title><description><![CDATA[အားလုံးဘဲ မင်္ဂလာပါ။ ဒီနေ့ sharing လုပ်ပေးချင်တာကတော့ Transit Gateway Peering ဘဲ ဖြစ်ပါတယ်။

Transit Gateway Peering ဆိုတာ Transit Gateway အချင်းချင်း ချိတ်ဆက်တာ ဖြစ်ပါတယ်။

Transit Gateway သည် Regional Resource ဖြစ်တဲ့ အတွက် Region မတူရင် share သုံး...]]></description><link>https://kalaung.org/transit-gateway-peering</link><guid isPermaLink="true">https://kalaung.org/transit-gateway-peering</guid><category><![CDATA[AWS]]></category><category><![CDATA[transit gateway]]></category><category><![CDATA[transitgatewaypeering]]></category><category><![CDATA[vpc]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Sat, 01 Nov 2025 11:27:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1761997000861/b9c7ee3c-bdcd-4459-8403-dad05053f112.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးဘဲ မင်္ဂလာပါ။ ဒီနေ့ sharing လုပ်ပေးချင်တာကတော့ Transit Gateway Peering ဘဲ ဖြစ်ပါတယ်။</p>
<ul>
<li><p>Transit Gateway Peering ဆိုတာ Transit Gateway အချင်းချင်း ချိတ်ဆက်တာ ဖြစ်ပါတယ်။</p>
</li>
<li><p>Transit Gateway သည် Regional Resource ဖြစ်တဲ့ အတွက် Region မတူရင် share သုံးလို့ မရပါဘူး။</p>
</li>
</ul>
<h3 id="heading-transit-gateway-peering-use-case-1-same-account-different-region">Transit Gateway peering use case 1 (Same Account, Different Region)</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761996036520/15642523-aa49-4297-8889-8e49263d3f1b.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>ပုံမှာ ပြထားသလို Same Account but different regions အသီးသီး မှာ ရှိတဲ့ VPC ‌‌‌တွေ အချင်းချင်း ချိတ်ဆက်ဖို့ လိုလာပြီ ၊ အဲ့ VPC ‌ ‌တွေက လည််း သက်ဆိုင်ရာ TGW ကို ချိတ်ဆက်ထားကြမယ်ဆိုရင် အဲ့ VPC အချင်းချင်း ချိတ်ဆက်ရဖို့ အတွက် TGW peering ကို သုံးလို့ ရပါတယ်။</p>
</li>
<li><p>Transit Gateway peering သည် Non Transitive ဖြစ် ပါတယ်။</p>
<p>  (TGW A - TGW B)</p>
<p>  (TGW B - TGW C) အဲ့ လိုချိတ်ထားမယ်ဆိုရင်‌ TGW A and TGW C က connection ရှိမှာ မဟုတ်ပါဘူး။</p>
<p>  TGW A and TGW C connection ရချင်ရင် A and C ကို peering လုပ်ပေးရမှာပါ။</p>
<p>  TGW peering သည်လည်း AWS Backbone network ကို အ သုံးပြုတာဖြစ်ပါတယ်။</p>
</li>
</ul>
<h3 id="heading-transit-gateway-peering-use-case-2-different-account-different-region">Transit Gateway Peering Use Case 2 ( Different Account, Different Region)</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761996137088/d2e0b64e-9cc5-4ce0-b598-c5b7253ce9a1.png" alt class="image--center mx-auto" /></p>
<p>ဒီလောက်ဆိုရင်တော့ Transit Gateway peering နဲ့ ပတ်သတ်ပြီး မျက်စိထဲ မြင်သွားမယ် ထင်ပါတယ်။ လိုအပ်တာများ ရှိရင်လည်း comment မှာ ဝင်ရောက်ဆွေးနွေးလို့ ရပါတယ်ရှင့်။</p>
]]></content:encoded></item><item><title><![CDATA[VPC Peering Vs Transit Gateway]]></title><description><![CDATA[အားလုံးဘဲ မင်္ဂလာပါ။ ဒီနေ့ sharing လုပ်ပေးချင်တာက‌ တော့ VPC Peering နဲ့ Transit Gateway အ ကြောင်း ဘဲ ဖြစ်ပါတယ်။
VPC တွေ တစ်ခုထက် မက များလာပြီ၊ VPC အချင်းချင်း connect လုပ်ဖို့ လည်း လိုအပ်လာပြီဆို ရင် VPC peering or Transit Gateway တစ်ခုမဟုတ်တစ်ခု သုံ...]]></description><link>https://kalaung.org/vpc-peering-vs-transit-gateway</link><guid isPermaLink="true">https://kalaung.org/vpc-peering-vs-transit-gateway</guid><category><![CDATA[AWS]]></category><category><![CDATA[vpc]]></category><category><![CDATA[vpc peering]]></category><category><![CDATA[transit gateway]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Sun, 26 Oct 2025 11:04:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1761476073484/c10bf478-2de0-4240-a272-4f36bb3566ec.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးဘဲ မင်္ဂလာပါ။ ဒီနေ့ sharing လုပ်ပေးချင်တာက‌ တော့ VPC Peering နဲ့ Transit Gateway အ ကြောင်း ဘဲ ဖြစ်ပါတယ်။</p>
<p>VPC တွေ တစ်ခုထက် မက များလာပြီ၊ VPC အချင်းချင်း connect လုပ်ဖို့ လည်း လိုအပ်လာပြီဆို ရင် VPC peering or Transit Gateway တစ်ခုမဟုတ်တစ်ခု သုံးပေးရပါမယ်။ VPC peering အကြောင်း အရင်ပြောပါ့မယ်။</p>
<h3 id="heading-vpc-peering">VPC Peering</h3>
<p>Account 1 ခု ၊ Same Region ထဲမှာ VPC 3 ခု ရှိတယ် ဆိုကြပါစို့ ။</p>
<p>VPC A, VPC B and VPC C (as shown in figure)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761475636510/ca0f919f-c9d8-496f-964a-bb2b604f635d.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>ပုံမှာ ပြထားသလို VPC-A and VPC-B ကြားမှာ Peering connection တစ်ခု,VPC-B and VPC-C ကြားမှာ Peering connection တစ်ခု create လုပ်လိုက်မယ်ဆိုရင် VPC-A and VPC-B , VPC-B and VPC-C ဘဲ ချိတ်လို့ ရမှာ ပါ။</p>
</li>
<li><p>VPC-A and VPC-C ချိတ်လို့ ရမှာ မဟုတ်ပါဘူး ။ VPC-A and VPC-C ချိတ်ချင်ရင် A and C ကြားမှာ လည်း peering connection တစ်ခု create လုပ်ပေးရမှာပါ။ အခုလို အခြေအနေ Non-transitive လို့ ‌ခေါ်ပါတယ်။ အဲ့တော့ VPC ‌တွေများ လာမယ်ဆိုရင် Peering connection ‌တွေလည်း များလာမှာ ပါ။</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761475871460/7289fdf6-7dc4-4abb-86ff-4e78274ec427.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>VPC peering သည် AWS Backbone network ကို အ သုံးပြုတာဖြစ်ပါတယ်။</p>
</li>
<li><p>Same region peering ကို Intra-region peering လို့ ‌‌ခေါ်ပြီး ၊ Different region peering ကို‌‌တော့ Inter-region peering လို့ ‌ခေါ်ပါတယ်။</p>
</li>
<li><p>Cost အနေနဲ့ ကတော့ VPC peering connection creating and maintaining အတွက် charges မရှိပါဘူး။ Data transfer charges only ဘဲ ကျသင့်မှာ ဖြစ်ပါတယ်။ Data transfer charges သည် same region (same AZ) အတွက်ဆို လျှ င် free ဖြစ်ပါတယ်။ same region (different AZ) အတွက်ဆိုလျှင် GB အလိုက် cost အနည်းငယ် ကုန်ကျမှာဖြစ်ပါတယ်။ Different region အတွက်ဆိုလျှင်လည်း GB အလိုက် ကုန်ကျမှာ ဖြစ်ပါတယ်။ AWS region တွေကို ဖြတ်သွားရတာဖြစ်လို့ same region ထက်တော့ cost ပိုများမှာ ဖြစ်ပါတယ်။</p>
</li>
<li><p>အချုပ်ဆိုရမယ်ဆိုရင် VPC အရေအတွက် နည်းမယ် ၊ Cost လည်း သက်သာချင်တယ် ဆိုရင် ‌‌‌တော့ VPC peering သုံးသင့်ပါတယ်။</p>
</li>
</ul>
<h3 id="heading-transit-gateway-tgw">Transit Gateway (TGW)</h3>
<ul>
<li><p>VPC အရေအတွက်လည်း များလာပြီ (e.g 10-100 VPC) ၊ နောက်ထပ်လည်း VPC ထပ်တိုးဖို့ ရှိမယ်၊ Multi-account/ Multi-region setup လည်း ဖြစ်လာပြီ ၊ on-premises network နဲ့ ချိတ်ဆက်ဖို့ လည်း လိုအပ်လာပြီ ဒီ အခြအနေထဲက တစ်ခုခုနဲ့ ကိုက်ညီနေပြီ ဆိုရင်တော့ Transit Gateway( TGW) ကို သုံးသင့်ပါသည်။</p>
</li>
<li><p>TGW သည်လည်း AWS backbone network ကို အ သုံးပြုတာဖြစ်ပါတယ်။</p>
<p>  ပထမဆုံး ဥပမာ အနေနဲ့ same Account, Same Region နဲ့ ဥပမာ ပြထားပါတယ်။</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761475908671/12112cbb-21ec-4b87-8356-7cea91d812fd.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Transit Gateway တစ်ခု create လုပ်ပါမယ်။</p>
</li>
<li><p>သက်ဆိုင်ရာ VPC တွေမှာ Transit Gateway Attachment create လုပ်ပါမယ်။</p>
</li>
<li><p>VPC (A,B,C) တွေရဲ့ Transit Gateway Attachment တွေက Transit Gateway ကို ချိတ်ဆက်ကြမယ်။ Route table တွေမှာ လည်း route တွေ ရေးပြီးပြီ ဆိုရင် VPC (A,B,C) တွေသည်TGW မှတဆင့် အချင်းချင်း connect လုပ်လို့ရပါပြီ။ အခုလို အခြေအနေကို Transitive ဖြစ်တယ်လို့ ခေါ်ပါတယ်။ Hub and spoke architecture ဖြစ်ပါတယ်။</p>
</li>
<li><p>Cost အနေနဲ့ ဆိုရင်တော့ Data processing fees ကို GB အလိုက်ပေးဆောင်ရမည့် အပြင် TGW attahcment fees ကို attachment တစ်ခုချင်းစီအတွက် နာရီအလိုက် ကျသင့်မှာပါ။ VPC peering ထက် ပိုပြီး အကုန်အကျ များတယ်ဆိုပေမယ့် large network တွေအတွက် ပို အဆင်ပြေ ပါတယ်။</p>
</li>
</ul>
<h3 id="heading-how-to-connect-vpcs-in-different-aws-accounts-but-in-the-same-region-using-a-transit-gateway-tgw">How to connect VPCs in different AWS accounts but in the same Region using a Transit Gateway (TGW) ?</h3>
<p>နောက်ထပ် use case တစ်ခု အနေနဲ့ ပြောပြချင်တာကတော့ Transit Gateway ကို အသုံးပြုပြီး different account , same region မှာ ရှိနေတဲ့ VPC အချင်းချင်း ချိတ်ဆက်ချင်ရင် ဘယ်လို ချိတ်ဆက်ရမလဲ ကို ‌‌ ပြပေးသွားပါ့မယ်။</p>
<p><strong>Transit Gateway (TGW) သည် regional resource ဖြစ်လို့ region တူရင် sharing လုပ်လို့ရပါတယ်။</strong></p>
<p>Different account ဖြစ်ပေမယ့် same region ဖြစ်လို့ TGW ကို sharing လုပ်ပြီး VPC အချင်းချင်း ချိတ်ဆက်လို့ ရပါတယ်။</p>
<ol>
<li><p>Create Transit Gateway (Account A)</p>
</li>
<li><p>Share TGW with Account B.</p>
</li>
<li><p>Accept the TGW Share (Account B)</p>
</li>
<li><p>Create a TGW Attachment (Account B)</p>
</li>
<li><p>Accept the Attachment (Account A)</p>
</li>
<li><p>Update TGW Route Tables</p>
</li>
<li><p>Update VPC Route Tables</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761475944154/6b3574bb-526e-4a32-ac32-bc8d3ff5df56.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-how-to-connect-vpcs-in-different-region-using-a-transit-gateway-tgw">How to connect VPCs in different Region using a Transit Gateway (TGW) ?</h3>
<p>နောက်ထပ် sharing လုပ်ပေးချင်တဲ့ use case တစ်ခုကတော့ Transit Gateway ကို အသုံးပြုပြီး</p>
<p>same account ဖြစ်စေ different account ဖြစ်စေ different region မှာ ရှိနေတဲ့ VPC တွေ အချင်းချင်း ချိတ်ဆက်ချင်ရင်တော့ Transit Gateway peering ကို အသုံးပြုပေးရမှာပါ။</p>
<p><strong>Transit Gateway (TGW) သည် regional resource ဖြစ်လို့ region မတူရင် sharing လုပ်လို့မရပါဘူး။</strong></p>
<p>Transit Gateway peering နဲ့ ပတ်သတ်ပြီး နောက်ထပ် blog တစ်ခု မှာ အသေးစိတ် ထပ်ရေးထားပေးပါတယ်။</p>
]]></content:encoded></item><item><title><![CDATA[Learn About Default VPC]]></title><description><![CDATA[အားလုံးဘဲ မင်္ဂလာပါ။
ဒီနေ့ sharing လုပ်ပေးချင်တာကတော့ AWS ရဲ့ Core Networking service ဖြစ်တဲ့ VPC အကြောင်းဘဲ ဖြစ်ပါတယ်။ AWS account create လုပ်လိုက်တာနဲ့ default ပါလာတဲ့ VPC အ ကြောင်းအရင်လေ့လာကြည့် ကြပါမယ်။
AWS account တစ်ခု create လုပ်လိုက်တာနဲ့ Reg...]]></description><link>https://kalaung.org/learn-about-default-vpc</link><guid isPermaLink="true">https://kalaung.org/learn-about-default-vpc</guid><category><![CDATA[vpc]]></category><category><![CDATA[Vpc basics]]></category><category><![CDATA[aws default vpc]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Thu, 16 Oct 2025 03:51:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1760585597889/90e28ea0-90c0-436d-ab53-179ef85d648f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးဘဲ မင်္ဂလာပါ။</p>
<p>ဒီနေ့ sharing လုပ်ပေးချင်တာကတော့ AWS ရဲ့ Core Networking service ဖြစ်တဲ့ VPC အကြောင်းဘဲ ဖြစ်ပါတယ်။ AWS account create လုပ်လိုက်တာနဲ့ default ပါလာတဲ့ VPC အ ကြောင်းအရင်လေ့လာကြည့် ကြပါမယ်။</p>
<p>AWS account တစ်ခု create လုပ်လိုက်တာနဲ့ Region 1 ခုမှာ VPC 1 ခု default အနေနဲ့ ပါပါတယ်။</p>
<p>(Region 1 ခုမှာ အများဆုံး VPC 5 ခုထိ create လုပ်လို့ရပါတယ်။ Region 1 ခုမှာ VPC 5 ခုထပ် ပိုပြီး လိုချင်ရင်‌‌</p>
<p>တော့ AWS management console မှာ Service Quota Increase Request လုပ်ပေးရမှာပါ။ )</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1760585128393/5cb8db4a-de01-4585-b56d-6a35bec139b8.png" alt class="image--center mx-auto" /></p>
<p>မတူညီတဲ့ Region ၊ မတူညီတဲ့ AZ အရေအတွက် ပေါ်မူတည်ပြီး ပါဝင်တဲ့ subnets အရေအတွက် ကွာသွားပါတယ်။ (e.g ap-southeast-1 region ဆိုရင် AZ 3 ခု ရှိလို့ subnets 3 ခု ပါဝင်ပါတယ်။ us-east-1 region ဆိုရင် AZ 6 ခု ရှိလို့ subnets 6 ခု ပါဝင်ပါတယ်။ )</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1760585150568/d2e30762-a99f-4533-89a6-f44e27b56564.png" alt class="image--center mx-auto" /></p>
<p>Default VPC မှာ Route Table 1 ခု ၊ Internet Gateway 1 ခု ပါ ပါတယ်။</p>
<p>Default Route Table မှာ Route 2 ကြောင်း ပါ ပါတယ်။</p>
<p>Route Table မှာ ဘာ Route ‌‌‌ ‌တွေ ပါလဲ ဆိုရင် VPC ထဲမှာ ရှိတဲ့ subnets ‌ အချင်းချင်း connect လုပ်နိုင်အောင် local route ‌ရေးထားပါတယ်။</p>
<pre><code class="lang-plaintext">Destination: 172.31.0.0/16   (or your VPC’s CIDR block)
Target: local
</code></pre>
<p>Internet Gateway မှ တစ်ဆင့် Internet ထွက်နိုင်အောင်လို့ route ‌ရေးထားပါတယ်။</p>
<pre><code class="lang-plaintext">Destination: 0.0.0.0/0
Target: igw-xxxxxxxx
</code></pre>
<p>Internet ထွက်နိုင်လို့ subnets ‌တွေသည် Public subnet ဖြစ်ပါသည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1760585288582/349e316f-80e2-4eb4-8670-6c7a8590fb0b.png" alt class="image--center mx-auto" /></p>
<p>Security Components အနေနဲ့ Default Network ACL နဲ့ Default Security group ၁ ခုစီ ပါ ပါသည်။</p>
<p>Default NACL, Security Group ‌တွေ မ သုံး ဘဲနဲ့ စိတ်ကြိုက် ထပ်ပြီး create လုပ်လို့ရပါတယ်။</p>
<p>ဒီ‌ ‌လောက််ဆိုရင်‌ တော့ Default VPC မှာ ဘာတွေပါ လဲ ဆိုတာ သိလောက်ပြီ ထင်ပါတယ်။</p>
]]></content:encoded></item><item><title><![CDATA[Labs - IAM Roles cross-account access]]></title><description><![CDATA[အားလုံးဘဲ မင်္ဂလာပါ။
ဒီနေ့ပြောပြသွားမယ့် Lab လေးကတော့ Roles တစ်ခု create လုပ်ပြီး သွားတဲ့ အခါမှာ အဲ့ roles ကို create လုပ်ခဲ့တဲ့ account မှာ ရှိနေတဲ့ user ကဘဲ သုံးလို့ ရတာမဟုတ်ဘဲ နဲ့ တခြား account တစ်ခုမှာ ရှိနေတဲ့ user ကပါ ယူသုံးလို့ ရတယ်ဆိုတာကို la...]]></description><link>https://kalaung.org/labs-iam-roles-cross-account-access</link><guid isPermaLink="true">https://kalaung.org/labs-iam-roles-cross-account-access</guid><category><![CDATA[IAMRoles]]></category><category><![CDATA[roles]]></category><category><![CDATA[AWS]]></category><category><![CDATA[aws-cross-account]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Tue, 07 Oct 2025 15:42:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1760417006045/87d1d04e-a8ae-4c16-aedc-4f154f0de865.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးဘဲ မင်္ဂလာပါ။</p>
<p>ဒီနေ့ပြောပြသွားမယ့် Lab လေးကတော့ Roles တစ်ခု create လုပ်ပြီး သွားတဲ့ အခါမှာ အဲ့ roles ကို create လုပ်ခဲ့တဲ့ account မှာ ရှိနေတဲ့ user ကဘဲ သုံးလို့ ရတာမဟုတ်ဘဲ နဲ့ တခြား account တစ်ခုမှာ ရှိနေတဲ့ user ကပါ ယူသုံးလို့ ရတယ်ဆိုတာကို lab ‌လုပ်ပြသွားမှာ ဖြစ်ပါတယ်။</p>
<p>AWS Account B မှာ ရှိနေတဲ့ IAM user လေးက AWS Account A မှာ ရှိနေ တဲ့ IAM roles ကို သုံးပြီးAccount A မှာ ရှိနေတဲ့ S3 Bucket ကို fullaccess လုပ်လို့ရတာလေးကို ပြောပြသွားမှာ ဖြစ်ပါတယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759847816782/1c7c39db-a801-43d2-8160-55b2507111bf.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p>ပထမဆုံး အနေနဲ့ AWS account 2 ခု ရှိရပါမယ်။</p>
</li>
<li><p>Account A ထဲမှာ S3 bucket တစ်ခု create လုပ်ရပါမည်။ Objects ထည့်ထားချင်လည်းရပါတယ်။</p>
</li>
<li><p>Account A ထဲမှာ Roles create လုပ်ရပါမည်။</p>
</li>
<li><p>Account B ထဲ မှာ IAM user create လုပ်ရပါမည်။ အဲ့ IAM user မှာ Account A မှာ ရှိနေတဲ့ roles ကို assume role လုပ်ပါမယ်ဆိုတဲ့ permissions policy ‌attach လုပ်ပေးရပါမယ်။</p>
</li>
</ol>
<p>Account 2 ခု ရှိထားပြီးသားဖြစ်တဲ့ အတွက် အခု Account A မှာ S3 bucket တစ်ခု create လုပ်ပါမယ်။</p>
<p>Bucket name - labbucket-3189 နာမည်နဲ့ bucket တစ်ခု create လုပ်ထားပါမည်။</p>
<p>Bucket ထဲမှာ object တစ်ခု ထည့် ထားလိုက်ပါ တယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759847870184/68f9b1e4-e80b-4df3-97da-99ce68599b1b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759847878516/b105409b-20dc-4bc1-8443-d6454381549e.png" alt class="image--center mx-auto" /></p>
<p>Roles create လုပ်ပါမည်။</p>
<p>IAM &gt; Roles &gt; Create role</p>
<p>Roles ကို create လုပ်တဲ့ အခါမှာ Trusted entity type ရွေးပေးရပါတယ်။ အခု lab အတွက် AWS Account ကို ရွေးပါမည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759847897554/f1545cde-c901-4323-a118-da2d59e50f57.png" alt class="image--center mx-auto" /></p>
<p>AWS Account ကို ‌ရွေးပြီးတဲ့ အခါမှာ ဘယ် account ID က ဒီ roles ကို သုံးမှာလဲ ဆိုပြီး Account ID သတ်မှတ်‌ ပေးရပါမည်။</p>
<p>Another AWS Account ကို ‌select လုပ်ပါမည်။ Account B ရဲ့ ID ကို ထည့်ပေး ရပါမည် ။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759847920372/7f8330cb-ead8-40cc-85d3-cdc742770d78.png" alt class="image--center mx-auto" /></p>
<p>နောက် တ ဆင့် အနေ နဲ့ Roles မှာ တွဲမယ့် permissions ရွေးချယ်ပေး ရပါမည်။</p>
<p>ဒီ Lab အတွက် S3Fullaccess permission ‌ရွေးချယ်ပေးပါမည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759847937748/ba06cbf6-60d8-44e0-8c3d-59fb0f0c9781.png" alt class="image--center mx-auto" /></p>
<p>Role name ‌ပေးပါမည် ။</p>
<p>Then Create role.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759847955021/ffd6b892-9619-45f9-b52d-08c5a2fccef8.png" alt class="image--center mx-auto" /></p>
<p>အခု ဆိုရင် Account A ဘက် မှာ S3 bucket and roles create လုပ်ပြီးသွားပါပြီ။</p>
<p>Roles ရဲ့ Trusted entity မှာ another account (Account B) ရဲ့ ID ကို ‌ရွေးချယ်ထားပါတယ်။</p>
<p>Roles မှာ S3Fullaccess permissions သတ်မှတ်ထားပါတယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759847977911/e0de98f0-80d0-4387-8510-b468ce4d7508.png" alt class="image--center mx-auto" /></p>
<p>အခု နောက်တစ်ဆင့် အနေ နဲ့ Account B ထဲကို ဝင်ပြီး IAM user create လုပ်ပါမယ်။</p>
<p>IAM &gt; user &gt; create user</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759847996171/8822f934-946c-46d5-89d7-2abf0d4420e5.png" alt class="image--center mx-auto" /></p>
<p>Next &gt;</p>
<p>user ကို permission သတ်မှတ်ပေးရပါမည်။ Attach policies directly ကို ရွေးပါမည်။</p>
<p>အခု သတ်မှတ်ချင် ‌ သော policy ကို create လုပ်ရန် create policy ကို ‌ရွေးပါမည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759848035588/f3a1db30-7ab0-474b-badd-5fbff99083cd.png" alt class="image--center mx-auto" /></p>
<p>Create policy &gt; JSON ကို ‌ ရွေးပါမည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759848053644/dfcc773f-839d-43da-8713-2a4e15b9a908.png" alt class="image--center mx-auto" /></p>
<p>အောက်ပါ policy ကို ‌‌‌ ‌ရေးပါမည်။</p>
<p>Account B မှာ ရှိတဲ့ Hla_Hla ဆိုတဲ့ IAM user ‌သည် Account A မှာ ရှိနေတဲ့ roles ကို သုံးမှာ ဖြစ်လို့</p>
<p>Effect : Allow</p>
<p>Action : sts : AssumeRole</p>
<p>Resource မှာ Account A မှာ ရှိတဲ့ roles name ARN ကို copy သွားယူပြီး ထည့်ပေးရမှာ ဖြစ်ပါတယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759848133227/daacdaf5-ec42-4fee-ac3f-a852f59c8cad.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759848307240/31bdd103-2d9c-45ce-9009-336e6c4e1f96.png" alt class="image--center mx-auto" /></p>
<p>Next &gt; Policy name ‌‌ပေးပါမည် ။</p>
<p>Create policy.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759848338905/76fd3da8-9dc2-4844-bc18-83af028f32fd.png" alt class="image--center mx-auto" /></p>
<p>Create policy ကို နှိပ်ပြီး လျှင် user create လုပ်နေတဲ့ tab ဘက်ကို ပြန်လာရပါမည်။</p>
<p>Create policy ‌ရှေ့က refresh policies ကို နှိပ်မှ create လုပ်ခဲ့ ‌သော policy name ကို မြင်ရမည် ဖြစ်ပါသည်။</p>
<p>မိမိ create လုပ်ခဲ့ ‌သော policy ကို ‌ရွေးပါ။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759848359705/b79c0e77-ce64-4a85-ba3b-e31e96437e8b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759848369013/c09be80e-6aba-4011-8f17-babfd5f03e07.png" alt class="image--center mx-auto" /></p>
<p>Next &gt; Create user.</p>
<p>အခု ဆိုရင်‌တော့ Account B ထဲမှာ IAM user create လုပ်ပြီးသွားပြီ ဖြစ်ပါတယ်။</p>
<p>အဲ့ IAM user ‌သည် Account A မှာ ရှိတဲ့ roles ကို သုံးပါမယ်ဆိုပြီး permissions လည်း သတ်မှတ်ပြီးပြီ ဖြစ်ပါသည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759850096357/82e8d098-c7c3-44ee-9060-c1fae5c6a01a.png" alt class="image--center mx-auto" /></p>
<p>Account B ရဲ့ IAM user Hla_Hla နဲ့ login ဝင်ထားပါမည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759850112930/7708e10e-e09a-44a9-a0b5-9f58f11947f2.png" alt class="image--center mx-auto" /></p>
<p>S3 ကို ဝင်ကြည် ပါမည်။ ‌‌အောက််ပါအတိုင်း ‌တွေ့ရပါလိမ့်မည်။</p>
<p>Hla_Hla ဆိုတဲ့ user မှာ assume role policy ကလွဲလို့ တခြား ဘာ permissions policy မှ ‌attach လုပ်ထားတာ မရှိလို့ ‌ ဖြစ်ပါတယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759850131194/bff162c6-0813-416e-9bef-fd5fce8383a2.png" alt class="image--center mx-auto" /></p>
<p>Switch role လုပ်ရန် အတွက် account id ရဲ့ arrow ကို နှိပ်ပြီး Add session &gt; New role လုပ်ပါမည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759850164549/6f167610-d772-4b63-8f6b-f9c91cba4d79.png" alt class="image--center mx-auto" /></p>
<p>အောက်ပါ အတိုင်း ‌ပေါ်လာပါမည်။</p>
<p>Account ID - role ရှိသော account ID or Alias (Account A ရဲ့ Account ID or alias ထည် ‌ပေးရပါမည်။ )</p>
<p>IAM role name - role name ထည့် ‌ပေးရပါမည်။</p>
<p>Switch role &gt;</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759850185146/12f6e5fc-f387-4aae-ba72-1261bc07710f.png" alt class="image--center mx-auto" /></p>
<p>S3 bucket ကို ဝင် ကြည့်ပါမည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759850210129/d04a7a48-22ee-4c8e-bf4f-f6cc02c150da.png" alt class="image--center mx-auto" /></p>
<p>Objects ကို လည်း delete လုပ်လို့ရတာ တွေ့ရပါလိမ့်မယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759850231636/46c4a00a-ae30-4339-96a8-80dda8280425.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Difference between IAM user directly attach policy and IAM user assuming an IAM role]]></title><description><![CDATA[အားလုံးဘဲ မင်္ဂလာပါ။
ဒီနေ့ sharing လုပ်ပေးချင်တာကတော့ IAM user တွေမှာ policy ကို directly attach လုပ်ပြီး သုံးတာနဲ့ Roles ကို assume လုပ်ပြီး သုံးတာ ဘာကွာခြားမှုရှိလဲ ဆိုတာကို ဆွေးနွေးသွားမှာ ဖြစ်ပါတယ်။
IAM user မှာ policy ကို directly attach လုပ်ပြီ...]]></description><link>https://kalaung.org/difference-between-iam-user-directly-attach-policy-and-iam-user-assuming-an-iam-role</link><guid isPermaLink="true">https://kalaung.org/difference-between-iam-user-directly-attach-policy-and-iam-user-assuming-an-iam-role</guid><category><![CDATA[iam role in aws]]></category><category><![CDATA[AWS]]></category><category><![CDATA[IAM user]]></category><category><![CDATA[Policy]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Mon, 29 Sep 2025 04:37:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759128917983/6726a9ed-2fbf-495c-8911-aa8c876c089b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးဘဲ မင်္ဂလာပါ။</p>
<p>ဒီနေ့ sharing လုပ်ပေးချင်တာကတော့ IAM user တွေမှာ policy ကို directly attach လုပ်ပြီး သုံးတာနဲ့ Roles ကို assume လုပ်ပြီး သုံးတာ ဘာကွာခြားမှုရှိလဲ ဆိုတာကို ဆွေးနွေးသွားမှာ ဖြစ်ပါတယ်။</p>
<p>IAM user မှာ policy ကို directly attach လုပ်ပြီး သုံးတဲ့ အခါမှာ ဘယ်လို အလုပ်လုပ်သလဲ ဆိုတော့ user ‌ သည် long-term credentials (username/password or access key) ကို သုံးပြီး ဝင်ရောက်ပါတယ်။</p>
<p>Long-term credentials ဖြစ်တဲ့ (Username/password or access key )တို့သည် ‌leak ဖြစ်သွားနိုင်ပါသည်။ ထို့ကြောင့် security point of view အရ ကြည့်မယ်ဆိုရင် Risk ရှိနိုင်ပါတယ်။</p>
<p>ဘယ်လိုအခါမျိုးမှာ policy ကို direct attach လုပ်ပြီးသုံးသင့်လဲဆို ‌တော့ user သည် ဒီ permission ကို ဘဲ အမြဲသုံး ဖို့ လိုအပ်တဲ့ အခါမှာ မျိုးမှာ ဖြစ်စေ ၊ minimal permission ‌ ဖြစ်တဲ့ read-only access ကိုလိုအပ်တဲ့အခါမျိုးမှာဖြစ်‌စေ သုံးသင့်ပါတယ်။</p>
<p>E.g - Mg Mg ဆိုတဲ့ user ကို S3RealonlyAccess ‌‌policy ကို directly attach ပေးထားမယ်ဆို ရင် အဲ့ user login ဝင်တိုင်း S3 Bucket ‌တွေကို အမြဲ readonly access ရနေမှာ ဖြစ်ပါတယ်။</p>
<p>IAM user မှာ Roles ကို assume လုပ်ပြီး သုံးတဲ့ အခါမှာ ဘယ်လို အလုပ်လုပ်သလဲဆိုတော့ user သည် permission တစ်ခုကို ခဏ ငှားသုံး တဲ့ပုံစံနဲ့ အလုပ်လုပ်ပါတယ်။</p>
<p>Credentials အတွက်ကို AWS STS( Security Token Service) ကနေ temporary credentials ‌‌ တစ်ခု ထုတ်ပေးပါတယ်။ အဲ့ credentials သည် time limit ရှိပါသည်။ Temporary credentials ဖြစ်တဲ့ အတွက် security point of view အရ ကြည့်မယ်ဆိုရင် long-term credentials ထက် ပို ပြီး safe ‌ ဖြစ်ပါတယ်။</p>
<p>Cross-account access ကို လည်းSupport လုပ်ပေးတဲ့ အတွက် AWS multi-account setup ‌တွေ အတွက် လည်း အဆင်‌ပြေပါတယ်။</p>
<p>Roles ကို ဘယ်လိုနေရာမျိုးမှာ သုံးသင့်လဲဆိုရင် user တစ်‌ယောက်ကို permissions အမြဲ‌ ပေးမထားချင်ဘူး၊ လိုအပ်တဲ့ အခါမှ သာ အဲ့ permissions ကို သုံးစေချင်တယ်ဆိုရင် Roles ကို သုံးသင့်ပါတယ်။</p>
<p>e.g - Mg Mg ဆိုတဲ့ user ကို S3FullAccess ‌‌ ‌‌ပေးချင်တယ် အမြဲတမ်းလည်း မဟုတ်ဘူး လိုအပ်တဲ့အခါမှာ သာ S3Fullaccess ‌‌ပေးသုံးချင်တယ်ဆိုရင် roles ကို သုံးသင့်ပါတယ်။ ဒီ Roles ကို သုံးလိုက်တဲ့ အချိန်လေးမှာ AWS STS ကနေ ထုတ်ပေးတဲ့ Temporary credentials လေးတစ်ခုကို သုံးပြီး S3FullAccess ရနေမှာဘဲဖြစ်ပါတယ်။</p>
]]></content:encoded></item><item><title><![CDATA[IAM Users, User Groups and Roles]]></title><description><![CDATA[အားလုံးဘဲ မင်္ဂလာပါ။ ဒီတခါ sharing လုပ်ပေးချင်တာက တော့ AWS သုံးမယ်ဆိုရင် မဖြစ်မနေ သိထားရမယ့်
IAM Users, User Groups and Roles အကြောင်းဘဲ ဖြစ်ပါတယ်။
IAM Users

AWS ကို သုံးမယ် ဆိုရင် Daily work တွေ အတွက် Root user ကို မသုံးသင့် ဘူးဆိုတာ အားလုံးလည်း သိ...]]></description><link>https://kalaung.org/iam-users-user-groups-and-roles</link><guid isPermaLink="true">https://kalaung.org/iam-users-user-groups-and-roles</guid><category><![CDATA[IAM user]]></category><category><![CDATA[IAMRoles]]></category><category><![CDATA[IAM]]></category><category><![CDATA[AWS]]></category><category><![CDATA[iam role in aws]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Wed, 24 Sep 2025 05:41:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758694250415/0a94a3a3-1f5c-427b-abaa-537e1fc1a96d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးဘဲ မင်္ဂလာပါ။ ဒီတခါ sharing လုပ်ပေးချင်တာက တော့ AWS သုံးမယ်ဆိုရင် မဖြစ်မနေ သိထားရမယ့်</p>
<p>IAM Users, User Groups and Roles အကြောင်းဘဲ ဖြစ်ပါတယ်။</p>
<h3 id="heading-iam-users">IAM Users</h3>
<ul>
<li><p>AWS ကို သုံးမယ် ဆိုရင် Daily work တွေ အတွက် Root user ကို မသုံးသင့် ဘူးဆိုတာ အားလုံးလည်း သိပြီးသားဖြစ်မှာပါ။ အဲ့ဒါကြောင့်မလို့ AWS ကို သုံးဖို့ အတွက် IAM users တွေ Create လုပ်ပေးရပါမယ်။</p>
</li>
<li><p>IAM user ‌‌create လုပ်ပြီးပြီ ဆိုရင် အဲ့ user အတွက် သက်ဆိုင်ရာ permissions သတ်မှတ် ‌ ပေးရပါမည်။ IAM users တိုင်းကို မလိုအပ်ဘဲနဲ့ Admin permissions ပေးစရာမလိုပါ။</p>
</li>
<li><p>Job Functions မတူတဲ့ user တွေ ကိုယ့် user ကိုယ့် permissions သတ်မှတ်ချက်နဲ့ သီးသန့် သုံးဖို့ အတွက် ဖြစ်ပါတယ်။ (e.g Admin, Developer, tester,….)</p>
</li>
<li><p>IAM user နှင့် login ဝင်ရန် Username + password လိုအပ်ပါသည်။</p>
</li>
<li><p>IAM user တစ်ယောက်ချင်းစီ ကို သီးခြားစီ Manage လုပ်နိုင်ပါသည်။</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758691509327/20790eac-403b-4781-8874-f24d83a90511.png" alt class="image--center mx-auto" /></p>
<p><strong>Figure - IAM users</strong></p>
<h3 id="heading-user-groups">User Groups</h3>
<ul>
<li><p>User Groups ဆိုသည်မှာ အလွယ်ပြောရရင် permissions တူတဲ့ IAM users တွေကို စု ထားတဲ့ Group တစ်ခုဖြစ်ပါတယ်။</p>
</li>
<li><p>(e.g - Developers 3 ယောက်အတွက် Group တစ်ခု create လုပ်ပြီး အဲ့ Group ထဲကို IAM user 3 ယောက် ထည့်ထားခြင်းဘဲ ဖြစ်ပါတယ်။ Group ကို permission ပေးလိုက်တာနဲ့ group ထဲ မှာ ရှိတဲ့ user တိုင်းကို အဲ့ permission သက်ရောက်သွားမှာ ဖြစ်ပါတယ်။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758691548338/829ea9c4-97ef-48ff-b2a8-b42365d3bdf7.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<p><strong>Figure - IAM User Groups</strong></p>
<h3 id="heading-roles">Roles</h3>
<ul>
<li><p>Roles ဆိုတာ သတ်မှတ်ထားတဲ့ permissions တွေပါတဲ့ temporary identity တစ်ခုဖြစ်ပါတယ်။</p>
</li>
<li><p>အဲ့ဒီRoles ကို AWS services (E.g EC2) , users ‌‌တွေက ယူသုံးလို့ရပါတယ်။</p>
</li>
<li><p>Roles တစ်ခု create လုပ်တဲ့ အခါမှာ AWS Services ‌‌ တွေ က ဒီroles ကိုသုံးမှာလား ၊ AWS Account က ဒီ roles ကို သုံးမှာလားဆိုပြီး Trusted entity ‌ရွေးချယ်ပေးရပါတယ်။ ရွေးချယ်စရာ Trusted entity 5 မျိုးရှိပါတယ်။</p>
</li>
</ul>
<ol>
<li><p>AWS Service</p>
</li>
<li><p>AWS Account</p>
</li>
<li><p>Web Identity</p>
</li>
<li><p>SAML 2.0 federation</p>
</li>
<li><p>Custom Trust Policy</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758691712727/4e6df360-9ddf-4a24-bbdf-351b378a29a5.png" alt class="image--center mx-auto" /></p>
<p>ဒီလောက်ဆိုရင် IAM Users, User Groups and Roles အကြောင်းလေး သိလောက်ပြီ ထင်ပါတယ်။</p>
<p>အားလုံးကို ကျေးဇူးတင်ပါတယ်။</p>
]]></content:encoded></item><item><title><![CDATA[Basic Best Practices After creating AWS Account]]></title><description><![CDATA[AWS root user create လုပ်ပြီသွားတဲ့ အခါမှာ Security Best Practices အရ Root user ကိုMFA ( Multi-Factor Authentication) enable လုပ်ထားသင့်ပါတယ်။

IAM user create လုပ်ထားသင့်ပါတယ်။ IAM user create လုပ်ပြီး အဲ့IAM user အတွက်permission သတ်မှတ်‌ပေးရပါမည်။ ...]]></description><link>https://kalaung.org/basic-best-practices-after-creating-aws-account</link><guid isPermaLink="true">https://kalaung.org/basic-best-practices-after-creating-aws-account</guid><category><![CDATA[Multi Factor Authentication]]></category><category><![CDATA[AWS]]></category><category><![CDATA[IAM,MFA,Access key ID,Secret access key]]></category><category><![CDATA[#AWSBilling]]></category><category><![CDATA[alias]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Wed, 24 Sep 2025 04:53:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759034438118/c8ee1358-0b56-4849-a001-65e0db1b3a6f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ul>
<li><p>AWS root user create လုပ်ပြီသွားတဲ့ အခါမှာ Security Best Practices အရ Root user ကိုMFA ( Multi-Factor Authentication) enable လုပ်ထားသင့်ပါတယ်။</p>
</li>
<li><p>IAM user create လုပ်ထားသင့်ပါတယ်။ IAM user create လုပ်ပြီး အဲ့IAM user အတွက်permission သတ်မှတ်‌ပေးရပါမည်။ IAM user ကို လည်းMFA enable လုပ်ထားသင့်ပါသည်။</p>
</li>
<li><p>Cost Control Best Practices အရ billing alerts နဲ့ free tier usage alerts တို့ကို enable လုပ်ထားသင့်ပါတယ်။</p>
<h3 id="heading-enable-mfa-multifactor-authentication-for-the-root-user"><strong>Enable MFA (MultiFactor Authentication) for the root user.</strong></h3>
<p>  Log in with root user. Type your email address and password.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758687870781/d914cd73-5056-4019-8fee-bd7fe59e1f5a.png" alt class="image--center mx-auto" /></p>
<p>  You will see the following page. Go to IAM dashboard to enable MFA.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758687907977/18994e2a-f046-4061-989d-1daa98cd1d43.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758687926904/73e51a9a-928a-482f-8690-9a69e8cca59a.png" alt class="image--center mx-auto" /></p>
<p>  Click Add MFA.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758687954075/a0e5c1b7-8164-48f3-8467-d68986d892e9.png" alt class="image--center mx-auto" /></p>
<p>  You will see the following page.</p>
<p>  “Device name” သတ်မှတ်‌‌ ‌‌ရပါမည်။Device options (3) မျိုး ထဲမှAuthenticator app ကို သုံးပြီး လုပ်ပြပေးသွားပါ့မယ်။</p>
<p>  Next&gt;</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758687971242/f4b6573b-a026-4b03-b5fa-2179868cd288.png" alt class="image--center mx-auto" /></p>
<p>  No.1 အနေနဲ့ မိမိph ထဲမှာ Authenticator app install လုပ်ထားရပါမည်။</p>
<p>  (Google Authenticator app or Microsoft Authenticator or others…….)</p>
<p>  No.2 Show QR ကို နှိပ်ပါ။ ‌‌ပေါ်လာသောQR ကို Authenticator app မှScan လုပ်ပါ။</p>
<p>  No.3 Authenticator app မှ‌‌ ပေါ်လာသော Code No ကို ရိုက်ထည့်ပါ။ Code No 2 ခု ရိုက်ထည့်ပေးရပါမည်။</p>
<p>  Add MFA ကို နှိပ်ပါ။</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758687985781/b7f1cfdf-3be1-4917-b590-d50810ac1dda.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>You will see the following page after Add MFA.</p>
<p>  IAM &gt; Dashboard</p>
<p>  ပုံမှာ ပြထားတာ လေးကတော့ Root user ရော IAM user ရော MFA Enable လုပ်ထားတာလေး ဖြစ်ပါတယ်။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688038818/7a19c591-8296-4eb8-b7e3-d622848abc7e.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-create-iam-user-and-set-permission-administratoraccess-permission-for-this-lab"><strong>Create IAM user and set permission. (AdministratorAccess permission for this lab)</strong></h3>
<p>  Go to IAM dashboard and click Users. And then click “Create user”.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688255259/d429fada-a64b-4ddc-b4f5-f7d79d3686c8.png" alt class="image--center mx-auto" /></p>
<p>  Type username and set password.</p>
<p>  (Check “Provide user access to the AWS Management Console- optional)</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688276758/9b4d4f13-b96e-451c-830c-664cda403c50.png" alt class="image--center mx-auto" /></p>
<p>  Set “AdministratorAccess” permissions.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688287498/5c249d0d-4cd4-41bd-8715-beac8d86fe80.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688300910/ffa27595-2c21-40fc-9ad7-86f0477d4bb4.png" alt class="image--center mx-auto" /></p>
<p>  Create user.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688315011/e6ec9a8a-7c47-484b-9adf-2ca88d54288d.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688323043/466cfd8b-6d3f-484a-8a0f-d7e49c629e8a.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-iam-user-login-with-account-id-and-create-alias"><strong>IAM user login with Account ID and create alias.</strong></h3>
<p>  IAM user create လုပ်ပြီးသွားပြီ ဆိုတော့IAM user နဲ့ login ဝင်ကြည့်ပါမယ်။</p>
<p>  IAM user sign in အတွက်Account ID or alias လိုအပ်ပါတယ်။ Account alias မသတ်မှတ်ရ‌သေးတဲ့ အတွက် Account ID နဲ့ ဝင်ပါမယ်။ မိမိ သတ်မှတ်ခဲ့သောIAM username and password လိုပါမယ်။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688376893/9ac8d5f6-e545-4570-b936-d5039c7f9e66.png" alt class="image--center mx-auto" /></p>
<p>  You will see AWS management console home page after login.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688500165/e831d7d6-bce5-4c92-97d0-69d30c4b9ac9.png" alt class="image--center mx-auto" /></p>
<p>  IAM user နဲ့ login ဝင်တဲ့ အချိန် တိုင်းAccount ID မှတ်ထားစရာ မလိုဘဲ မိမိ သတ်မှတ်ထားတဲ့Alias နဲ့ ဝင်ဖို့ အတွက် အခုAlias သတ်မှတ်ပါမယ်။</p>
<p>  Alias သတ်မှတ်ရန်အတွက်IAM page ထဲသို့ ဝင်ပါ။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688515006/b112d874-7bd5-43c8-9cea-5e9e5e5405e9.png" alt class="image--center mx-auto" /></p>
<p>  IAM &gt; Dashboard &gt; Account Alias Create ကို နှိပ်ပါ။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688531083/bce141bc-84fd-43d3-9ac8-64cd19b4b0b7.png" alt class="image--center mx-auto" /></p>
<p>  Set your alias.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688549530/3e81b208-eda4-4bc8-94b7-1a39971e22af.png" alt class="image--center mx-auto" /></p>
<p>  Now you can login with your alias.</p>
<h3 id="heading-iam-user-login-with-alias-and-access-billing-preferences-page"><strong>IAM user login with alias and access Billing Preferences page.</strong></h3>
<p>  မိမိ create လုပ်ခဲ့‌သော alias, IAM username, password တို့နှင့် login ၀င်ပါ။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688619062/31059793-5753-46ca-b20f-5b7503da2081.png" alt class="image--center mx-auto" /></p>
<p>  Login ၀င်ပြီးတဲ့အခါ Console home page ရဲ့ ညာဘက်အပေါ်မှာ alias name, account id and IAM user name တို့ကို တွေ့ရပါလိမ့်မည်။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688637216/407956c7-0f9d-4ec7-af56-79757fc4a1a0.png" alt class="image--center mx-auto" /></p>
<p>  Go to the “Billing and Cost Management” Page.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688653205/6e79bcb4-6f94-43c3-bcbf-6fcb41e202e1.png" alt class="image--center mx-auto" /></p>
<p>  And then go to “Billing preferences”. (Billing Preferences အကြောင်း နောက်တွင် အသေးစိတ်ထပ်ရှင်းပါမည်။) You will see the following page.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688678524/6cc610fc-546c-4c81-b287-2ceebe88918b.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>IAM user သည် Adminstrator access permission သတ်မှတ်ထားပေမယ် Billing Preferences page ထဲသို့ဝင်ကြည့် ရန်permissions လိုပါသည်။</p>
</li>
<li><p>Billing Preferences page ထဲ သို့ ဝင်ဖို့ လိုအပ်သည့် permissions ကို Root user ဘက်မှ Activated လုပ်ပေးရပါမည်။ ထို့ကြောင့် root user နှင့် login ပြန်ဝင်ပါမည်။</p>
</li>
<li><p>root user နှင့်login ဝင်ပြီး လျှင် ညာဘက် အပေါ် မှာ ရှိသော Account ID dropdown arrow ကို နှိပ်ပြီးAccount ကို နှိပ်ပါ။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688706488/49a729a3-b743-4a03-ad98-56991bdf4092.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688714059/5155b31d-35f1-4718-86df-424fe5f52dc0.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
</ul>
<p>    Scroll down, you will see the “IAM user and role access to Billing information” is “Deactivated”.</p>
<p>    So, you need to activated. Go to Edit.</p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688745529/6adf31bb-5837-4a7d-9aca-4fcedbef07de.png" alt class="image--center mx-auto" /></p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688761371/2d30e1ac-a58c-4630-893c-e52a47f300c9.png" alt class="image--center mx-auto" /></p>
<p>    Check “Activated IAM access” and click update.</p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688776988/ff752402-60c9-4d0c-aca9-2334cde04c56.png" alt class="image--center mx-auto" /></p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688783749/a36b7cf1-7041-4009-a041-9cd521caa0ed.png" alt class="image--center mx-auto" /></p>
<p>    After Activated, login with IAM user and check Billing Preferences. You can access Billing Preferences page like that.</p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688796064/696624df-ba2b-45c0-932e-5054577c77e2.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-about-billing-preferences"><strong>About Billing Preferences</strong></h3>
<p>    Billing Preferences မှာ ဘာ တွေ လုပ်လို့ ရလဲဆိုရင်</p>
<ol>
<li><p>AWS မှာ ကိုယ်သုံးထားတဲ့service တွေက ဘယ်လောက်ကျလဲ ၊ ဘာservice တွေသုံးထားလဲဆိုတဲ့ Monthly invoice တွေကို PDF format နဲ့ကိုယ့် ဆီemail ပို့အောင် Invoice Delivery Preferences ကိုActivated လုပ်ပေးလို့ရပါတယ်။</p>
</li>
<li><p>Free Tier Alerts နဲ့ ပတ်သတ်တဲ့ usage တွေကို ကိုယ့်ဆီEmail ပို့အောင် သတ်မှတ်ထားပေးလို့ရပါတယ်။</p>
</li>
<li><p>CloudWatch billing alerts ‌‌‌တွေ လက်ခံလို့ ရအောင် enable လုပ်ပေးလို့ရပါတယ်။</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688832225/39b7f119-cb5b-4aa3-9643-fac989fcd714.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<p>    Click “Edit”.</p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688847883/8146f38f-c9a6-44e4-a699-27d7c71dde72.png" alt class="image--center mx-auto" /></p>
<p>    Check “PDF invoices delivered by email” and then click Update.</p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688864392/8be31159-5310-4c52-be3a-96ad69e29fdf.png" alt class="image--center mx-auto" /></p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688872183/e12f4bce-8e16-4ff1-ae5e-ae899c53859e.png" alt class="image--center mx-auto" /></p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688883150/ff9babf4-d352-46ff-beee-1f443e9a9814.png" alt class="image--center mx-auto" /></p>
<p>    Setting up CloudWatch billing alarms</p>
<ul>
<li><p>CloudWatch billing alarms ဘာလို့ သတ်မှတ်သလဲဆိုရင် ကိုယ့်ရဲ့ AWS total bill သည် ကိုယ်သတ်မှတ်ထားသော ပမာ ဏ(e.g - 5$) ထက်ကျော် ခဲ့ မယ်ဆိုရင် ကိုယ့်ဆီ Noti ပို့အောင် လို့ သတ်မှတ်ခြင်းဖြစ်ပါတယ်။</p>
</li>
<li><p>CloudWatch မှာ Billing Alarms သတ်မှတ်မယ်ဆိုရင် Region သည် N.Virginia (us-east-1) ဖြစ်မှ Billing Alarms သတ်မှတ်လို့ရပါမည်။</p>
<p>  Go to CloudWatch &gt; Alarms &gt; Create alarm</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688905963/8f80d36f-39cd-4f3d-909c-b6b75baa6d51.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688913430/93d6386d-8fb0-42cf-9c1a-b42f32968410.png" alt class="image--center mx-auto" /></p>
<p>  Conditions မှာ</p>
<p>  Threshold type &gt; Static</p>
<p>  Greater than 5 USD သတ်မှတ်ပါမည်။ (မိမိလိုအပ်‌သော amount သတ်မှတ်နိုင်ပါသည်။)</p>
<p>  Next.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688927646/b22caf38-0c8d-4b29-803c-fbf19d00a7b4.png" alt class="image--center mx-auto" /></p>
<p>  Select “ Create new Topic” Topic name ပေးပါ။ Email ထည့်ပါ။ Click Create Topic.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688943919/0a06d659-cd81-48e3-a0e0-713cb48e9438.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688951055/bd43a09d-6b00-4455-adac-43cf37c0836f.png" alt class="image--center mx-auto" /></p>
<p>  ကိုယ့်ရဲ့ Email ထဲ ကို Confirm လုပ်ဖို့ mail ရောက်လာပါလိမ့်မယ်။ Confirm Subscription ကိုနှိပ်ပါ။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688966039/1a8080b4-ded0-4f9e-a58e-be1e4cdd009e.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688972592/e3189083-5359-4fa2-a063-be36938d1b45.png" alt class="image--center mx-auto" /></p>
<p>  Alarm name ‌‌‌‌ ‌သတ်မှတ်‌ရပါမည်။</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758688990389/d4a02598-ff85-4d0c-979f-b331bd260279.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758689000301/0b660660-0512-4900-b809-4f2d592a0af0.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758689007687/5464ea61-9f9b-49bf-b5f5-bb75df3ac76e.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[How to Create AWS Free Tier Account]]></title><description><![CDATA[အားလုံးဘဲ မင်္ဂလာပါ။ ဒီနေ့‌ Sharing လုပ်ပေးချင်တဲ့ခေါင်းစဉ်လေးကတော့ How to create AWS Free Tier Account ဖြစ်ပါတယ်။

AWS ကို အသုံးပြုရန် AWS account တစ်ခု create လုပ်ရပါမည်။

AWS account တစ်ခု create လုပ်ရန် JCB, Visa, Master, တစ်ခုခုရှိရပါမည်။ မိမိ၏ ...]]></description><link>https://kalaung.org/how-to-create-aws-free-tier-account</link><guid isPermaLink="true">https://kalaung.org/how-to-create-aws-free-tier-account</guid><category><![CDATA[aws account]]></category><category><![CDATA[create aws free account]]></category><dc:creator><![CDATA[Akari Kyaw]]></dc:creator><pubDate>Wed, 24 Sep 2025 04:05:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759034207469/28fe2d4e-a508-4d9f-95ca-a4122a7b6f44.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးဘဲ မင်္ဂလာပါ။ ဒီနေ့‌ Sharing လုပ်ပေးချင်တဲ့ခေါင်းစဉ်လေးကတော့ How to create AWS Free Tier Account ဖြစ်ပါတယ်။</p>
<ul>
<li><p>AWS ကို အသုံးပြုရန် AWS account တစ်ခု create လုပ်ရပါမည်။</p>
</li>
<li><p>AWS account တစ်ခု create လုပ်ရန် JCB, Visa, Master, တစ်ခုခုရှိရပါမည်။ မိမိ၏ Bank card ထဲတွင်</p>
<p>  1 US$ နှင့် ညီမျှ‌‌သော ငွေ amount ရှိရပါမည်။</p>
</li>
<li><p>AWS account တစ်ခု create လုပ်ရန် email address တစ်ခုကို အသုံးပြုပြီး sing up လုပ်ရပါမည်။</p>
</li>
<li><p>Email address တစ်ခုကို အသုံးပြုပြီး ရလာသော user သည် root user ဖြစ်ပါသည်။</p>
</li>
<li><p>Root user ကို ဖြစ်နိုင်ရင် မသုံးသင့်ပါဘူး။ ဘယ်လိုအခါမျိုးမှားသုံးသင့်လဲဆိုတာကို အောက်ပါ link မှာ လေ့လာနိုင်ပါတယ်။ (<a target="_blank" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/root-user-tasks.html">https://docs.aws.amazon.com/IAM/latest/UserGuide/root-user-tasks.html</a>)</p>
</li>
</ul>
<p>AWS account create လုပ်ရန် ‌<a target="_blank" href="https://aws.amazon.com/">www. aws.amazon.com</a> ထဲသို့ ဝင်ပါ။ Create account ကို နှိပ်ပါ။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685304251/76cf3ba5-cd0a-4b23-9481-422b562da984.png" alt class="image--center mx-auto" /></p>
<p>Email address နှင့်Account name ထည့် ပါ။ Verify email address ကို နှိပ်ပါ။ မိမိEmail တွင်‌‌ ရောက်လာ‌သော verification code ကို ရိုက်ပါ။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685369133/0ce75e7f-cbcd-4003-8c46-7ba03ca59f17.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685381621/a1b9a571-6273-443f-8d2e-12be6e350da5.png" alt class="image--center mx-auto" /></p>
<p>‌Root user password သတ်မှတ်‌‌ရပါမည်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685415514/071a300f-fdd1-48eb-aad7-36e8825e805b.png" alt class="image--center mx-auto" /></p>
<p>Free plan ကို ရွေးပေးပါ။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685439901/07965082-9d3a-4515-a712-0241f3ac130c.png" alt class="image--center mx-auto" /></p>
<p>Choose your plan Business or Personal plan. And then fill your information.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685491566/4f74ec58-796a-46cd-acd0-7d185e9c909f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685504974/6839b3da-0542-473d-b450-fc387ac19fe6.png" alt class="image--center mx-auto" /></p>
<p>Fill your bank card information.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685520112/968fa5be-35ca-43c1-992a-366438ee0364.png" alt class="image--center mx-auto" /></p>
<p>Confirm your identity.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685533245/17e7dc17-64ca-426b-9a8f-070426847523.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685561754/e822f76e-9d9c-4903-91ad-51dac4338a05.png" alt class="image--center mx-auto" /></p>
<p>မိမိ ဖုန်းထဲသို့‌ ရောက်လာသော code ကိုထည့်ပါ။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685584819/b52c9238-a531-4623-9254-bb1125d09066.png" alt class="image--center mx-auto" /></p>
<p>Choose “Basic support - Free”. And then click “Complete Sing up:.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685597511/212b13d5-4990-4c7e-9fc6-b76f7fd98eec.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685754343/31d47461-aea1-477e-8f63-9a9029d9e571.png" alt class="image--center mx-auto" /></p>
<p>Now you got your AWS Account. Go to the AWS Management Console.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685767163/7d4ee84e-b831-431a-b785-ba81fef33b50.png" alt class="image--center mx-auto" /></p>
<p>You will see your Console Home page. ညာဘက် အပေါ်ထောင့်လေးမှာ Account ID နှင့် မိမိသတ်မှတ်ခဲ့သော Account name လေးပါရှိပါတယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758685788323/8fe786aa-358e-4fb0-a62d-b9e7bfe9d921.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>အခု ဆိုရင်တော့ Email address တစ်ခုကို သုံးပြီး လုပ်ထားတဲ့ root user လေးရသွားပါပြီ။</p>
</li>
<li><p>Root user ကို ဖြစ်နိုင်ရင် မသုံးသင့်ပါဘူး။ ဘယ်လိုအခါမျိုးမှားသုံးသင့်လဲဆိုတာကို အောက်ပါ link မှာ လေ့လာနိုင်ပါတယ်။ (<a target="_blank" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks">https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks</a>)</p>
</li>
<li><p>AWS account ကို အသုံးပြုရန် IAM user ကို create လုပ်ထားသင့်ပါသည်။</p>
</li>
<li><p>Root user create လုပ်ပြီးတဲ့ အခါမှာ ဘာတွေ ဆက်လုပ်သင့်လဲ ဆိုတာကို နောက် Blogs တွေမှာ ထပ်ရေးပေးပါ့မယ်။</p>
</li>
</ul>
<p>အားလုံးကို ကျေးဇူးတင်ပါတယ်။</p>
]]></content:encoded></item><item><title><![CDATA[Solutions for KodeKloud's 100 Days of DevOps practice]]></title><description><![CDATA[KodeKloud's 100 Days of DevOps မှာပါဝင်တဲ့ Labs တွေရဲ့ sloution တွေကို နေ့စဉ် တစ်နေ့တစ်ခု တင်ပေးသွားပါမယ်။
လိုအပ်တာတွေရှိရင်လည်း မှတ်ချက်ပေးသွားလို့ရပါတယ်။
Big thanks to KodeKloud for great free DevOps practice and letting me share the solutions!
Pla...]]></description><link>https://kalaung.org/100-days-of-devops</link><guid isPermaLink="true">https://kalaung.org/100-days-of-devops</guid><category><![CDATA[Devops]]></category><dc:creator><![CDATA[Soe Thura]]></dc:creator><pubDate>Thu, 07 Aug 2025 07:53:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1755515982911/c286d88e-56ec-4152-81ea-1afccba81f15.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="hn-embed-widget" id="youtube-100day-devops"></div><p> </p>
<p>KodeKloud's 100 Days of DevOps မှာပါဝင်တဲ့ Labs တွေရဲ့ sloution တွေကို နေ့စဉ် တစ်နေ့တစ်ခု တင်ပေးသွားပါမယ်။</p>
<p>လိုအပ်တာတွေရှိရင်လည်း မှတ်ချက်ပေးသွားလို့ရပါတယ်။</p>
<p><em>Big thanks to KodeKloud for great free DevOps practice and letting me share the solutions!</em></p>
<p><em>Playlist URL:</em> <a target="_blank" href="https://www.youtube.com/playlist?list=PLxTojPvLKeYdxwCGa63wT6gGY7L6bpHrx">https://www.youtube.com/playlist?list=PLxTojPvLKeYdxwCGa63wT6gGY7L6bpHrx</a></p>
<p>KodeKloud Lab URL: <a target="_blank" href="https://kodekloud.com/100-days-of-devops">https://kodekloud.com/100-days-of-devops</a></p>
]]></content:encoded></item><item><title><![CDATA[Containers from Scratch: A Deep Dive into Single-Host Container Networking]]></title><description><![CDATA[This article was orginally published on zawzaw.blog.
ဒီဆောင်းပါးမှာ Container တွေ အောက်ခြေမှာ ဘယ်လိုအလုပ်လုပ်လဲ၊ Container တွေ တခုနဲ့တခု Network Layer မှာ ဘယ်လိုဆက်သွယ်လဲဆိုတာ အခြေခံသဘောတရားတွေကို လက်တွေ့ကျကျ လေ့လာရမှာ ဖြစ်ပါတယ်။ လက်တွေ့စမ်းကြည့်လို့...]]></description><link>https://kalaung.org/deep-dive-single-host-container-networking</link><guid isPermaLink="true">https://kalaung.org/deep-dive-single-host-container-networking</guid><category><![CDATA[containerization]]></category><category><![CDATA[networking]]></category><dc:creator><![CDATA[Zaw Zaw]]></dc:creator><pubDate>Sun, 03 Aug 2025 02:04:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/qb823-ovmHs/upload/2fffce9f13534a560203146118f1226c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><em>This article was orginally published on</em></strong> <a target="_blank" href="https://www.zawzaw.blog/deep-dive-into-container-networking/"><strong><em>zawzaw.blog</em></strong></a><strong><em>.</em></strong></p>
<p>ဒီဆောင်းပါးမှာ Container တွေ အောက်ခြေမှာ ဘယ်လိုအလုပ်လုပ်လဲ၊ Container တွေ တခုနဲ့တခု Network Layer မှာ ဘယ်လိုဆက်သွယ်လဲဆိုတာ အခြေခံသဘောတရားတွေကို လက်တွေ့ကျကျ လေ့လာရမှာ ဖြစ်ပါတယ်။ လက်တွေ့စမ်းကြည့်လို့လည်း ရနိုင်ပါတယ်။ Linux မှာ အလွယ်တကူရတဲ့ Command-line Tools နဲ့ စမ်းသပ်ထားပါတယ်။ ဒီဆောင်းပါကို ဖက်ပြီး စမ်းကြည့်ပြီးရင်တော့ Docker ရဲ့ Bridge Networking ကို ကောင်းကောင်းနားလည်သွားပါလိမ့်မယ်။</p>
<h1 id="heading-summary-key-points">Summary: Key Points</h1>
<ul>
<li><p>ခေတ်သစ် Containerization နည်းပညာရဲ့ အခြေခံအုတ်မြစ်ဖြစ်သော Linux Namespaces အကြောင်း။</p>
</li>
<li><p>Linux Namespaces ဘယ်လိုအလုပ်လုပ်ပြီး Container တွေ Host Machine ကနေ ဘယ်လို သီးခြားခွဲထုတ်ပြီး တည်ဆောက်လို့ရသလဲ။</p>
</li>
<li><p>Virtual Ethernet (VETH) နှင့် Bridge Networking ဘယ်လို အလုပ်လုပ်သလဲ။</p>
</li>
<li><p>Containers နှင့် Container Networking ရဲ့ အခြေခံအဆင့် (low level) တွင် မည်သို့အလုပ်လုပ်သလဲဆိုတာ ဒီဆောင်းပါးမှာ အဓိကလေ့လာရမှာ ဖြစ်ပါတယ်။</p>
</li>
</ul>
<h1 id="heading-prerequisities">Prerequisities</h1>
<ul>
<li><p>Linux Host (e.g., Ubuntu, Fedora, etc..)</p>
</li>
<li><p>Linux Namespaces</p>
</li>
<li><p>Command-Line Tools <code>chroot</code>, <code>unshare</code>, <code>ip</code></p>
</li>
</ul>
<hr />
<h1 id="heading-setup-project-structure">Setup Project Structure</h1>
<p>ပထမဦးဆုံးအနေနဲ့ Container တွေ ဘယ်လိုအလုပ်လုပ်လဲ ဆိုတာကို နားလည်နိုင်ဖို့အတွက် <code>chroot</code> နှင့် <code>unshare</code> CLI tools များကို အသုံးပြုပြီး Container များကို အစကနေ တည်ဆောက်ပြီး run ကြည့်ပါမယ်။</p>
<p>Project Structure သည် အောက်ပါအတိုင်း ဖြစ်ပါလိမ့်မယ်။</p>
<pre><code class="lang-bash">/home/zawzaw/containers
        ├── alpine-linux
        │   ├── bin
        │   ├── dev
        │   ├── etc
        │   ├── home
        │   ├── lib
        │   ├── media
        │   ├── mnt
        │   ├── opt
        │   ├── proc
        │   ├── root
        │   ├── run
        │   ├── sbin
        │   ├── srv
        │   ├── sys
        │   ├── tmp
        │   ├── usr
        │   └── var
        └── tiny-linux
            ├── bin
            ├── dev
            ├── proc
            ├── sbin
            ├── sys
            └── usr
</code></pre>
<p>Containers လို့ အမည်ပေးထားတဲ့ Project directory တစ်ခုဆောက်လိုက်ပါမယ်။ အဲဒီနောက် Alpine Linux Root Filesystem image ကို အဲဒီ directory ထဲကို ထည့်လိုက်မှာ ဖြစ်ပါတယ်။</p>
<pre><code class="lang-bash">$ mkdir -p containers/alpine-linux
</code></pre>
<p>ဒီဆောင်းပါးမှာ Alpine Linux Mini root filesystem ကို အသုံးပြုမှာ ဖြစ်ပါတယ်။ Alpine Linux ရဲ့ Official website ဖြစ်တဲ့ <a target="_blank" href="https://alpinelinux.org/downloads">https://alpinelinux.org/downloads</a> သို့သွားရောက်ပြီး Alpine Linux Mini root filesystem ကို download လုပ်လိုက်ပါ။ Alpine Linux က Container များနှင့် Minimal chroots များမှာ အသုံးပြုဖို့အတွက် Alpine Mini root filesystem ကို ထောက်ပံ့ပေးထးပါတယ်။ <code>aarch64</code>, <code>armv7</code>, <code>riscv64</code>, <code>x86</code>, <code>x86_64</code> စသည်ဖြင့် မတူညီသော System architectures များကို ထောက်ပံ့ပေးပါတယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753780037530/a8f8285d-d73d-4358-9cf3-a7672168d63d.png" alt class="image--center mx-auto" /></p>
<p>(သို့မဟုတ်)</p>
<p><code>curl</code> command line tool ဖြင့် download လုပ်နိုင်ပါတယ်။ ဥပမာ - x86_64 architecture အတွက်။</p>
<pre><code class="lang-bash">$ curl -LO https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/x86_64/alpine-minirootfs-3.21.3-x86_64.tar.gz
</code></pre>
<p>Download လုပ်ထားသော Alpine Linux Mini rootfs file ကို <code>containers/alpine-linux</code> directory အောက်သို့ထည့်ပြီးနောက် mini rootfs tar file ကို ဖြည်ပါ။</p>
<pre><code class="lang-bash">$ cp alpine-minirootfs-3.21.3-x86_64.tar.gz ~/containers/alpine-linux
$ <span class="hljs-built_in">cd</span> ~/containers/alpine-linux
$ tar -xzvf alpine-minirootfs-3.21.3-x86_64.tar.gz
</code></pre>
<p>ဖြည်ပြီးရင်တော့ <code>alpine-minirootfs-3.21.3-x86_64.tar.gz</code> tar file ကို ဖျတ်လိုက်လို့ ရပါပြီ။</p>
<pre><code class="lang-bash">$ rm alpine-minirootfs-3.20.2-x86_64.tar.gz
</code></pre>
<p>Project တည်ဆောက်ပုံက အောက်ပါပုံစံအတိုင်း ဖြစ်ပါလိမ့်မယ်။</p>
<pre><code class="lang-bash">/home/zawzaw/containers
        ├── alpine-linux
        │   ├── bin
        │   ├── dev
        │   ├── etc
        │   ├── home
        │   ├── lib
        │   ├── media
        │   ├── mnt
        │   ├── opt
        │   ├── proc
        │   ├── root
        │   ├── run
        │   ├── sbin
        │   ├── srv
        │   ├── sys
        │   ├── tmp
        │   ├── usr
        │   └── var
</code></pre>
<hr />
<h1 id="heading-running-containers-from-scratch">Running Containers from Scratch</h1>
<h2 id="heading-introduction-to-chroot">Introduction to Chroot</h2>
<pre><code class="lang-bash">/ (Host Root Filesystem)
├── bin
├── dev
├── etc
├── home
│   └── zawzaw/
│        └── containers/
│            ├── alpine-linux/
│            │    ├── bin
│            │    ├── dev
│            │    ├── etc
│            │    ├── home
│            │    ├── lib
│            │    ├── proc
│            │    ├── sbin
│            │    └── var
│            └── tiny-linux/
│                 ├── bin
│                 ├── dev
│                 ├── init.sh
│                 ├── linuxrc -&gt; bin/busybox
│                 ├── proc
│                 ├── sbin
│                 ├── sys
│                 ├── sbin
│                 └── usr
├── proc
├── sbin
├── sys
├── usr
└── var
</code></pre>
<p>Change Root (<code>chroot</code>) က Unix နဲ့ Linux မှာ အလွယ်တကူ အသုံးပြုနိုင်တယ်။ Container တခုကို Host OS ကနေ ဘယ်လိုခွဲထုတ်ပြီး တည်ဆောက်တာမလဲဆိုတာ မလေ့လာခင် chroot ကို အရင်လေ့လာကြည့်ပါမယ်။</p>
<p>chroot က Container တွေရဲ့ အခြေခံသဘောတရားတခုလို့လည်း ဆိုနိုင်တယ်။ သမိုင်းကြောင်းအရ မူရင်း chroot system call က ၁၉၇၉ ခုနှစ်မှာ ထွက်ရှိခဲ့တဲ့ Unix Seventh Edition (Version 7) မှာ စတင်မိတ်ဆက်ခဲ့တာ ဖြစ်ပါတယ်။ Linux system တခုမှာ အဓိက Root filesystem တခုရှိပြီး၊ လက်ရှိအလုပ်လုပ်နေတဲ့ process နဲ့ သူ့ရဲ့ child process တွေအတွက် Root directory ကို ပြောင်းလဲပေးတဲ့ လုပ်ဆောင်ချက်တစ်မျိုး ဖြစ်ပါတယ်။ အဲဒီသီးခြား Root filesystem ထဲမှာ ကိုယ်စမ်းသပ်ချင်တာတွေ လုပ်ဆောင်လို့ရနိုင်တယ်။</p>
<p>ဒါပေမယ့် chroot client tool က Linux kernel ကနေ ထောက်ပံ့တဲ့ <a target="_blank" href="https://man7.org/linux/man-pages/man2/chroot.2.html?ref=zawzaw.blog">chroot(2)</a> system call ကို ခေါ်ယူပြီး အသုံးပြုတာ ဖြစ်ပါတယ်။ ဒါကြောင့် chroot က နောက်ဘက်က Linux kernel ရဲ့ ထောက်ပံ့မှုပေါ်မှာ မူတည်ပါတယ်။</p>
<p>chroot ကို ဘယ်နေရာတွေမှာ သုံးနိုင်မလဲ ဆိုရင်</p>
<ul>
<li><p><strong>Sandboxing:</strong> Program တစ်ခုကို သတ်မှတ်ထားတဲ့ environment မှာပဲ အလုပ်လုပ်စေပြီး System တစ်ခုလုံးကို ထိခိုက်မှုမရှိအောင် ကာကွယ်ပေးပါတယ်။</p>
</li>
<li><p><strong>Recovery and Testing:</strong> System တစ်ခု ပျက်သွားတဲ့အခါ ပြန်လည်ပြင်ဆင်ဖို့ ဒါမှမဟုတ် Software အသစ်တွေ စမ်းသပ်ဖို့အတွက် လိုအပ်တဲ့ environment တစ်ခုကို ဖန်တီးပေးပါတယ်။</p>
</li>
</ul>
<h2 id="heading-using-the-chroot-user-space-tool">Using the chroot User-space Tool</h2>
<p><code>chroot</code> client tool ကို စပြီး စမ်းသုံးကြည့်ပါမယ်။ အပေါ်မှာပြောခဲ့သလိုပဲ chroot က User-space tool ဖြစ်ပြီး၊ သူက <a target="_blank" href="https://man7.org/linux/man-pages/man2/chroot.2.html?ref=zawzaw.blog">chroot(2)</a> system call ကို ခေါ်ယူပြီး အသုံးပြုတာဖြစ်ပါတယ်။</p>
<p>အပေါ်ဆုံးအဆင့်မှာ ဆောက်ထားတဲ့ <code>${HOME}/containers/alpine-linux</code> အောက်ကို သွားပြီး chroot command ကို စသုံးပါမယ်။</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> <span class="hljs-variable">$HOME</span>/containers/alpine-linux
$ sudo chroot . /bin/sh
</code></pre>
<p>အဒီနောက် Linux commands တွေနဲ့ စပြီးစမ်းသပ်ကြည့်နိုင်ပါတယ်။</p>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ls -l</span>
total 0
drwxr-xr-x    1 1000     1000           858 Jul 22 14:34 bin
drwxr-xr-x    1 1000     1000             0 Jul 22 14:34 dev
drwxr-xr-x    1 1000     1000           540 Jul 22 14:34 etc
drwxr-xr-x    1 1000     1000             0 Jul 22 14:34 home
drwxr-xr-x    1 1000     1000           272 Jul 22 14:34 lib
drwxr-xr-x    1 1000     1000            28 Jul 22 14:34 media
drwxr-xr-x    1 1000     1000             0 Jul 22 14:34 mnt
drwxr-xr-x    1 1000     1000             0 Jul 22 14:34 opt
dr-xr-xr-x    1 1000     1000             0 Jul 22 14:34 proc
drwx------    1 1000     1000            24 Jul 30 04:26 root
drwxr-xr-x    1 1000     1000             0 Jul 22 14:34 run
drwxr-xr-x    1 1000     1000           790 Jul 22 14:34 sbin
drwxr-xr-x    1 1000     1000             0 Jul 22 14:34 srv
drwxr-xr-x    1 1000     1000             0 Jul 22 14:34 sys
drwxr-xr-x    1 1000     1000             0 Jul 22 14:34 tmp
drwxr-xr-x    1 1000     1000            40 Jul 22 14:34 usr
drwxr-xr-x    1 1000     1000            86 Jul 22 14:34 var
</code></pre>
<pre><code class="lang-bash">/ <span class="hljs-comment"># cat /etc/os-release</span>
NAME=<span class="hljs-string">"Alpine Linux"</span>
ID=alpine
VERSION_ID=3.21.3
PRETTY_NAME=<span class="hljs-string">"Alpine Linux v3.21"</span>
HOME_URL=<span class="hljs-string">"https://alpinelinux.org/"</span>
BUG_REPORT_URL=<span class="hljs-string">"https://gitlab.alpinelinux.org/alpine/aports/-/issues"</span>
</code></pre>
<h2 id="heading-the-proc-virutal-filesystem">The /proc Virutal Filesystem</h2>
<p>ပြီးတဲ့နောက် <code>proc</code> Virtual filesystem ကို ကိုယ့်ရဲ့ chroot environment ထဲမှာ Mount လုပ်ဖို့ လိုအပ်ပါလိမ့်မယ်။ ဒီ command က chroot environment မှာ <code>proc</code> Virtual filesystem ကို /proc directory ထဲကို Mount လုပ်လိုက်တာ ဖြစ်ပါတယ်။</p>
<pre><code class="lang-bash">$ mount -t proc proc /proc
</code></pre>
<p><em>ဒီနေရာမှာ</em> <code>proc</code> <em>Virtual filesystem ဆိုတာ ဘယ်လိုမျိူးလဲ။ ဘာကြောင့် Mount လုပ်ဖို့ လိုအပ်တာလဲလို့ မေးစရာရှိပါတယ်။</em></p>
<p>Linux မှာ <code>proc</code> က Virtual Filesystem (VFS) တနည်းအားဖြင့် Special filesystem တခုဖြစ်ပါတယ်။ <code>proc</code> က Linux kernel ရဲ့ နောက်ဘက်ကနေ ထောက်ပံ့ပေးထားတဲ့ VFS တခုဖြစ်ပြီး Hardware(System) နဲ့ Process အချက်လက်တွေကို <strong>In-Memory</strong> သိမ်းတာ ဖြစ်ပါတယ်။ ဒီနေရာမှာ ရှင်းရှင်းလင်းလင်းသိရမှာက <code>/proc</code> အောက်က files တော့ Linux kernel ကနေ Boot တတ်လာချိန်မှာ Dynamically တည်ဆောက်ပေးတာ ဖြစ်ပြီး၊ <strong>Disk ပေါ်မှာ တကယ်သိမ်းတာ မဟုတ်ဘဲ In-Memory ပဲ သိမ်းထားဖြစ်ပါတယ်။</strong></p>
<p>ဥပမာ</p>
<ul>
<li><p><code>cat /proc/version</code> က လက်ရှိ Linux kernel version ကို စစ်ကြည့်ဖို့သုံးနိုင်တယ်။</p>
</li>
<li><p><code>cat /proc/cpuinfo</code> က လက်ရှိ Linux system ရဲ့ CPU နဲ့ ပတ်သက်တဲ့ အသေးစိတ်အချက်လက်ကို အသေးစိတ် ကြည့်နိုင်တယ်။</p>
</li>
</ul>
<p>ဒါကြောင့် chroot environment ထဲမှာ process နဲ့ ပတ်သက်တဲ့ အသေးစိတ်အချက်လက်ကို သိနိုင်ဖို့၊ သုံးနိုင်ဖို့ <code>proc</code> Virtual Filesystem ကို မဖြစ်နေ Mount လုပ်ဖို့လိုအပ်တာ ဖြစ်ပါတယ်။ အဲဒီလို Mount မလုပ်ရင် chroot environment ထဲမှာ <code>ps</code> လိုမျိုး command က ကောင်းကောင်း အလုပ်မလုပ်နိုင်ပါဘူး။</p>
<p>ဥပမာ</p>
<pre><code class="lang-bash">$ ps aux
<span class="hljs-comment"># Error: Could not read /proc/stat</span>
</code></pre>
<p>ဘာကြောင့်လဲဆိုတော့ <code>ps</code> က client tool ဖြစ်ပြီး တကယ့်လုပ်ဆောင်ချက်က နောက်ဘက်က <code>/proc</code> ကနေ ထောက်ပံ့ပေးတာကြောင့် ဖြစ်ပါတယ်။</p>
<p>အပေါ်က <code>mount -t proc proc /proc</code> ကို ကိုယ့်ရဲ့ chroot environment ထဲမှာ Run ပြီးရင်တော့ အောက်က Linux system နဲ့ process နဲ့ ပတ်သက်တဲ့ commands တွေကို စမ်းကြည့်နိုင်တယ်။</p>
<ul>
<li><p><code>cat /proc/cpuinfo</code></p>
</li>
<li><p><code>ps aux</code></p>
</li>
<li><p><code>ip addr</code></p>
</li>
</ul>
<pre><code class="lang-bash">/ <span class="hljs-comment"># cat /proc/cpuinfo</span>
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 142
model name      : Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz
stepping        : 12
microcode       : 0xfc
cpu MHz         : 2900.231
cache size      : 8192 KB
...
</code></pre>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ps aux</span>
PID   USER     TIME  COMMAND
    1 root      0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize=51 rhgb
    2 root      0:00 [kthreadd]
    3 root      0:00 [pool_workqueue_]
    4 root      0:00 [kworker/R-rcu_g]
    5 root      0:00 [kworker/R-sync_]
    6 root      0:00 [kworker/R-slub_]
    7 root      0:00 [kworker/R-netns]
    9 root      0:00 [kworker/0:0H-ev]
   12 root      0:00 [kworker/R-mm_pe]
   14 root      0:00 [rcu_tasks_kthre]
   15 root      0:00 [rcu_tasks_rude_]
   16 root      0:00 [rcu_tasks_trace]
   17 root      0:16 [ksoftirqd/0]
   18 root      0:10 [rcu_preempt]
   19 root      0:00 [rcu_exp_par_gp_]
   20 root      0:00 [rcu_exp_gp_kthr]
...
</code></pre>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ip addr show</span>
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: wlo1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether fa:8b:5b:09:59:51 brd ff:ff:ff:ff:ff:ff
    inet 192.168.55.129/24 brd 192.168.55.255 scope global dynamic noprefixroute wlo1
       valid_lft 75600sec preferred_lft 75600sec
    inet6 fe80::fa24:a316:4e60:c881/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
...
</code></pre>
<p>ဒီနေရာမှာ သတိထားမိပါလိမ့်မယ်။ chroot environment ထဲမှာ Host OS ရဲ့ Process / Network နဲ့ ပတ်သက်တာတွေအားလုံးကို မြင်နေရတာကို တွေ့ရပါလိမ့်မယ်။ နောက်အပိုင်းမှာ ဘယ်လို Isolate လုပ်လို့ရမလဲဆိုတာ အသေးစိတ်လေ့လာကြည့်ပါမယ်။</p>
<hr />
<h1 id="heading-isolating-from-the-host-machine">Isolating from the Host Machine</h1>
<h2 id="heading-linux-namespaces">Linux Namespaces</h2>
<p>Linux Namespaces က Linux kernel ရဲ့ feature တခုဖြစ်ပြီး ခေတ်သစ် Containerization နည်းပညာရဲ့ အခြေခံအုတ်မြစ်တခုလည်း ဖြစ်ပါတယ်။</p>
<p>အဓိက သဘောတရားကတော့ Process အစု၀ေးတခုအတွက် မတူညီတဲ့ System resources တွေကို Host Machine ကနေ သီးခြားခွဲထုတ်ပြီး Virtualize လုပ်တောကို လုပ်ဆောင်ပေးတယ်။ Namespaces ကို ၂၀၀၂ ခုနှစ် Linux kernel version 2.4.19 တည်းက စတင်သုံးခဲ့ပါတယ်။</p>
<p>System resources ဆိုတဲ့နေရာမှာ အောက်ပါအရာတွေပါ၀င်ပါတယ်</p>
<ul>
<li><p>PID (Process ID)</p>
</li>
<li><p>Mount</p>
</li>
<li><p>UTS (UNIX Timesharing System)</p>
</li>
<li><p>IPC (Inter-process Communication)</p>
</li>
<li><p>Network</p>
</li>
<li><p>User</p>
</li>
<li><p>Control Groups (CGroups)</p>
</li>
</ul>
<p>Documentation: <a target="_blank" href="https://man7.org/linux/man-pages/man7/namespaces.7.html?ref=zawzaw.blog">https://man7.org/linux/man-pages/man7/namespaces.7.html</a></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Namespace</strong></td><td><strong>Manual Page</strong></td><td><strong>Isolates</strong></td></tr>
</thead>
<tbody>
<tr>
<td>PID (Process ID)</td><td><a target="_blank" href="https://man7.org/linux/man-pages/man7/pid_namespaces.7.html?ref=zawzaw.blog">pid_namespaces</a></td><td>Isolates process IDs.</td></tr>
<tr>
<td>Mount</td><td><a target="_blank" href="https://man7.org/linux/man-pages/man7/mount_namespaces.7.html?ref=zawzaw.blog">mount_namespaces</a></td><td>Isolates the set of mounted filesystems.</td></tr>
<tr>
<td>UTS (UNIX Timesharing System)</td><td><a target="_blank" href="https://man7.org/linux/man-pages/man7/uts_namespaces.7.html?ref=zawzaw.blog">uts_namespaces</a></td><td>Isolates hostname and DNS name.</td></tr>
<tr>
<td>IPC (Inter-process Communication)</td><td><a target="_blank" href="https://man7.org/linux/man-pages/man7/ipc_namespaces.7.html?ref=zawzaw.blog">ipc_namespaces</a></td><td>Isolates IPC resources, such as message queue and shared memory.</td></tr>
<tr>
<td>Network</td><td><a target="_blank" href="https://man7.org/linux/man-pages/man7/network_namespaces.7.html?ref=zawzaw.blog">network_namespaces</a></td><td>Isolates network interfaces, IP addresses, routing tables, and port numbers.</td></tr>
<tr>
<td>User</td><td><a target="_blank" href="https://man7.org/linux/man-pages/man7/user_namespaces.7.html?ref=zawzaw.blog">user_namespaces</a></td><td>Isolates user and group IDs.</td></tr>
<tr>
<td>CGroup</td><td><a target="_blank" href="https://man7.org/linux/man-pages/man7/cgroup_namespaces.7.html?ref=zawzaw.blog">cgroup_namespaces</a></td><td>Isolates the view of Control Groups (CGroups).</td></tr>
</tbody>
</table>
</div><p>ဥပမာ - Linux Host Machine တခုပေါ်မှာ Container တခု လည်ပတ်နေတယ် ဆိုပါစို့။</p>
<ul>
<li><p>Container မှာ သီးခြားကိုယ်ပိုင် Root Filesystem ရှိနိုင်တယ်။ အကြောင်းက သူက Host Machine ကနေ <strong>Mount</strong> Namespaces ကို ခွဲထုတ်လိုက်လို့ ဖြစ်ပါတယ်။</p>
</li>
<li><p>Container မှာ သီးခြားကိုယ်ပိုင် Hostname ရှိနိုင်တယ်။ အကြောင်းက သူက Host Machine ကနေ <strong>UTS</strong> Namespaces ကို ခွဲထုတ်လိုက်လို့ ဖြစ်ပါတယ်။</p>
</li>
<li><p>Container မှာ သီးခြားကိုယ်ပိုင် PIDs များ ရှိနိုင်ပါတယ်။ အကြောင်းကတော့ သူမှာ Host Machine ကနေ <strong>PID (Process ID)</strong> Namespaces ကို ခွဲထုတ်လိုက်လို့ ဖြစ်ပါတယ်။</p>
</li>
</ul>
<h2 id="heading-using-the-unshare-user-space-tool">Using the unshare User-space Tool</h2>
<p>Linux Namespaces က Linux kernel ကနေ နောက်ဘက်ကနေ ထောက်ပံ့ပေးသူဖြစ်ပြီး သူနဲ့ ဆက်သွယ်ဆောင်ရွတ်ဖို့က <code>unshare</code> client tool ကို သုံးနိုင်ပါတယ်။</p>
<p><code>unshare</code> က Client tool ဖြစ်ပြီး Linux Namespaces က Backend service လို့ မြင်လို့ရပါတယ်။ <code>ushare</code> CLI tool က <a target="_blank" href="https://man7.org/linux/man-pages/man2/unshare.2.html?ref=zawzaw.blog">unshare(2</a>) system call ကို ခေါ်ပြီး Namespace အသစ်တခု ဆောက်တာ သို့မဟုတ် ရှိထားပြီးသား Namespace တခုကိုရွေ့တာ စသဖြင့် လုပ်ဆောင်နိုင်ပါတယ်။</p>
<p>အပေါ်က Linux Namespaces အပိုင်းမှာ ပြောခဲ့သလိုပဲ <code>unshare</code> CLI tool အောက်ပါ Namespaces တွေကို တည်ဆောက်နိုင်ပါတယ်။</p>
<ul>
<li><p><code>--mount</code>: Create a new mount namespace.</p>
</li>
<li><p><code>--uts</code>: Create a new UTS namespace (isolates hostname and domain name).</p>
</li>
<li><p><code>--ipc</code>: Create a new IPC namespace.</p>
</li>
<li><p><code>--net</code>: Create a new network namespace.</p>
</li>
<li><p><code>--pid</code>: Create a new PID namespace.</p>
</li>
<li><p><code>--user</code>: Create a new user namespace.</p>
</li>
<li><p><code>--cgroup</code>: Create a new cgroup namespace.</p>
</li>
<li><p><code>--fork</code>: Fork a new process to run the command (required for PID namespaces).</p>
</li>
</ul>
<p>စပြီး သုံးကြည့်ပါမယ်။ အပေါ်ဦးဆုံးအပိုင်းမှာ ဆောက်ခဲ့တဲ့ <code>containers/alpine-linux</code> အောက်ကို သွားပြီး <code>unshare</code> ကို Run ပါမယ်။ ဒီ command က PID / Mount / Network Namespaces တွေကို unshare ကို သုံးပြီး Host Machine ကနေ သီးခြားခွဲထုတ်လိုက်တာ ဖြစ်ပါတယ်။</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> containers/alpine-linux
$ sudo unshare --pid --mount --net -f chroot alpine-linux /bin/sh
</code></pre>
<pre><code class="lang-bash">/ <span class="hljs-comment"># cat /etc/os-release</span>
NAME=<span class="hljs-string">"Alpine Linux"</span>
ID=alpine
VERSION_ID=3.21.3
PRETTY_NAME=<span class="hljs-string">"Alpine Linux v3.21"</span>
HOME_URL=<span class="hljs-string">"https://alpinelinux.org/"</span>
BUG_REPORT_URL=<span class="hljs-string">"https://gitlab.alpinelinux.org/alpine/aports/-/issues"</span>
</code></pre>
<p>Change Root (chroot) အပိုင်းမှာ ပြောခဲ့သလိုပဲ System နဲ့ Process အချက်လက်ကို ရယူနိုင်ဖို့ <code>/proc</code> ကို Mount လုပ်ပေးဖို့ လိုအပ်ပါတယ်။</p>
<pre><code class="lang-bash">$ mount -t proc proc /proc
</code></pre>
<p>ပြီးတဲနောက်တော့ Chroot Container ထဲမှာ လက်ရှိလည်ပတ်နေတဲ့ Process ID (PID) နဲ့ Network interfaces တွေကို စစ်ကြည့်ပါမယ်။</p>
<pre><code class="lang-sh">/ <span class="hljs-comment"># ps aux</span>
PID   USER     TIME  COMMAND
    1 root      0:00 /bin/sh
    5 root      0:00 ps aux
</code></pre>
<pre><code class="lang-sh">/ <span class="hljs-comment"># ip addr show</span>
1: lo: &lt;LOOPBACK&gt; mtu 65536 qdisc noop state DOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
</code></pre>
<p><strong><em>ဒီနေရာမှာ သတိထားမိပါလိမ့်မယ်။ PID နဲ့ Network interfaces တွေက Host Machine ကနေ ခွဲထုတ်လိုက်ပြီး သီးခြားစီဖြစ်နေတာကို တွေ့ရပါလိမ့်မယ်။ နောက်အပိုင်းမှာ Network Layer မှာ Container တွေ ဘယ်လိုအလုပ်လုပ်သလဲဆိုတာ ဆက်လက်လေ့လာရမှာ ဖြစ်ပါတယ်။</em></strong></p>
<hr />
<h1 id="heading-configuring-container-networks-from-scratch">Configuring Container Networks from Scratch</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754037520029/afc26b33-47cd-4e15-9634-a2be612cc821.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p><strong>Alpine Linux Container IP address:</strong> <code>172.19.35.3</code></p>
</li>
<li><p><strong>Tiny Linux Container IP address:</strong> <code>172.19.35.2</code></p>
</li>
</ul>
<p>ဒီအပိုင်းမှာ Container နှစ်လုံးအတွက် အစကနေ VETH (Virtual Ethernet) နဲ့ Bridge Network တခု တည်ဆောက်ပြီး ဘယ်လိုအလုပ်လုပ်သလဲ လေ့လာရမှာ ဖြစ်ပါတယ်။ <strong>Virtual Ethernet (VETH)</strong> နဲ့ <strong>Bridge Networking က</strong> Linux Virtual Networking ရဲ့ အဓိကအစိတ်ပိုင်းတွေ ဖြစ်ပြီး Container နဲ့ Host Machine သို့မဟုတ် Container ကနေ Container ဆက်သွယ်ဖို့ အသုံးပြုပါတယ်။ Container Networking နည်းပညာဘက်မှာ အလွန်အသုံးများပါတယ်။</p>
<h2 id="heading-virtual-ethernet-veth">Virtual Ethernet (VETH)</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754177645148/fed54ad9-0a89-46a9-ac8d-98aaaa1176b7.png" alt="Photo: Virtual Ethernet (VETH) by Red Hat Developers" class="image--center mx-auto" /></p>
<p><strong>Virtual Ethernet (VETH)</strong> ဆိုတာ ပိုက် (pipe) တစ်ခုလိုမျိုး လုပ်ဆောင်တဲ့ Virtual network interfaces နှစ်ခုတွဲ ဖြစ်ပါတယ်။ အဲဒီ Interface နှစ်ခုထဲက တစ်ခုကနေ ပို့လိုက်တဲ့ အချက်အလက် (packets) တွေဟာ ကျန်တစ်ခုကနေ လက်ခံရရှိမှာ ဖြစ်ပါတယ်။ VETH ကို ပုံမှန်အားဖြင့် <strong>Network namespaces</strong> များကို Host machine သို့မဟုတ် အခြား Network namespaces များနှင့် ချိတ်ဆက်ရန် အသုံးပြုပါတယ်။</p>
<p>VETH တွဲတစ်ခုမှာ Interfaces နှစ်ခု ပါဝင်ပါတယ်။</p>
<ul>
<li><p>တစ်ခုက <strong>Host machine</strong> ရဲ့ Network namespace ထဲမှာ ရှိပြီး</p>
</li>
<li><p>ကျန်တစ်ခုက <strong>Container</strong> ရဲ့ Network namespace ထဲမှာ ရှိပါတယ်။</p>
</li>
</ul>
<p>Interface တစ်ခုကနေ ပို့လိုက်တဲ့ packets တွေကို အခြား Interface ကနေ လက်ခံရရှိပါတယ်။ ဒါကြောင့် Container နဲ့ Host ဒါမှမဟုတ် အခြား Container တွေကြားမှာ အချင်းချင်း ချိတ်ဆက်ပြောဆိုနိုင်တာ ဖြစ်ပါတယ်။</p>
<h2 id="heading-bridge-networking">Bridge Networking</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754177899770/0ab00a16-f6ab-4e19-81e5-de17b91b1071.png" alt="Photo: Bridge Networking by Red Hat Developers" class="image--center mx-auto" /></p>
<p><strong>Bridge Network</strong> ဆိုတာ Virtual network switch တစ်ခုဖြစ်ပြီး Network interfaces များစွာကို တစ်ခုနဲ့တစ်ခု ချိတ်ဆက်ပေးပါတယ်။ ဒါ့ကြောင့် Container တွေကို အချင်းချင်း ဆက်သွယ်နိုင်အောင် လုပ်ဆောင်ပေးပါတယ်။</p>
<ul>
<li><p>Bridge တစ်ခုဟာ Layer 2 device တစ်ခုလိုမျိုး လုပ်ဆောင်ပြီး ချိတ်ဆက်ထားတဲ့ Interfaces တွေကြားမှာ Ethernet frames တွေကို လက်ဆင့်ကမ်းပို့ဆောင်ပေးပါတယ်။</p>
</li>
<li><p>Containers တွေ ဒါမှမဟုတ် Virtual Machines (VMs) တွေကို <strong>VETH pairs</strong> ကနေတဆင့် bridge နဲ့ ချိတ်ဆက်ပါတယ်။</p>
</li>
</ul>
<h2 id="heading-step-1-setting-up-veth-network-for-container-a-alpine-linux-container">Step (1): Setting up VETH Network for Container (A) — Alpine Linux Container</h2>
<p>ဒီအပိုင်းမှာ Alpine Linux Container ပေါ်တွင် VETH ကွန်ရက်ကို ဘယ်လိုတည်ဆောက်မလဲဆိုတာ ဖော်ပြသွားပါမယ်။</p>
<p>အပေါ်မှာ စမ်းခဲ့တဲ့နည်းလမ်းအတိုင်းပါပဲ <strong><em>unshare</em></strong> နှင့် <strong><em>chroot</em></strong> Command-line tool များကို အသုံးပြုပြီး သီးခြားခွဲထားသော PID (Process ID)၊ Mount နှင့် Network namespaces များပါရှိတဲ့ Alpine Linux Container တခုကို တည်ဆောက်မှာ ဖြစ်ပါတယ်။</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> <span class="hljs-variable">${HOME}</span>/containers/alpine-linux
$ sudo unshare --pid --mount --net \
  -f chroot . \
  env -i \
    HOME=/root \
    HOSTNAME=alpine-linux \
  /bin/sh
$ mount -t proc proc /proc
</code></pre>
<p>ထို့နောက် ကိုယ့်ရဲ့ <strong>Host Linux machine</strong> မှာ Container PID ကို ရယူပါ။ ဒီမှာတော့ ကျွန်တော့်ရဲ့ Alpine Linux Container PID သည် <strong>25473</strong> ဖြစ်ပါတယ်။</p>
<p><strong><em>ဒီနေရာမှာ PID က စမ်းတဲ့သူပေါ်မှာ မူတည်ပြီး အပြောင်းလဲ ရှိနိုင်ပါတယ်။</em></strong></p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ ps -C sh
    PID TTY          TIME CMD
  25473 pts/6    00:00:00 sh
</code></pre>
<p>ပြီးရင်တော့ <code>export</code> command ဖြင့် <code>ALPINE_CONTAINER_PID</code> environment variable ကို သတ်မှတ်လိုက်ပါ။ VETH Network ကို တည်ဆောက်တဲ့အခါ ဒီ PID ကို လိုအပ်ပါတယ်။</p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ <span class="hljs-built_in">export</span> ALPINE_CONTAINER_PID=25473
</code></pre>
<p><strong>Host Linux machine</strong> မှာ <code>ip</code> command-line tool ဖြင့် <code>veth0</code>, <code>veth1</code> ဟုခေါ်သော VETH network pair တစ်ခုကို တည်ဆောက်လိုက်ပါမယ်။</p>
<p><strong><em>ဒီနေရာမှာ သေချာနားလည်ရမှာက</em></strong> <code>veth0</code> <strong><em>က Host machine မှာ ရှိမှာဖြစ်ပြီး၊</em></strong> <code>veth1</code> <strong><em>က Alpine Linux Container ဘက်မှာ ရှိမှာဖြစ်ပါတယ်။</em></strong></p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ sudo ip link add veth0 <span class="hljs-built_in">type</span> veth peer name veth1
[zawzaw@fedora-linux:~]$ sudo ip link <span class="hljs-built_in">set</span> veth1 netns <span class="hljs-string">"<span class="hljs-variable">${ALPINE_CONTAINER_PID}</span>"</span>
[zawzaw@fedora-linux:~]$ sudo ip link <span class="hljs-built_in">set</span> dev veth0 up
</code></pre>
<p><strong>Alpine Linux Container</strong> ပေါ်တွင် <code>veth1</code> Network interface ရဲ့ IP address ကို <code>172.19.35.3</code> လို့ သတ်မှတ်လိုက်ပါမယ်။</p>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ip addr add dev veth1 172.19.35.3/24</span>
/ <span class="hljs-comment"># ip link set lo up</span>
/ <span class="hljs-comment"># ip link set veth1 up</span>
</code></pre>
<p><strong>Host Linux machine</strong> ပေါ်တွင် Network interfaces များကို စစ်ကြည့်လိုက်ရင် အောက်ကအတိုင်း တွေ့ရပါလိမ့်မယ်။</p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ ip addr show veth0
11: veth0@if10: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether c6:23:c1:27:62:a8 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::c423:c1ff:fe27:62a8/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
</code></pre>
<p><strong>Alpine Linux Container</strong> ပေါ်တွင် Network interfaces နှင့် IP addresses များကို စစ်ကြည့်လိုက်ရင် အောက်ကအတိုင်း တွေ့ရပါလိမ့်မယ်။</p>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ip addr show</span>
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
10: veth1@if11: &lt;BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN&gt; mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 1e:c9:8c:80:fd:9a brd ff:ff:ff:ff:ff:ff
    inet 172.19.35.3/24 scope global veth1
       valid_lft forever preferred_lft forever
    inet6 fe80::1cc9:8cff:fe80:fd9a/64 scope link
       valid_lft forever preferred_lft forever
</code></pre>
<p>အခုအခြေနေမှာ <code>veth0</code>, <code>veth1</code> VETH interfaces များ အလုပ်လုပ်နေပြီး ၎င်းတို့ရဲ့ IP address တွေကို <code>172.19.35.3</code> လို့ သတ်မှတ်ထားတာကို တွေ့ရပါလိမ့်မယ်။</p>
<h2 id="heading-step-2-setting-up-veth-network-for-container-b-tiny-linux-container">Step (2): Setting up VETH Network for Container (B) — Tiny Linux Container</h2>
<p>ဒီအပိုင်းမှာ အပေါ်ကဆင့်တွေအတိုင်းပဲ အတူတူပဲ ဖြစ်ပါတယ်။ နောက်ထပ် Container တလုံး တည်ဆောက်မှာ ဖြစ်ပါတယ်။ Container (B) အတွက် Linux kernel source code နဲ့ Busybox တို့ကို အသုံးပြုပြီး ကိုယ်တိုင် Compile လုပ်ထားတဲ့ <strong>Tiny Linux</strong> root filesystem image ကို အသုံးပြုပါမယ်။ <a target="_blank" href="https://gist.github.com/zawzaww/cfedae575c7f9fc83ea3a02105dc263e?ref=zawzaw.blog">Building a minimal Linux system from Scratch and Booting in QEMU Emulator</a> မှာ အသေးစိတ် လေ့လာနိုင်ပါတယ်။</p>
<p>အောက်ပါ <strong>Tiny Linux</strong> root filesystem image ကို ဒေါင်းလုဒ်ဆွဲပြီး <code>~/containers/</code> project directory ထဲသို့ ထည့်လိုက်ပါ။</p>
<p><strong>Download Link:</strong> <a target="_blank" href="https://drive.google.com/file/d/1suciSI1GHOuUs4j6CXU6VYZmt0ESEVC1/view?ref=zawzaw.blog">Tiny Linux Root Filesystem Image</a></p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~/containers/tiny-linux]$ tree
.
├── bin
├── dev
├── linuxrc -&gt; bin/busybox
├── proc
├── sbin
├── sys
└── usr
</code></pre>
<p>ဒီအပိုင်းမှာတော့ <strong>Tiny Linux Container</strong> ပေါ်မှာ VETH Network ကို တည်ဆောက်ပါမယ်။ ပထမအတိုင်းပဲ <code>unshare</code> နဲ့ <code>chroot</code> Command-line tool တွေကို အသုံးပြုပြီး <strong>Container (B)</strong>—<strong>Tiny Linux</strong> ကို PID (Process ID)၊ Mount နဲ့ Network namespaces တွေ သီးခြားခွဲထုတ်ပြီး တည်ဆောက်လိုက်ပါမယ်။</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> <span class="hljs-variable">${HOME}</span>/containers/tiny-linux
$ sudo unshare --pid --mount --net \
  -f chroot . \
  env -i \
    HOME=/root \
    HOSTNAME=tiny-linux \
  /bin/sh
$ mount -t proc proc /proc
</code></pre>
<p>ပြီးရင် ကိုယ့်ရဲ့ <strong>Host Linux machine</strong> ကနေ Container PID ကို ရယူလိုက်ပါ။ ဒီနေရာမှာတော့ Tiny Linux Container PID က <strong>29999</strong> ဖြစ်ပါတယ်။</p>
<p><strong><em>ဒီနေရာမှာ PID က စမ်းတဲ့သူပေါ်မှာ မူတည်ပြီး အပြောင်းလဲရှိနိုင်ပါတယ်။</em></strong></p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ ps -C sh
    PID TTY          TIME CMD
  25473 pts/6    00:00:00 sh
  29999 pts/9    00:00:00 sh
</code></pre>
<p>ထို့နောက် <code>export</code> command နဲ့ <code>TINY_CONTAINER_PID</code> environment variable ကို သတ်မှတ်လိုက်ပါမယ်။ ဒီ PID ကို VETH pair တည်ဆောက်တဲ့နေရာမှာ ပြန်သုံးမှာ ဖြစ်ပါတယ်။</p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ <span class="hljs-built_in">export</span> TINY_CONTAINER_PID=29999
</code></pre>
<p><strong>Host Linux machine</strong> ပေါ်မှာ <code>ip</code> command-line tool နဲ့ <code>veth2</code>, <code>veth3</code> ဆိုတဲ့ VETH network pair တစ်ခုကို တည်ဆောက်လိုက်ပါမယ်။</p>
<p><strong><em>ဒီနေရာမှာ သေချာနားလည်ရမှာကတော့</em></strong> <code>veth2</code> <strong><em>က Host machine ဘက်မှာ ရှိမှာဖြစ်ပြီး၊</em></strong> <code>veth3</code> <strong><em>က Tiny Linux Container ဘက်မှာ ရှိမှာဖြစ်ပါတယ်။</em></strong></p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ sudo ip link add veth2 <span class="hljs-built_in">type</span> veth peer name veth3
[zawzaw@fedora-linux:~]$ sudo ip link <span class="hljs-built_in">set</span> veth3 netns <span class="hljs-string">"<span class="hljs-variable">${TINY_CONTAINER_PID}</span>"</span>
[zawzaw@fedora-linux:~]$ sudo ip link <span class="hljs-built_in">set</span> dev veth2 up
</code></pre>
<p><strong>Tiny Linux Container</strong> ပေါ်တွင် <code>veth3</code> Network interface ရဲ့ IP address ကို <code>172.19.35.2</code> လို့ သတ်မှတ်လိုက်ပါမယ်။</p>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ip addr add dev veth3 172.19.35.2/24</span>
/ <span class="hljs-comment"># ip link set lo up</span>
/ <span class="hljs-comment"># ip link set veth3 up</span>
</code></pre>
<p><strong>Host Linux machine</strong> ပေါ်တွင် Network interfaces များကို စစ်ကြည့်လိုက်ရင် အောက်ကအတိုင်း တွေ့ရပါလိမ့်မယ်။</p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ ip addr show veth2
13: veth2@if12: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 06:97:e6:1f:d4:b3 brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet6 fe80::497:e6ff:fe1f:d4b3/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
</code></pre>
<p><strong>Alpine Linux Container</strong> ပေါ်တွင် Network interfaces နှင့် IP addresses များကို စစ်ကြည့်လိုက်ရင် အောက်ကအတိုင်း တွေ့ရပါလိမ့်မယ်။</p>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ip addr show</span>
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
12: veth3@if13: &lt;BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN&gt; mtu 1500 qdisc noqueue qlen 1000
    link/ether 72:37:8b:a8:26:7e brd ff:ff:ff:ff:ff:ff
    inet 172.19.35.2/24 scope global veth3
       valid_lft forever preferred_lft forever
    inet6 fe80::7037:8bff:fea8:267e/64 scope link
       valid_lft forever preferred_lft forever
</code></pre>
<p>အခုဆိုရင် <code>veth2</code>, <code>veth3</code> ဆိုတဲ့ VETH network interfaces တွေ အလုပ်လုပ်နေပြီး IP Address ကို <code>172.19.35.2</code> လို့ သတ်မှတ်ထားတာကို တွေ့ရပါလိမ့်မယ်။</p>
<p>ဒါပေမယ့် အခုချိန်မှာ Container A နဲ့ B က အချင်းချင်း ဆက်သွယ်လို့ရသေးမှာ မဟုတ်ပါဘူး။ ဒါကို <code>ping</code> command နဲ့ စမ်းသပ်ကြည့်နိုင်ပါတယ်။</p>
<ul>
<li><p>Container (A)—Alpine Linux IP Address: <code>172.19.35.3</code></p>
</li>
<li><p>Container (B)—Tiny Linux IP address: <code>172.19.35.2</code></p>
</li>
</ul>
<p>ဥပမာအားဖြင့် <strong>Tiny Linux Container</strong> ကနေ <strong>Alpine Linux (172.19.35.3)</strong> ကို ping လုပ်ကြည့်ပါ။ အလုပ်လုပ်မှာမဟုတ်ပါဘူး။ ဘာကြောင့်လဲဆိုတော့ ကျွန်တော်တို့ Bridge network ကို ထပ်ပြီးတည်ဆောက်ဖို့ လိုအပ်နေလို့ပါပဲ။</p>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ping -c 5 172.19.35.3</span>
PING 172.19.35.3 (172.19.35.3): 56 data bytes

--- 172.19.35.3 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss
</code></pre>
<p>နောက်တစ်ပိုင်းမှာတော့ Container နှစ်ခုကြားမှာ Network packets တွေကို ပို့ဆောင်ဖို့အတွက် Bridge network တစ်ခုကို ဘယ်လိုတည်ဆောက်ရမလဲဆိုတာကို လေ့လာရမှာ ဖြစ်ပါတယ်။</p>
<h2 id="heading-step-3-setting-up-bridge-network">Step (3): Setting Up Bridge Network</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754184461028/d77dc27a-c9e4-4979-8e00-2b4b3741042d.png" alt class="image--center mx-auto" /></p>
<p>အခုဆိုရင် ကျွန်တော်တို့မှာ <strong>Alpine Linux</strong> နဲ့ <strong>Tiny Linux</strong> ဆိုတဲ့ Container နှစ်ခုရှိနေပြီး၊ သူတို့ဟာ သီးခြားစီဖြစ်နေတဲ့ <strong>PID</strong>, <strong>Mount</strong> နဲ့ <strong>Network</strong> Linux namespaces တွေထဲမှာ အလုပ်လုပ်နေကြပါတယ်။ သူတို့မှာ Virtual Ethernet (VETH) pair ကိုလည်း တူညီတဲ့ Network Linux namespace ထဲမှာ ရှိပါတယ်။</p>
<p>ဒီအပိုင်းမှာတော့ Container နှစ်ခု ကြားက Network packets တွေကို လက်ဆင့်ကမ်းပို့ဆောင်ဖို့အတွက် <strong>Bridge network</strong> တစ်ခုကို ဆက်လက်တည်ဆောက်သွားပါမယ်။</p>
<p><strong>Host Linux machine</strong> ပေါ်တွင် <code>br0</code> လို့ခေါ်တဲ့ Bridge network တစ်ခုကို တည်ဆောက်လိုက်ပြီး၊ <code>br0</code> Bridge network ကို <code>veth0</code> နဲ့ <code>veth2</code> Network interfaces တွေနဲ့ ချိတ်ဆက်လိုက်ပါမယ်။</p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ sudo ip link add br0 <span class="hljs-built_in">type</span> bridge
[zawzaw@fedora-linux:~]$ sudo ip link <span class="hljs-built_in">set</span> veth0 master br0
[zawzaw@fedora-linux:~]$ sudo ip link <span class="hljs-built_in">set</span> veth2 master br0
</code></pre>
<p>ထို့နောက် <code>br0</code> Bridge network interface ရဲ့ IP Address ကို <code>172.19.35.1</code> လို့ သတ်မှတ်လိုက်ပါမယ်။ ပြီးရင်တော့ Up လိုက်ပြီး IP address ကို စစ်ကြည့်လို့ရပါပြီ။</p>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ sudo ip addr add dev br0 172.19.35.1/24
[zawzaw@fedora-linux:~]$ sudo ip link <span class="hljs-built_in">set</span> br0 up
</code></pre>
<pre><code class="lang-bash">[zawzaw@fedora-linux:~]$ ip addr show br0
14: br0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 06:97:e6:1f:d4:b3 brd ff:ff:ff:ff:ff:ff
    inet 172.19.35.1/24 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::497:e6ff:fe1f:d4b3/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
</code></pre>
<h2 id="heading-testing-connectivity">Testing Connectivity</h2>
<p>ပြီးနောက် <code>ping</code> command-line tool ကို အသုံးပြုပြီး Container နှစ်ခုကြားက ကွန်ရက်ချိတ်ဆက်မှု ရှိ၊ မရှိကို စစ်ဆေးနိုင်ပါတယ်။</p>
<p>ဥပမာအားဖြင့် <strong>Tiny Linux Container</strong> ကနေ Alpine Linux Container (<code>172.19.35.3</code>)ကို ping လုပ်ကြည့်ပါမယ်။</p>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ping -c 5 172.19.35.3</span>
PING 172.19.35.3 (172.19.35.3): 56 data bytes
64 bytes from 172.19.35.3: seq=0 ttl=64 time=0.070 ms
64 bytes from 172.19.35.3: seq=1 ttl=64 time=0.041 ms
64 bytes from 172.19.35.3: seq=2 ttl=64 time=0.059 ms
64 bytes from 172.19.35.3: seq=3 ttl=64 time=0.072 ms
64 bytes from 172.19.35.3: seq=4 ttl=64 time=0.050 ms

--- 172.19.35.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
</code></pre>
<p>ဥပမာအားဖြင့် <strong>Alpine Linux Container</strong> ကနေ Tiny Linux Container (<code>172.19.35.2</code><strong>)</strong> ကို ping လုပ်ကြည့်ပါမယ်။</p>
<pre><code class="lang-bash">/ <span class="hljs-comment"># ping -c 5 172.19.35.2</span>
PING 172.19.35.2 (172.19.35.2): 56 data bytes
64 bytes from 172.19.35.2: seq=0 ttl=64 time=0.051 ms
64 bytes from 172.19.35.2: seq=1 ttl=64 time=0.105 ms
64 bytes from 172.19.35.2: seq=2 ttl=64 time=0.042 ms
64 bytes from 172.19.35.2: seq=3 ttl=64 time=0.053 ms
64 bytes from 172.19.35.2: seq=4 ttl=64 time=0.052 ms

--- 172.19.35.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
</code></pre>
<p>ယခုဆိုရင် <strong>Container နှစ်လုံးဟာ</strong> အချင်းချင်း ဆက်သွယ်နိုင်ပြီး ကောင်းမွန်စွာ အလုပ်လုပ်နေကြောင်း အတည်ပြုနိုင်ပါပြီ။</p>
<p>Reference Links</p>
<ul>
<li><p><a target="_blank" href="https://blog.mbrt.dev/posts/container-network?ref=zawzaw.blog">https://blog.mbrt.dev/posts/container-network</a></p>
</li>
<li><p><a target="_blank" href="https://labs.iximiuz.com/tutorials/container-networking-from-scratch?ref=zawzaw.blog">https://labs.iximiuz.com/tutorials/container-networking-from-scratch</a></p>
</li>
<li><p><a target="_blank" href="https://developers.redhat.com/blog/2018/10/22/introduction-to-linux-interfaces-for-virtual-networking?ref=zawzaw.blog">https://developers.redhat.com/blog/2018/10/22/introduction-to-linux-interfaces-for-virtual-networking</a></p>
</li>
</ul>
<hr />
]]></content:encoded></item><item><title><![CDATA[How to Completely Remove Deleted Secret Files and Large Files from Git History]]></title><description><![CDATA[Git ဆိုတာ အားလုံးလည်းသိကြတဲ့, အရမ်းအသုံးဝင်တဲ့ version control system တစ်ခုပဲ ဖြစ်ပါတယ်။ ဒီခေတ်မှာ git မသုံးတဲ့ developer ဆိုတာလည်း မရှိတော့သလောက်ပါပဲ။​ Git repository ထဲကို ဖိုင်တစ်ဖိုင် add ပြီး commit လိုက်တာနဲ့ အဲ့ဖိုင်ကို ပြန်ဖျက်လိုက်ရင်တောင် h...]]></description><link>https://kalaung.org/how-to-completely-remove-deleted-secret-files-and-large-files-from-git-history</link><guid isPermaLink="true">https://kalaung.org/how-to-completely-remove-deleted-secret-files-and-large-files-from-git-history</guid><category><![CDATA[Git]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Devops]]></category><category><![CDATA[version control]]></category><dc:creator><![CDATA[Soe Thura]]></dc:creator><pubDate>Wed, 07 May 2025 10:20:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1746612150334/2cc934cc-2fdd-4b21-973d-38d5679b475e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Git ဆိုတာ အားလုံးလည်းသိကြတဲ့, အရမ်းအသုံးဝင်တဲ့ version control system တစ်ခုပဲ ဖြစ်ပါတယ်။ ဒီခေတ်မှာ git မသုံးတဲ့ developer ဆိုတာလည်း မရှိတော့သလောက်ပါပဲ။​ Git repository ထဲကို ဖိုင်တစ်ဖိုင် add ပြီး commit လိုက်တာနဲ့ အဲ့ဖိုင်ကို ပြန်ဖျက်လိုက်ရင်တောင် histroy ထဲမှာ အမြဲတမ်းကျန်နေခဲ့မှာပါ။ ဒါကြောင့် git ကို time machine လို့ တစ်ချို့က တင်စားပြီးခေါ်ကြတာပါ။​ ဒီအရမ်း အသုံးဝင်တဲ့ time machine ထဲကို credentials ဖိုင်တွေ (e.g: <code>.env</code>, <code>private keys</code>)နဲ့ ဖိုင်ဆိုဒ် အရမ်းကြီးပြီး repository ထဲ ထည့်စရာမလိုတဲ့ ဖိုင်တွေကို မတော်တဆ ထည့်မိရင်တော့ ပြဿနာရှိလာပါပြီ။</p>
<p>ဒီဆောင်းပါးမှာတော့ git history ထဲကို မတော်တဆ commit ထဲ ထည့်မိပြီးမှ ပြန်ဖျက်ထားခဲ့တဲ့ credentials ဖိုင်တွေနဲ့ file size ကြီးတဲ့ဖိုင်တွေကို အပြီးအပြတ် ဖယ်ရှားနိုင်မယ့်နည်းလမ်းတွေကို ဘယ်လို အသုံးပြုရမလဲ ပြောပြပေးသွားပါမယ်။</p>
<h3 id="heading-why-just-deleting-the-file-isnt-enough">🤔 Why Just Deleting the File Isn’t Enough?</h3>
<p>ဖိုင်တစ်ခုကို <code>git rm path/to/secret.file</code> နဲ့ ဖျက်ပြီး commit လုပ်လိုက်တာနဲ့ git history ထဲက ပျက်မသွားပါဘူး။ ဘယ်သူမဆို ဖိုင်မဖျက်ခင်အခြေအနေကို <code>git checkout</code> နဲ့ ပြန်သွားယူလို့ရပါတယ်။</p>
<pre><code class="lang-bash">git checkout &lt;commit-hash&gt; -- path/to/secret.file
</code></pre>
<p>ဒါကြောင့် ဒီဖိုင်ကို history ထဲက ဖျက်လိုက်ချင်ရင် ဒီဖိုင် စထည့်တဲ့ commit ကနေစပြီး git history တစ်ခုလုံးကို ပြန်ရေးဖို့လိုပါတယ်။</p>
<h3 id="heading-tools-you-can-use">🛠️ Tools You Can Use</h3>
<ul>
<li><p><a target="_blank" href="https://github.com/newren/git-filter-repo"><code>git filter-repo</code></a></p>
</li>
<li><p><code>bfg (Repo-Cleaner)</code></p>
</li>
<li><p><a target="_blank" href="https://github.com/github/git-sizer"><code>git-sizer</code></a></p>
</li>
</ul>
<h3 id="heading-git-repo-size-git-sizer">📏 <strong>Git Repo Size ကို ကြည့်ဖို့</strong> <code>git-sizer</code> အသုံးပြုနိုင်ပါတယ်။</h3>
<h5 id="heading-installation">🔧 Installation</h5>
<pre><code class="lang-bash"><span class="hljs-comment"># MacOS</span>
brew install git-sizer

<span class="hljs-comment"># Ubuntu</span>
sudo apt install git-sizer
</code></pre>
<h5 id="heading-run">🧪 Run</h5>
<pre><code class="lang-bash">git-sizer

Processing blobs: 41369                        
Processing trees: 89219                        
Processing commits: 3589                        
Matching commits to trees: 3589                        
Processing annotated tags: 5                        
Processing references: 39                        
| Name                         | Value     | Level of concern               |
| ---------------------------- | --------- | ------------------------------ |
| Biggest objects              |           |                                |
| * Blobs                      |           |                                |
|   * Maximum size         [1] | 962.0 MiB | ******                         |
|                              |           |                                |
| Biggest checkouts            |           |                                |
| * Maximum path depth     [2] |    16     | *                              |
| * Maximum path length    [3] |   144 B   | *                              |

[1]  cabe5dd7cf7e0c275f789bd64cc5a943a7b79acb (refs/remotes/origin/example-branch:storage/path/large-file.ext)
[2]  9a7d193d8ea79aa0a21b0a8e13310c63cb54dc83 (refs/remotes/origin/example-branch^{tree})
[3]  600bc870aee0d3e4a97f592c8fd4b92edbf70ab4 (7ac90183211e4e4832650b03fa296773e5002ca8^{tree})
</code></pre>
<p><code>git-sizer</code> ကို သုံးပြီး ဘယ် commits တွေကြီးနေတယ်၊ ဘယ်ဖိုင်အကြီးတွေ history ထဲပါနေတယ် ဆိုတာတွေကို သိရှိနိုင်ပါတယ်။ git repo size ကြီးအောင် ဘယ်ကောင်တွေက နေရာယူနေလဲ သိပြီဆိုရင်၊ အဲ့ဖိုင်တွေကို history ထဲကနေ အောက်ပါ နည်းလမ်းတွေသုံးပြီး ဖျက်လို့ရပါတယ်။</p>
<h3 id="heading-step-2-remove-files-from-git-history"><strong>🧹 Step 2: Remove Files from Git History</strong></h3>
<h4 id="heading-method-1-using-git-filter-repo">Method 1: Using <code>git filter-repo</code></h4>
<h5 id="heading-install">✅ Install</h5>
<pre><code class="lang-bash">brew install git-filter-repo
<span class="hljs-comment"># or</span>
pipx install git-filter-repo
</code></pre>
<p><code>filter-repo</code> ကို install လုပ်ပြီးပြီဆိုရင်တော့ တစ်ဖိုင်ခြင်းဖြစ်စေ၊ တစ်ဖိုင်ထက် ပိုပြီးတော့ဖြစ်စေ ရှင်းနိုင်သလို။ extension နဲ့လည်း history ထဲက ရှင်းလိုက်လို့ရပါပြီ။</p>
<h5 id="heading-remove-specific-files">🧼 Remove Specific Files</h5>
<pre><code class="lang-bash">git filter-repo --path .env --invert-paths
</code></pre>
<p>Multiple files:</p>
<pre><code class="lang-bash">git filter-repo --path .env --path secrets.json --invert-paths
</code></pre>
<p>By extension:</p>
<pre><code class="lang-yaml"><span class="hljs-string">git</span> <span class="hljs-string">filter-repo</span> <span class="hljs-string">--path-glob</span> <span class="hljs-string">'*.zip'</span> <span class="hljs-string">--invert-paths</span>
</code></pre>
<hr />
<h4 id="heading-method-2-using-bfg-repo-cleaner">Method 2: Using BFG Repo-Cleaner</h4>
<p><code>filter-repo</code> ထက်စာရင် <code>bfg</code> က သုံးရတာ ပိုလွယ်ပါတယ်။ <code>--delete-files</code> option ကို သုံးပြီး ရှင်းကြသလို <code>--strip-blobs-bigger-than</code> option ကိုသုံးပြီးလည်း file size limit နဲ့လည်း ရှင်းလို့ရပါတယ်</p>
<h5 id="heading-install-1">✅ Install</h5>
<pre><code class="lang-bash">brew install bfg
</code></pre>
<h5 id="heading-remove-files-or-blobs">💥 Remove Files or Blobs</h5>
<pre><code class="lang-bash"><span class="hljs-comment"># Remove sensitive files</span>
bfg --delete-files .env

<span class="hljs-comment"># Remove blobs bigger than 100MB</span>
bfg --strip-blobs-bigger-than 100M
</code></pre>
<p>History ထဲကနေ ဖျက်ပြီးပြီဆိုရင်တော့ မလိုတော့တဲ့ reflog တွေကို ဖျက်ပစ်ပြီး၊ မသုံးတော့တဲ့ object တွေကို ဖျက်ပစ်ဖို့ အောက်က command တွေ run ပေးဖို့လိုက်ရင်တော့ git history ထဲက ဖိုင်အကြီးတွေ မရှိတော့တဲ့အတွက် .git folder size က အများကြီး ကျသွားတာကို တွေ့ရပါလိမ့်မယ်။</p>
<h5 id="heading-final-cleanup">🔄 Final Cleanup</h5>
<pre><code class="lang-bash">git reflog expire --expire=now --all
git gc --prune=now --aggressive
git push --force-with-lease
</code></pre>
<hr />
<h3 id="heading-important-warnings">⚠️ Important Warnings</h3>
<ul>
<li><p>ပြီးရင်တော့ force pushing နဲ့ပြန်တင်ပေးဖို့လိုသလို collaborators တွေကလည်း repo ကို ဖျက်ပြီး clone ပြန်လုပ်တာဖြစ်စေ hard reset လုပ်တာဖြစ်စေ လုပ်ပေးဖို့လိုပါတယ်။</p>
</li>
<li><p>ဒါတွေကို မလုပ်ခင်မှာ repository backup လုပ်ထားသင့်ပါတယ်။</p>
</li>
</ul>
<hr />
<h3 id="heading-prevent-future-leaks">🔐 Prevent Future Leaks</h3>
<ul>
<li><p>ဒီလိုမျိုးတွေ နောက်တစ်ခါ commit မလုပ်မိအောင် <code>.gitignore</code> ထဲမှာ ထည်ပေးထားသင့်ပါတယ်။</p>
</li>
<li><p>file အကြီးတွေ history ထဲပါနေလား သိရအောင် weekly လောက်ဖြစ်ဖြစ် <code>git-sizer</code> နဲ့ ပုံမှန် စစ်ပေးသင့်ပါတယ်</p>
</li>
</ul>
<p>အဆုံးအထိ ဖတ်ပေးလို့ ကျေးဇူးတင်ပါတယ်။</p>
]]></content:encoded></item><item><title><![CDATA[How to get 100% Free Exam Voucher for AWS Foundation or Associate Exam?]]></title><description><![CDATA[အားလုံးပဲ မင်္ဂလာပါခဗျာ
ကျွန်တော် ဒီနေ့မျှဝေပေးချင်တာကတော့ AWS ရဲ့ Certificates Exam တွေကို ဘယ်လိုမျိုး အခမဲ့ ဖြေဆိုနိုင်မလဲဆိုတာပဲ ဖြစ်ပါတယ်။ (စာရေးသားအချိန်ထိတော့ စာရေးသူကိုယ်တိုင် Voucher မရရှိသေးပါဘူး၊ အားလုံး ရဖို့တော့ မျှော်လင့်ပါတယ်)
၁။ AWS Ed...]]></description><link>https://kalaung.org/how-to-get-100-free-exam-voucher-for-aws-foundation-or-associate-exam</link><guid isPermaLink="true">https://kalaung.org/how-to-get-100-free-exam-voucher-for-aws-foundation-or-associate-exam</guid><category><![CDATA[AWS]]></category><category><![CDATA[Certification]]></category><dc:creator><![CDATA[KaungThant Lwin]]></dc:creator><pubDate>Mon, 03 Mar 2025 06:58:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740985063367/36521fee-2cf3-4dc8-a479-d584559172f2.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးပဲ မင်္ဂလာပါခဗျာ</p>
<p>ကျွန်တော် ဒီနေ့မျှဝေပေးချင်တာကတော့ AWS ရဲ့ Certificates Exam တွေကို ဘယ်လိုမျိုး အခမဲ့ ဖြေဆိုနိုင်မလဲဆိုတာပဲ ဖြစ်ပါတယ်။ (စာရေးသားအချိန်ထိတော့ စာရေးသူကိုယ်တိုင် Voucher မရရှိသေးပါဘူး၊ အားလုံး ရဖို့တော့ မျှော်လင့်ပါတယ်)</p>
<p>၁။ AWS Educate မှာ Register ပြုလုပ်ပြီး Badge ရမည့် Course တခုခု ဥပမာ (Gen AI Course လိုမျိုး)ကို ပြီးဆုံးအောင် တက်ရောက်ဖို့ လိုအပ်ပါတယ် Register ပြုလုပ်ရန် လင့် - <a target="_blank" href="https://aws.amazon.com/education/awseducate/">https://aws.amazon.com/education/awseducate/</a> Confirm ဖြစ်ဖို့ ခဏတော့ စောင့်ရပါလိမ့်မယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1740984462930/567998d1-bb47-466d-aafd-fd1adfb0761c.png" alt class="image--center mx-auto" /></p>
<p>၂။ Course ရဲ့ assessment ကိုပြီးဆုံးအောင် ဖြေဆိုပြီး ရက်ပိုင်းအတွင်း Credly Badge ရတဲ့ email အပြင် မကြာခင်မှာ Emerging Talent Community (ETC) ကို join ဖို့အတွက်လည်း အောက်ပါလို email ရပါလိမ့်မယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1740984325037/eacaaf57-d57f-4599-bff8-2902b9238a69.png" alt class="image--center mx-auto" /></p>
<p>၃။ ETC ကို join ပြီးတဲ့ နောက်မှာတော့ ETC က ချပေးတဲ့ activities တွေကို ပြုလုပ်ဖို့ လိုပါတယ်။ Activities တွေ လုပ်တာနှင့်အမျှ ပွိုင့်တွေ ရလာမှာ ဖြစ်ပါတယ်။ ပွိုင့်စုစုပေါင်း (၄၅၀၀) ရရင် Foundations Level Certificate Voucher ကို ရရှိနိုင်မှာဖြစ်ပြီး ပွိုင့်စုစုပေါင်း (၅၂၀၀) ရရင်တော့ Associate Level Certificate Voucher ကို ရရှိဖို့ အခွင့်အရေးရှိမှာ ဖြစ်ပါတယ်။ ပွိုင့်တွေရဖို့ activities တွေကိုတော့ ETC က ချပေးတဲ့ အပေါ်မှာ မူတည်တာမျိုးဖြစ်တဲ့အတွက် ဘယ်လောက်အတွင်း လိုအပ်တဲ့ ပွိုင့်တွေ ရမလဲဆိုတာကိုတော့ သေချာမပြောတတ်ပါဘူး။ ETC နှင့် ပတ်သတ်သည်တွေကိုတော့ အောက်ပါလင့်မှာ ဖတ်ရှူနိုင်ပါတယ်။ <a target="_blank" href="https://www.awseducate.com/registration/s/learner-faqs#emerging-talent-community">https://www.awseducate.com/registration/s/learner-faqs#emerging-talent-community</a></p>
<p>ETC မှာ ရှိတဲ့ activities တွေအလိုက် အောက်ပါလို ပွိုင့်တွေရမှာ ဖြစ်ပါတယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1740984298092/bb97e5ed-2dcd-48f3-baca-94501b41dc54.png" alt class="image--center mx-auto" /></p>
<p>၄။ အထက်ပါ အချက်တွေအပြင် AWS Skill Builder Platform ကနေ မိမိဖြေဆိုချင်တဲ့ exam preparation course တခုခုကိုလည်း ပြီးဆုံးအောင် တက်ဖို့လည်း လိုပါသေးတယ်။ အားလုံးပြီးမြောက်သွားရင်တော့ 100% free ရမည့် Voucher ကို request ပြုလုပ်နိုင်မှာ ဖြစ်ပါတယ်။ မိမိဖြေလိုတဲ့ Foundation or Associate Level Exam preparing ကို https://skillbuilder.aws မှာ သွားရောက် လေ့လာဖို့လိုပါတယ်။ (စာရေးသားအချိန်ထိတော့ စာရေးသူကိုယ်တိုင် Voucher မရရှိသေးပါဘူး၊ အားလုံး ရဖို့တော့ မျှော်လင့်ပါတယ်)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1740984387256/46eb1981-fdd9-4c48-b2d9-adf8152f92f8.png" alt class="image--center mx-auto" /></p>
<p>P.S Vouchers ရရှိနိုင်မှုအပေါ် မူတည်တာဖြစ်လို့ မြန်မြန်ဆန်ဆန်နဲ့ ယူထားမှ အဆင်ပြေမယ်နော်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1740995592493/6fd68df0-3da9-43c7-89cb-5b052518d6e0.png" alt class="image--center mx-auto" /></p>
<p>exam အတွက် ပြင်ဆင်တာကိုတော့ မိမိနှစ်သက်သည့် Platform တွေကနေ ပြင်ဆင်ဖို့လည်း အကြံပေးလိုပါတယ်။ အားလုံးပဲ အဆင်ပြေကြပါစေ။</p>
]]></content:encoded></item><item><title><![CDATA[Startup & Smart Contract]]></title><description><![CDATA[Smart Contract ဆိုတာ Contract ဆိုတဲ့အတိုင်း ရိုးရိုး စာချုပ်စာတမ်းတွေလိုပဲ သဘောတူညီမှုရယူထားတဲ့ လုပ်ဆောင်ချက်တွေ၊ စည်းကမ်းချက်တွေကို ထည့်သွင်းရေးသားထားတာပါ။ ရိုးရိုး စာချုပ်စာတမ်း နဲ့ မတူတာက အဲ့ဒီ စည်းကမ်းချက်တွေအတိုင်း အလိုအလျောက် အကောင်အထည်ဖော်တဲ့ ...]]></description><link>https://kalaung.org/startup-smart-contract</link><guid isPermaLink="true">https://kalaung.org/startup-smart-contract</guid><category><![CDATA[Blockchain]]></category><dc:creator><![CDATA[Zin Wai Yan]]></dc:creator><pubDate>Wed, 12 Feb 2025 12:05:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1737361465903/7b2238cf-ef90-4273-a51d-bb5410204a53.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Smart Contract ဆိုတာ Contract ဆိုတဲ့အတိုင်း ရိုးရိုး စာချုပ်စာတမ်းတွေလိုပဲ သဘောတူညီမှုရယူထားတဲ့ လုပ်ဆောင်ချက်တွေ၊ စည်းကမ်းချက်တွေကို ထည့်သွင်းရေးသားထားတာပါ။ ရိုးရိုး စာချုပ်စာတမ်း နဲ့ မတူတာက အဲ့ဒီ စည်းကမ်းချက်တွေအတိုင်း အလိုအလျောက် အကောင်အထည်ဖော်တဲ့ Program တနည်းအားဖြင့် blockchain ပေါ်မှာ အလိုအလျောက် run နိုင်တဲ့ program code လို့အလွယ်မှတ်နိုင်ပါတယ်။</p>
<p>ဒီ ဆောင်းပါးမှာတော့ Startup တွေ Smart Contract အသုံးပြူပြီး အရင်းနှီးရှာဖွေပြီး အကျိုးအမြတ်ခွဲဝေ ရာမှာအသုံးပြုပုံကိုပြောပြပေးမှာပါ။</p>
<h3 id="heading-smart-contract-token">Smart Contract Token အမျိုးစားများ နဲ့ အသုံးပြုပုံ</h3>
<ul>
<li><h3 id="heading-utility-tokens"><strong>Utility Tokens</strong></h3>
<p>  ICO (ICO အကြောင်းအောက်မှာဆက်ရှင်းထားပါတယ်) တို့လို ရင်းနှီးမြုတ်နှံမှု လုပ်ဖို့မဟုတ်ဘဲ သူရဲ့ blockchain ecosystem အတွင်းက Product or service အတွက် ငွေပေးချေရာတွင်အသုံးပြုတဲ့Token ဖြစ်ပါတယ်။ Cloud storage, Decentralized applications (dApps) တွေအတွက် ငွေပေးချေရာတွင်အသုံးပြုပါတယ်။</p>
</li>
<li><h3 id="heading-governance-tokens"><strong>Governance Tokens</strong></h3>
<p>  Token ပိုင်ဆိုင်သူကို ဗဟိုချုပ်ကိုင်မှုမရှိသော platform ဒါမှမဟုတ် protocol တစ်ခုထဲမ ဆုံးဖြတ်ချက်များတွင် ပါဝင်ခွင့်ပေးထားတဲ့ Token အမျိုးအစားတစ်ခုဖြစ်ပါတယ်။ ဥပမာ - Token ပိုင်ဆိုင်သူတွေက protocol အဆင့်မြှင့်တင်မှုတွေဒါမှမဟုတ် လုပ်ဆောင်ချက်အသစ်တွေကို မဲပေး ရွေးချယ် ဆုံးဖြတ်နိုင်ပါတယ်။</p>
</li>
<li><h3 id="heading-non-fungible-tokens-nfts"><strong>Non-Fungible Tokens (NFTs)</strong></h3>
<p>  NFT တွေဟာ Token ဖြစ်လို့ Unique ဖြစ်ပြီး သူနဲ့ထပ်တူညီလဲလို့ရတာမရှိပါဘူး။  ဒီဂျစ်တယ်နည်းနဲ့ရောင်းလို့ရတာတွေဟာ NFT အဖြစ်လုပ်လို့ပါတယ်။ ပုံဖြစ်စေ၊ အသံဖိုင်ဖြစ်စေ ၊ ဗီဒီယိုဖိုင်ဖြစ်စေ အကုန်လုံးဟာ NFT ဒီဂျစ်တယ် မူပိုင်ခွင့် အဖြစ်နဲ့ ရောင်းချလို့ရပါတယ်။</p>
</li>
</ul>
<p>ဒါတွေကတော့အသုံးများတဲ့ Token use case တွေပါ။</p>
<h3 id="heading-startup-ico">Startup တွေရဲ့ အရင်းနှီးရှာဖွေခြင်း ICO</h3>
<p>ICO (Initial Coin Offering) ဆိုတာ ကနဦးအကြို ရှယ်ရာ ကို Block Chain တစ်ခုခုပေါ်မှာတည်ဆောက်ထားတဲ့ Digital token တွေကို ရောင်းချပြီး ရန်ပုံငွေရှာတယ်လို့ ပြောနိုင်ပါတယ်။ ICO ဆိုတာ သမားရိုးကျ ကုမ္ပဏီ လုပ်ငန်းတွေမှာ IPO ( Initial Public Offering ) လိုမျိုး ရင်းနှီးမြှုပ်နှံမယ့်သူများကို ရှယ်ယာပိုင်ဆိုင်ခွင့်ပေးပြီး လုပ်ငန်းဆိုင်ရာ ရံပုံငွေရှာဖွေခြင်းတစ်မျိုးပါဘဲ။</p>
<h3 id="heading-token-development">Token Development အတွက်ဘာတွေလိုမလဲ?</h3>
<p>Developer တစ်ယောက်အနေနဲ့ Smart Contract ကိုရေးသားဖို့ဆိုရင် solidity language ကိုသုံးပြီးရေးနိုင်ပါတယ်။ JS, Rust တို့မှာလဲ Library တွေအဆင်သင့်ယူသုံးနိုင်ပါတယ်၊၊ ပထမဆုံး ကိုယ့် Token က ဘယ် Blockchain ပေါ်မှာ ထားမလဲဆို တာ ရွေးချယ်ရပါမယ် Startup တွေအသုံးများတဲ့ Blockchain တွေကတော့</p>
<ul>
<li><p>Ethereum</p>
</li>
<li><p>Binance Smart Chain</p>
</li>
<li><p>Solana</p>
</li>
<li><p>Polygon</p>
</li>
</ul>
<p>တို့ဘဲဖြစ်ပါတယ် တစ်ခုခြင်းဆီမှာ အားသာချက်အားနည်းချက်တွေရှိကြပါတယ် ဥပမာအနေနဲ့ Solana က Gas Fee cost သက်သာပြီး အမြန်နှုန်းမှာလဲ တစ်စက္ကန့်ကို Transaction ပေါင်း 65,000 အထိ လုပ်ဆောင်နိုင်ပြီး ကမ္ဘာ့အမြန်ဆုံး Blockchain ထဲမှာပါပါတယ်။ Solana က တစ်ခြား Blockchain ထက် မြန်တာတင်မဟုတ်ပါဘူး၊ ကျွန်တော်တို့ လက်ရှိ အသုံးပြုနေတဲ့ Visa, Master Transaction ထက် တောင်မြန်ပါတယ်။ သို့ပေမယ့် ကွန်ရက် ပြတ်တောက်ခြင်းနှင့် အခြား သော Blockchain များနဲ့ နှိုင်းယှဥ်ရင် Decentralized ဗဟိုချုပ်ကိုင်မှုကင်းလွတ်မှု အားနည်းချင်းတို့ ရှိတတ်ပါတယ်။ ဒါကြောင့် ကိုယ့် Project အတွက် Token တည်ဆောက်ဖို့ Blockchain ကိုရွေးချယ်စဥ်းစားရာမှာ <strong>Security, Gas Fee cost, Community and Support နဲ့ Scalability</strong> တို့ကိုထည့်သွင်းစဥ်းစားသင့်ပါတယ်။</p>
<h3 id="heading-ref">Ref</h3>
<p><a target="_blank" href="https://medium.com/coinmonks/10-top-blockchain-platforms-for-crypto-token-development-5381f801028e">https://medium.com/coinmonks/10-top-blockchain-platforms-for-crypto-token-development-5381f801028e</a></p>
<p>Type of token- <a target="_blank" href="https://hedera.com/learning/smart-contracts/types-of-smart-contracts">https://hedera.com/learning/smart-contracts/types-of-smart-contracts</a></p>
]]></content:encoded></item><item><title><![CDATA[Amazon SageMaker AI]]></title><description><![CDATA[အားလုံးပဲ မင်္ဂလာပါခဗျာ ကျွန်တော်ဒီနေ့မျှဝေပေးလိုတာကတော့ AWS ရဲ့ AI ဆားဗစ်တခုဖြစ်တဲ့ SageMaker အကြောင်း ဖြစ်ပါတယ်။ AWS SageMaker AI က AWS ရဲ့ ML (Machine Learning) Model တွေကို Development မှ Production အဆင့်ရောက်အောင် လွယ်ကူစွာ ပြုလုပ်ပေးနိုင်သည့် N...]]></description><link>https://kalaung.org/amazon-sagemaker-ai</link><guid isPermaLink="true">https://kalaung.org/amazon-sagemaker-ai</guid><category><![CDATA[AWS]]></category><category><![CDATA[ML]]></category><category><![CDATA[mlops]]></category><dc:creator><![CDATA[tabarkhet]]></dc:creator><pubDate>Tue, 03 Dec 2024 15:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1737258369088/e834d513-8c96-41cf-91d5-b7276f397544.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>အားလုံးပဲ မင်္ဂလာပါခဗျာ ကျွန်တော်ဒီနေ့မျှဝေပေးလိုတာကတော့ AWS ရဲ့ AI ဆားဗစ်တခုဖြစ်တဲ့ SageMaker အကြောင်း ဖြစ်ပါတယ်။ AWS SageMaker AI က AWS ရဲ့ ML (Machine Learning) Model တွေကို Development မှ Production အဆင့်ရောက်အောင် လွယ်ကူစွာ ပြုလုပ်ပေးနိုင်သည့် Next-Generation ML Service တစ်ခုဖြစ်ပါတယ်။ 2024 ဒီဇင်ဘာ ၃ ရက်နေ့ တွင် AWS သည် Amazon SageMaker ကို <strong>SageMaker AI</strong> ဟူ၍ အမည်ပြောင်းပြီး သာမန် ML လုပ်ဆောင်ချက်များအပြင် ပိုမိုကောင်းမွန်တဲ့ Features များ ပါဝင်လာသည့် အဆင့်မြင့် ပလက်ဖောင်းအဖြစ် မိတ်ဆက်ခဲ့ပါတယ်။</p>
<p>အဓိက အစိတ်အပိုင်းများမှာ-</p>
<h4 id="heading-1amazon-sagemaker-lakehouse"><strong>1.Amazon SageMaker Lakehouse</strong></h4>
<ul>
<li><strong>Lakehouse Architecture</strong> သည် S3, Redshift ကဲ့သို့သော Data Sources များမှ Structured နှင့် Unstructured Data များစွာကို တစ်စုတည်းပေါင်းစည်းပြီး Analytical Queries နှင့် Model Training အတွက် Data များကို လွယ်ကူစွာ အသုံးပြုပါတယ်။</li>
</ul>
<h4 id="heading-2-amazon-sagemaker-data-and-governance">2. <strong>Amazon SageMaker Data and Governance</strong></h4>
<ul>
<li><p>DataZone အပေါ်မှာ အခြေခံပြီး, SageMaker Catalog ကို အသုံးပြုကာ Data Search, Metadata Management, Model Cataloging, နှင့် Governance စနစ်တကျ ပြုလုပ်နိုင်ပါတယ်။</p>
</li>
<li><p>Data Compliance, Access Control, နှင့် Data Lineage စနစ်များကို သုံးပြီး AI/ML Ecosystem ကို ယုံကြည်စိတ်ချစွာ လည်ပတ်စေနိုင်ပါတယ်။</p>
</li>
</ul>
<h4 id="heading-3-sql-analytics">3. <strong>SQL Analytics</strong></h4>
<ul>
<li><p>Price-to-Performance သင့်တော်သည့် SQL Engines (e.g., Amazon Athena) များကို အသုံးပြုပြီး Data Analysis နှင့် Insight Extraction များ ဆွဲထုတ်နိုင်ပါတယ်။</p>
</li>
<li><p>Large-Scale Data Queries များကို Optimize လုပ်ပြီး Latency များကို လျှော့ချပေးပါတယ်။</p>
</li>
</ul>
<h4 id="heading-4-amazon-sagemaker-data-processing">4. <strong>Amazon SageMaker Data Processing</strong></h4>
<ul>
<li><p><strong>Athena</strong>, <strong>Amazon EMR</strong>, နှင့် <strong>AWS Glue</strong> နှင့် ထိတွေ့၍</p>
<ul>
<li><p>Data Preparation (ETL)</p>
</li>
<li><p>Data Cleansing</p>
</li>
<li><p>Feature Engineering</p>
</li>
<li><p>Advanced Data Transformation<br />  များကို လွယ်ကူစွာ ပြုလုပ်နိုင်ပါတယ်။</p>
</li>
</ul>
</li>
</ul>
<h4 id="heading-5-amazon-bedrock">5. <strong>Amazon Bedrock</strong></h4>
<ul>
<li><p>Generative AI Applications တည်ဆောက်ရာတွင်အထောက်အကူပြုသော Bedrock သည် Pre-trained Foundation Models (e.g., Text, Vision, Audio) ကို အသုံးပြုနိုင်ပါတယ်။</p>
</li>
<li><p>AWS Partner Model Library ကို အသုံးပြုကာ Custom Generative AI Solutions များကို Develop လုပ်နိုင်ပါတယ်။</p>
</li>
</ul>
<p><strong>Built-in Algorithms</strong></p>
<p>SageMaker AI သည် Data Scientists နှင့် ML Practitioners များအတွက် Pre-built Algorithms များ ပါဝင်လာပြီး Model Training ကို လွယ်ကူစေပါတယ်။။ Algorithms များကို အောက်ပါအတိုင်း Category များခွဲထားပါတယ်-</p>
<h4 id="heading-supervised-learning-algorithms"><strong>Supervised Learning Algorithms</strong></h4>
<ul>
<li><p><strong>Linear Learner</strong></p>
<ul>
<li>ရောင်းအားခန့်မှန်းခြင်း (Regression) နှင့် Binary Classification (e.g., Category သတ်မှတ်ခြင်း) တို့အတွက် အသုံးပြုနိုင်သည်။</li>
</ul>
</li>
<li><p><strong>Factorization Machine</strong></p>
<ul>
<li>Movie Recommendation Systems နှင့် Shopping History အခြေခံ Recommendation Systems များတွင် အသုံးပြုနိုင်သည်။</li>
</ul>
</li>
</ul>
<h4 id="heading-unsupervised-learning-algorithms"><strong>Unsupervised Learning Algorithms</strong></h4>
<ul>
<li><p><strong>K-Means</strong></p>
<ul>
<li>Unlabeled Data များကို အုပ်စုဖွဲ့ခြင်း (e.g., Customer Segmentation, Spam Detection) အတွက် အသုံးပြုပါတယ်။</li>
</ul>
</li>
<li><p><strong>Principal Component Analysis (PCA)</strong></p>
<ul>
<li>Target Column နဲ့ Weak Correlation ရှိတဲ့ Columns များကို လျော့ချပေးရာတွင် အသုံးပြုပါတယ်။</li>
</ul>
</li>
<li><p><strong>Random Cut Forest</strong></p>
<ul>
<li>IoT Sensor Data များမှ မူမမှန်သော Data များရှာဖွေရာတွင် အသုံးဝင်ပါတယ်။</li>
</ul>
</li>
<li><p><strong>IP Insight</strong></p>
<ul>
<li>Unusual IP Address Patterns ရှာဖွေခြင်း (e.g., Unauthorized Access Attempts) အတွက် အသုံးပြုပါတယ်။</li>
</ul>
</li>
</ul>
<h4 id="heading-specialized-algorithms"><strong>Specialized Algorithms</strong></h4>
<ul>
<li><p><strong>Sequence to Sequence</strong></p>
<ul>
<li>Machine Translation, Text Summarization, Voice-to-Text Processing များတွင် အသုံးပြုပါတယ်။</li>
</ul>
</li>
<li><p><strong>Semantic Segmentation</strong></p>
<ul>
<li>Image Pixels အဆင့်အထိ Data ရယူကာ High Precision Image Analysis (e.g., Object Detection) အတွက် အသုံးပြုပါတယ်။</li>
</ul>
</li>
</ul>
<h3 id="heading-advanced-features-in-sagemaker-ai"><strong>Advanced Features in SageMaker AI</strong></h3>
<ol>
<li><p><strong>Edge Deployment with SageMaker Edge Manager</strong></p>
<ul>
<li>IoT Devices များအတွက် Models တင်နိုင်ပြီး Offline Predictions ဆောင်ရွက်နိုင်စေပါတယ်။</li>
</ul>
</li>
<li><p><strong>SageMaker Pipelines</strong></p>
<ul>
<li><p>Continuous Integration/Continuous Deployment (CI/CD)</p>
<ul>
<li>ML Model များအတွက် CI/CD Processများကို အသုံးပြုပြီး ML Workflow များကို အလိုအလျောက်လည်ပတ်စေနိုင်ပါတယ်။</li>
</ul>
</li>
<li><p>Automates ML Workflows with Reproducibility</p>
<ul>
<li>စနစ်တကျဖန်တီးထားပြီးတဲ့ Workflowတွေကို နောက်pproject တွေမှာ ထပ်မံအသုံးပြုလို့ရအောင် စီမံနိုင်ပါတယ်။</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Security and Governance</strong></p>
<p> <strong>IAM Role-based Access Control</strong>:</p>
<ul>
<li><p>Amazon IAM ကို အသုံးပြုကာ User တစ်ဦးချင်းစီနှင့် Role အလိုက် Permission များကို ထိန်းချုပ်နိုင်ပါတယ်။</p>
</li>
<li><p><strong>Encryption at Rest and In Transit</strong>:</p>
<ul>
<li>Data များကို သိုလှောင်နေစဉ် (at rest) နှင့် လွှဲပြောင်းနေစဉ် (in transit) အချိန်များတွင် အချက်အလက်များကို AES-256 Encryption နှင့် TLS Encryption ဖြင့် လုံခြုံအောင် ပြုလုပ်ထားပါတယ်။</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Custom Training Support</strong></p>
<ul>
<li><p><strong>BYOC (Bring Your Own Container)</strong>:</p>
<ul>
<li><p>TensorFlow, PyTorch ကဲ့သို့သော Frameworks များသို့မဟုတ် Custom Containers များကို သုံးပြီး Training Jobs များကို သီးသန့် Configure လုပ်နိုင်ခြင်း။</p>
</li>
<li><p>အထူးလိုအပ်ချက်များနှင့်ကိုက်ညီအောင် Flexible Training Environment တည်ဆောက်နိုင်ခြင်း တို့ဖြစ်ပါတယ်။</p>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<h3 id="heading-kirhgjthgk3hgilhgkhglbhgljhgihhglvhgkhgjxhglrhgkhhgkzhgljhgjbhglzhgithglrhglcqkg"><strong>နိဂုံးချုပ်အားဖြင့်</strong></h3>
<p>Amazon SageMaker AI သည် ML Model Development နှင့် Deployment အတွက် Comprehensive Service တခုဖြစ်ကာ၊ အခြေခံအဆင့်မှ အဆင့်မြင့် Use Cases များအထိ ML Workflow အားလုံးကို Handle ပြုလုပ်ပေးနိုင်ပြီး Built-in Algorithms, Flexible Deployment Options, Data Processing Tools, နှင့် Generative AI Support များကြောင့် Enterprise နှင့် SME တို့အတွက် ထိရောက်သော ML Platform တစ်ခုဖြစ်လာပါတယ်။</p>
]]></content:encoded></item><item><title><![CDATA[Github Foundation Certificate 100% Free ဖြေဆိုခွင့်]]></title><description><![CDATA[မှတ်ချက်။ Limit ပြည့်သွားတာမျိုးဖြစ်နိုင်ပါတယ်ခဗျာ
အားလုံးပဲ မင်္ဂလာပါခဗျာ အခွင့်အရေးလေးရတုန်းမှာ ယူထားလို့ရအောင်အတွက် မျှဝေပေးချင်တာလေး ရှိပါတယ်ခဗျာ။ Github Foundations Certificate ကို 0 USD ဖြင့် ဖြေဆိုခွင့်ရမှာဖြစ်ပါတယ်ခဗျာ။
ပထမဦးစွာ https://exam...]]></description><link>https://kalaung.org/github-foundation-certificate-100-free</link><guid isPermaLink="true">https://kalaung.org/github-foundation-certificate-100-free</guid><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[KaungThant Lwin]]></dc:creator><pubDate>Tue, 17 Sep 2024 17:27:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1726594017946/02afe9bc-1951-4dc0-a2f1-69c7ee1922a1.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-limit"><strong><em>မှတ်ချက်။ Limit ပြည့်သွားတာမျိုးဖြစ်နိုင်ပါတယ်ခဗျာ</em></strong></h3>
<p>အားလုံးပဲ မင်္ဂလာပါခဗျာ အခွင့်အရေးလေးရတုန်းမှာ ယူထားလို့ရအောင်အတွက် မျှဝေပေးချင်တာလေး ရှိပါတယ်ခဗျာ။ Github Foundations Certificate ကို 0 USD ဖြင့် ဖြေဆိုခွင့်ရမှာဖြစ်ပါတယ်ခဗျာ။</p>
<p>ပထမဦးစွာ <a target="_blank" href="https://examregistration.github.com/overview">https://examregistration.github.com/overview</a> ကိုသွားလိုက်ပါခဗျာ ပြီးရင်တော့ Github Foundations ဆိုတာလေးကို ရွေးချယ်ပေးပါခဗျာ။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726593316138/aa7ee503-ef21-4cc0-9fc5-d629c1d54b72.png" alt class="image--center mx-auto" /></p>
<p>ပြီးရင်တော့ Login with github ကိုရွေးချယ်ပြီး မိမိရဲ့ Github နှင့် Login ဝင်ပေးပါခဗျာ။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726593427107/6d33cf99-2fe0-4db2-908c-87df38c2ee96.png" alt class="image--center mx-auto" /></p>
<p>Github Foundation ကိုရွေးချယ်ထားရင်တော့ အောက်ပါအတိုင်းတွေ့ရပါလိမ့်မယ်ခဗျာ။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726593534399/bb986698-d76c-49ab-9edd-83b74e8466b2.png" alt class="image--center mx-auto" /></p>
<p>မြင်တဲ့အတိုင်းပဲ Checkout လုပ်မယ်ဆိုရင် 0 USD ဖြစ်သွားမယ်လို့ ပြောထားပါတယ်ခဗျာ။</p>
<p>“Schedule/TakeExam” ကို နှိပ်ပြီး Exam Registration ပြုလုပ်လို့ရပါတယ်ခဗျာ။</p>
<p>PSI Exam website ကိုရောက်သွားမှာဖြစ်ပြီး အောက်ပါအတိုင်း ပေါ်လာပါလိမ့်မယ်။</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726593700620/96418d23-fde1-4647-aeb1-a09924919dec.png" alt class="image--center mx-auto" /></p>
<p>မိမိတို့ရဲ့ Information တွေသေချာဖြည့်ပေးပါ နောက်ပြီးမိမိတို့ရဲ့ ကုမဏီ email လည်းဖြည့်စွက်ထားပါခဗျာ။ ဖြည့်စရာဖြည့်ပြီးနောက် နောက်ဆုံး Checkout page ရောက်သွားတဲ့အခါမှာ 0 USD ဖြင့် Github Foundation Exam ကို ဖြေဆိုရပါပြီခဗျာ။ Non-proctored exam ဖြစ်လို့ မိမိဖြေချင်တဲ့အချိန်မှာ ဖြေမယ်ဆိုပြီး ဖြေလို့ရပါလိမ့်မယ် ( ကျွန်တော်မဖြေကြည့်ရသေးပါခဗျာ)။</p>
<p>အားလုံးအဆင်ပြေကြပါစေခဗျာ။</p>
<p>KT</p>
]]></content:encoded></item></channel></rss>