mengenal dan belajar terraform untuk aws pada linux

1
187

halo sobat sekolahlinux, jika sebelumnya kita membahas tentang ansible sebagai konfigurasi management nah sekarang kita akan membahas terraform untuk keperluan membangun env di aws, oke langsung saja

pertama kita install dulu terraform pada linux os yang kita gunakan, disini saya menggunakan linux ubuntu 16.04

download package binary terraform terbaru di sini https://www.terraform.io/downloads.html

jika sudah di download extract package nya

letakkan file binary terraform dan pindahkan hasil extract ke foder /usr/local/bin/

oke sampai sini proses installasi sudah selesai sekarang kita akan masuk ke pembahasan bagaimana cara menggunakan terraform juga struktur layout filenya.

pertama kita akan melihat struktur file terraform yang saya gunakan yang ada dalam folder /home/ubuntu/terraform/

pada layout file diatas jelas sekali kalau saya membuat feature ec2 di aws menjadi sebuah module, kenapa harus dibuat module, agar jika kedepannya ada project untuk membuat template terraform lagi saya bisa menggunakan module tersebut, tanpa harus panjang-panjang ngetik lagi, nah berikut dibawah ini isi dari tiap file diatas

 

pertama mari kita lihat isi file dari module ec2_instance

pada file ./aws/modules/ec2_instance/main.tf

lalu pada file ./aws/modules/ec2_instance/outputs.tf isinya seperti dibawah

lalu pada file ./aws/modules/ec2_instance/variables.tf isinya seperti dibawah

 

selanjutnya mari kita lihat isi file dari template sekolahlinux-terraform

pada file ./aws/sekolahlinux-terraform/main.tf

lalu pada file ./aws/sekolahlinux-terraform/provisioning/ansible-deploy.sh

lalu pada file ./aws/sekolahlinux-terraform/provisioning/userdata.txt

lalu pada file ./aws/sekolahlinux-terraform/provisioning/ansible_hosts

 

penjelasan pada template sekolahlinux-terraform

didalam terraform terdapat 3 type variable yaitu strings, maps, lists, boolean detailnya kamu bisa baca di link type_variable_terraform , berikut dibawah ini paramater yang harus kamu rubah beserta penjelasannya pada template terraform untuk pembuatan instance di aws

instance_count
variable instance_count untuk menentukan berapa jumlah instance yang ingin kamu buat dalam sekali execute pada contoh script diatas saya memberikan value 2, yang menandakan saya ingin membuat sebanyak 2 instance

tags_name
variable tags_name untuk menentukan Tag Name pada instance aws yang akan kamu buat

tags_hostname
variable tags_hostname untuk menentukan Tag Hostname pada instance aws, juga digunakan untuk keperluan generate ansible host, yang mana value dari tag ini akan digunakan sebagai inventory_hostname pada host ansible

tags_title_number
variable tags_title_number untuk menentukan angka atau nomer dibelakang value dari tags_name, misal jika kita mengisi value tags ini dengan angka 1 dengan jumlah instance_count 2 makanya numbering akan dimulai dari angka satu seperti ini (webserver-sekolahlinux1, webserver-sekolahlinux2) namun jika tags_title_number dimulai dari angka 7 maka hasilnya akan seperti berikut (webserver-sekolahlinux7, webserver-sekolahlinux8)

ami
variable ami digunakan untuk menentukan ami mana yang akan kita gunakan, pada value ami diatas saya menggunakan ami ubuntu dengan id ami-81cefcfd dan nama ami nya ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-20180522

instance_type
variable instance_type digunakan untuk menentukan size resource untuk instance aws yang kita gunakan, untuk melihat list type instance kalian bisa ke link ini => instance_type aws

key_name
varibale key_name digunakan untuk menentukan ssh_pubkey existing mana yang akan kita inject kedalam instance tersebut

monitoring
variable monitoring memiliki type bolean, jadi disini kamu hanya bisa memberi value true atau false, tag ini sendiri berguna untuk mengaktifkan feature moniroting aws pada instance tersebut atau tidak

vpc_security_group_ids
variable vpc_security_group_ids digunakan untuk menentukan secgroup pada instance tersebut, value harus berisi secgroup_id, bagaima jika ada lebih dari 1 vpc secgroup, kalian bisa mengisi seperti berikut [“sg-3c166256”, “sg-1c916326”]

subnet_id
variable subnet_id digunakan untuk menentukan vpc & subnet mana yang akan kita gunakan untuk instance yang akan kita buat

associate_public_ip_address
variable associate_public_ip_address memiliki type bolean, dan variable ini digunakan untuk menentukan apakah instance kamu ingin diberikan dynamic public_ip atau tidak

user_data
variable user_data digunakan untuk menyisipkan script_bash yang akan dijalankan didalam os intance yang akan kita buat saat pertama kali instance tersebut hidup, misal kita ingin mematikan feature autoupdate saat sebuah instance dengan os ubuntu berjalan pertama kali

root_block_device
variable root_block_device digunakan untuk menentukan size root disk os dari instance yang akan kita buat, untuk variable ini typenya adalah list didalamnya ada sub default variable volume_size pada variable ini kamu tidak dapat sembarangan menambahkan sub variable, hanya sub default variable dari variable root_block_device saja yang bisa kamu tambahkan, contoh seperti dibawah

tags
variable tags digunakan untuk menyisipkan sub tags variable tambahan diluar dari tags default di module (Name, Hostname) yang sudah dibuat, disini kamu bisa menambahkan sub tags, sesuai keinginan kamu, type variable tags adalah maps

 

Provisioning terraform AWS

tujuan dari provisioning pada terraform adalah untuk melakukan automasi konfigurasi lebih lanjut terhadap instance yang sudah selesai dibuat dengan terraform

buka ./aws/sekolahlinux-terraform/main.tf dan rubah paramater dibawah sesuai dengan project yang akan dibuat

tujuan dari provisioning diatas adalah untuk generate file ./terraform/aws/sekolahlinux-terraform/provisioning/ansible_hosts berdasarkan dari ip_address baik public ataupun private yang dihasilkan dari pembuatan instance dengan terraform, lalu setelahnya akan menjalankan script ansible-deploy.sh untuk melakukan provisioning dengan aws

 

How to run terraform

add aws access_key & secret_access_key
selanjutnya export varibale dibawah pada host tempat kita akan menjalankan terraform template, untuk mendapatkan access_key dan secret_access_key kamu bisa mengikuti link berikut https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html lalu jika sudah dapat ikuti perintah dibawah, ganti XXXXX dengan access_key dan secret_access_key yang sudah kita dapatkan

terraform init
jalankan perintah terraform init untuk melakukan download plugin terraform aws dan juga melakukan mapping terhadap module

terraform plan
jalankan perintah terraform plan untuk melihat/mereview template terraform sebelum dilakukan implementasi di aws

terraform apply
jalankan perintah terraform apply untuk mengeksekusi template terraform dan mengimplementasikan ke aws

terraform destroy
jalankan perintah terraform destroy untuk destroy seluruh instance aws yang kalian buat menggunakan template terraform aws

 

Untuk lebih detailnya kalian bisa mengunduh filenya di github sekolahlinux

untuk download module melalui terraform module bisa ke link dibawah

lalu untuk detail functions yang digunakan pada terraform kalian bisa lihat di sini

jika ada yang ingin kalian tanyakan silahkan comment dibawah atau comment di github repo sekolahlinux ya… terimakasih 🙂

1 COMMENT

LEAVE A REPLY

Please enter your comment!
Please enter your name here