Terraform Basic

--

Terraform သည် infrastructure ကို ထိထိရောက်ရောက်နှင့် လုံခြုံစွာ version အလိုက် build၊ changeစသည့် လုပ်ငန်းစဥ်များကို လုပ်ဆောင်ပေးနိုင်သည့် infrastructure as code (IaC) tool တစ်ခုဖြစ်သည်။ Terraform သည် Open source ဖြစ်ပြီး declarative language ပုံစံကိုသုံးသည်။

Terraform Installation

Terraform ကိုစတင်အသုံးပြုရန် terraform.io မှ window, mac, linux စသည့် os system အပေါ်တွင်မူတည်ပြီး download ရယူကာ မိမိစက်အတွင်း ထည့်သွင်းအသုံးပြုနိုင်ပါသည်။ ယခုတွင် Windows ပေါ်တွင်အသုံးပြုပုံကို ပြသွားပါမည်။ ကျန်သည့် OS များသည်လည်း terraform.io မှ ဖော်ပြထားသော instructions အတိုင်းသွင်းယူနိုင်သည်။ Windows အတွက်ဖော်ပြရလျှင် — Download ရယူထားသော zip ဖိုင်ကို unzip ဖြည်ပြီး၊ C:\ အောက်တွင် “terraform” စသည့်အမည်ရှိသော folder အသစ်တစ်ခုကိုပြုလုပ်ကာ terraform ၏ binary ဖိုင်ကိုထည့်သွင်းပါ။ CMD terminal များဖွင့်ထားပါက အရင်ပိတ်ထားပါ ။ထို့နောက် Win (key) + R (key) ကိုနှိပ်ကာ Run box တွင် “sysdm.cpl” ရိုက်ထည့်ပါ။

Window ၏ System Properties box တွင် Advanced tab > Environment Variables ကို click နှိပ်ပါ။

System variables အတွင်းရှိ Path > Edit> New အဆင့်ဆင့်သွားပါ။

နောက်ဆုံး location address ကို C:\terraform ကို paste ထည့် ပါ။

ထို့နောက် CMD terminal ပေါ်တွင် terraform -v ကိုရိုက်ထည့်ကာ terraform ကိုစတင်အသုံးပြုနိုင်ပါသည်။

Terraform Architecture

Terraform တွင် main components နှစ်မျိုးရှိသည်။

Terraform Core သည် လုပ်ငန်းများကို လုပ်ဆောင်ရန် Input အဖြစ် TF-Config နဲ့ State တို့ကိုအသုံးအပြုသည်။ TF-Config တွင် တည်ဆောက်လိုသော infrastructure တစ်ခု၏ လိုအပ်ချက်များကို ‌ဖော်ပြထားသည်။ State တွင် terraform သည် infrasturcture ၏ up-to-date အခြေအနေကို သိမ်းပေးထားသည်။ Terraform Core သည် Input နှစ်ခုကိုအသုံးပြုပြီး state တွင်ရှိနေသော infrastructure ၏ လက်ရှိ setup အခြေအနေနဲ့၊ TF-Config ရှိ desired တို့ကို နှိုင်းယှဥ်ပြီး Plan လုပ်ငန်းစဥ်ဖြစ်သော created/update/destroyed တို့ကိုလုပ်ဆောင်ပေးသည်။

Providers များဖြစ်သော Iaas (aws, azure), Paas(k8s), Saas(fastly) တို့သည် terraform လုပ်ငန်းစဥ်အတွက်လိုအပ်သော resources များကို အသုံးပြုခွင့်ရစေသည်။ Terraform တွင် provider များသည် 100 ထက်မကရှိပြီး၊ ၄င်းတို့တွင် 1000 ထက်မကသော resources များကိုထောက်ပံ့ပေးထားသည်။

Terraform Configuration Files

Terraform ၏ config files extension များသည် “.tf” ဖြင့်ဆုံးသည်။ Terraform config တွင် provider နဲ့ resource ‌စသောblock များပါ၀င်ပြီး၊ terraform ၏ syntax များကိုလည်းနားလည်ရလွယ်ကူပြီး၊ အသုံးပြုမှု ရိုးရှင်းအောင်ပြုလုပ်ထားသည့်၊ HCl ၏ ကိုယ်ပိုင် syntax ကိုသုံးထားသည်။ Golang ဖြင့်ရေးသားထားသည်။ Config file တွင် variables များနဲ့ အမျိုးမျိုးသော meta-arguments များကိုလည်းသုံးနိုင်သည်။ Comment များအတွက် single line ကို “#” (‌သို့) “//” ခံ၍ရေးနိုင်သည်။ Multi line comment များအတွက် “/* my comment*/” ကိုသုံးနိုင်သည်။

Other tools

Cloudformation, Heat, etc.

Ansible, Chef, Puppet, etc.

Boto, fog, apache-libcloud, etc.

Sample project

ဤ sample project အတွက် terraform ဖြင့် aws ၏ Ec2 instance တစ်လုံးကို vpc, cidr, subnetting, security group မပါသေးဘဲ ရိုးရိုး instance တည်ဆောက်ပုံအခြေခံကိုဖော်ပြသွားပါမည်။ Lab အတွက်ပြင်ဆင်ရန် —

Information gathering and preparation

AWS ကိုအသုံးပြုနိုင်ရန် aws account တစ်ခုရှိရပါမည်။ Access key အတွက် aws ၏ Identity and Access Management (IAM) မှ access key အသစ်ပြုလုပ်ခြင်း (သို့) key တစ်ခုခု ရှိထားရမည်။ အသုံးပြုမည့် resource များ၏ Region, EC2 ၏ ami-id, instance-type, keypair စသည့် information များကို စုစည်းထားရပါမည်။

Code များကိုရေးရန် Visual Studio Code ကဲ့သို့သော IDE တစ်ခုခုကိုအသုံးပြုပြီး၊ terraform extension ကိုလည်းထည့်သွင်းထားရပါမည်။

ထို့နောက် Project folder တစ်ခုပြီးလုပ်ပြီး၊ ၄င်း folder ၏ အထဲတွင် main.tf အမည်ရှိသော config file (C:\project1\main.tf) တစ်ခုကို ပြုလုပ်ပါ။

Writing in config file

ထိုconfig fileအထဲတွင် terraform ၏ document များတွင်ဖော်ပြထားသည့်အတိုင်း ‌အောက်ပါအချက်များကိုထည့်ပါ။

# Config for Provider
provider "aws" {
region = "ap-southeast-1"
access_key = "AKIA2ZBPTGVFU6BDOM6P"
secret_key = "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"
}

အထက်ပါ config file ၏ provider block တွင် provider “aws” ကိုသုံးပြုထားပြီး location ကို “‌ap-southeast-1” region ကိုအသုံးပြုထားသည်။ Access keys များကို terraform config ထဲတွင် paste ထည့်ပါ။ Resource ‌များကိုသတ်မှတ်ရန်အတွက်

resource ‘<provider>_<resource_type>’ ‘name’ {
config option ....
key = value
}

စသည့် ပုံစံဖြင် resources များကိုထည့်သွင်းရသည်။ Provider သည် aws, azure စသည့် provider တစ်ခုခုဖြစ်ပြီး၊ resource type သည် instance ကဲ့သို့သော resource အမျိုးအစားများဖြစ်ကာ၊ name သည် အဓိပ္ပါယ်ရှိသော အမည်တစ်ခုခုကို သုံးနိုင်သည်။ ထို့နောက်{} တွန့်ကွင်းထဲတွင် key-value တန်းဖိုးများဖြင့် resource အတွက် configure option များကိုရေးရသည်။

#config for resource
resource "aws_instance" "my-first-server" {
ami = "ami-0d058fe428540cd89a"
instance_type = "t2.micro"

tags = {
Name = "test-server"
}
}

code အပြည့်အစုံမှာ —

provider "aws" {
region = "ap-southeast-1"
access_key = "AKIA2ZBPTGVFU6BDOM6P"
secret_key = "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"
}
resource "aws_instance" "my-first-server" {
ami = "ami-0d058fe428540cd89a"
instance_type = "t2.micro"

tags = {
Name = "test-server"
}
}

Using CLI command

Terminal မှတစ်ဆင့် Terraform project floder ကို၀င်ထားရမည်။ ထို့နောက် terraform init ကိုရိုက်ထည့်ရမည်။

terraform init 

Terraform init သည် config ဖိုင်နဲ့ provider information များကို ဖတ်ပြီး AWS APIကိုချိတ်ဆက်ရန်အတွက်လိုအပ်သည့် plugin များ ကို download လုပ်ပေးသည်။ ထို့နောက် terraform plan ကိုရိုက်ထည့်ရမည်။

terraform plan 

Terraform plan သည် config file အတွင်း‌ရေးထားသည့် များကို current state နဲ့ desired အပေါ် resources များကို ထပ်ထည့်ခြင်း၊ ဖြုတ်ခြင်းများစသည့် adjustment များကို စိစစ်ပေးပြီး (+ green)create, (~orange)modify, (- red) delete စသည်ဖြင့် ဖော်ပြပေးကာ၊ Desired အတိုင်းဖြစ်အောင် Execute Plan ချမှတ်ပေးသည်။ ထို့နောက် terraform apply ကိုရိုက်ထည့်ရမည်။

terraform apply

Terraform apply သည် ချမှတ်ထားသော execute plan များအတိုင်း ဆောင်ရွက် (execute)ပေးသည်။ Terrform ကို descirbed များအတိုင်း action ကို လုပ်ဆောင်ခိုင်းမလားဟုမေးပါက၊ “Yes” ကိုရိုက်ထည့်ကာ Enter နှိပ်ပါ။

Process များပြီးသွားပါက Amazon ၏ web စာမျက်နှာရှိ EC2 Dashboard တွင် ၀င်ရောက်ကြည့်ရှုပါလျှင်၊ EC2 instance တစ်လုံး တည်ဆောက်ပေးကြောင်း တွေ့ရမည်။

Terraform refresh comment ဖြင့် Current state တွင်ရှိ infrastructure provider ၏ information ကို qurrey ရယူနိုင်သည်။

terraform refrash

ပြုလုပ်ထားသော instance ကိုပြန်ဖျက်လိုပါက၊ terraform destory ကိုရိုက်ထည့်ရမည်။ EC2 သည်လည်း Terminated ဖြစ်သွားပါမည်။

terraform destroy

ဤရိုးရှင်းတဲ့ ဥပမာလေးကိုနားလည်သွားပြီဆိုရင် ဆက်လက်ပြီး vpc, subnetting, security group တို့နဲ့တွဲသုံးတာလေးတွေကို ဆက်လုပ်သွားနိုင်မှာပါ။

နိဂုံးချုပ်

နောက်ဆုံးအထိဖတ်ပေးတဲ့အတွက် ကျေးဇူးတင်ပါတယ်။ အ‌ကြောင်းအရာအများစုကို တိုက်ရိုက်ဘာသာပြန်ထားသော်လည်း၊တချို့ကိုသင့်တော်သလိုပြန်ရေးထားပါသည်။ အကျိုးအမြတ်အတွက်မဟုတ်ဘဲ ‌ပညာရေးအတွက်အထောက်အကူဖြစ်စေရန်သာရည်ရွယ်ပါသည်။ အမှားများပါပါက ထောက်ပြပေးဖို့ တောင်းဆိုလိုပါတယ်။

ယခုဖော်ပြထားသော terraform အကြောင်းအရာများသည် terraformကို စတင်လေ့လာလိုသူများအတွက်အထောက်အကူပြုနိုင်မည်ဟု ယုံကြည်ပါသည်။ Terraform ကိုမိတ်ဆက်ရုံသာဖော်ပြထားသဖြင့် ကျန်ရှိသော variables, meta-arguments စသည်ဖြင့် တခြားလုပ်ဆောင်မှုများကို အ‌သေးစိတ်လေ့လာစရာများစွာကျန်ရှိနေပါသည်။

ထပ်မံလေ့လာနိုင်ရန်လည်း https://www.terraform.io/ ၏ စာများနှာတွင် Documents များ၀င်ဖတ်ခြင်း၊ တခြား tutorials site များမှ tutorial များကိုလိုက်လုပ်ခြင်းဖြင့် အသိပညာနှင့် ကျွမ်းကျင်မှုများတိုးတက်ပြီး၊ ရည်မှန်းထားသော အောင်မြင်မှုများကိုရနိုင်ကြပါစေ။

Online Sources:

terraform — https://www.terraform.io/docs/language/files/index.html

freeCodeCamp — https://www.youtube.com/channel/UC2sYgV-NV6S5_-pqLGChoNQ

TechWorld with Nanahttps://youtu.be/l5k1ai_GBDE

KodeKloud — https://youtu.be/YcJ9IeukJL8

--

--

suum (RHCE| CC-ISC2| NSE3| AZ-900)

စာရေးသားခြင်းဟာ အသိမြင်ကိုဖလှယ်ခြင်းနဲ့ အတွေးအမြင်ကို ဖွင့်တဲ့တံခါးလို့ခံယူပါတယ်။ စာပေတွေဟာ တူညီတဲ့ခရီးကိုလာမယ့်သူတွေအတွက် ပိုပြီးခရီးတွင်စေမယ်လို့ ယုံကြည်ပါတယ်