TeknoCerdas.com – Salam cerdas untuk kita semua. Terraform adalah salah satu software Infrastructure as Code (IaC) yang paling populer saat ini. Dukungan untuk berbagai vendor cloud dan komunitas yang besar membuatnya pilihan yang tepat untuk mengelola kode infrastruktur. Kali ini kita akan mencoba install Terraform pada macOS dan Linux.
Jika berbicara Terraform maka ada dua terminologi penting yang perlu dipahami yaitu Terraform CLI dan Terraform Cloud. Jika menyebut Terraform biasanya itu akan mengacu pada Terraform CLI. Sedangkan Terraform Cloud adalah layanan tambahan dari HashiCorp untuk memudahkan kolaborasi tim dan manajemen state dari Terraform itu sendiri.
Terraform CLI sifatnya open source sehingga anda dapat melihat source codenya. Terraform CLI dibangun menggunakan bahasa pemrograman Go.
Baca Juga
Membuat Amazon EC2 Instance dengan Terraform
Download Terraform CLI
Untuk mulai menggunakan Terraform langkah pertama adalah mendownload Terraform CLI. Untuk mendownload silahkan kunjungi URL dan pilih OS sesuai yang anda gunakan. Pada contoh ini saya menggunakan macOS.
https://www.terraform.io/downloads.html
Versi Terraform yang digunakan pada tutorial ini adalah Terraform v0.15.4. File akan didownload ke direktori Downloads.
$ curl 'https://releases.hashicorp.com/terraform/0.15.4/terraform_0.15.4_darwin_amd64.zip' -o ~/Downloads/terraform_0.15.4_darwin_amd64.zip
Kita akan menginstalnya di /usr/local/bin
.
$ unzip ~/Downloads/terraform_0.15.4_darwin_amd64.zip -d /usr/local/bin/
Jalankan perintah terraform --version
untuk memastikan Terraform CLI bisa digunakan.
$ terraform --version
Terraform v0.15.4
on darwin_amd64
Install Terraform Provider
Untuk berinteraksi dengan layanan dari masing-masing cloud provider Terraform menggunakan konsep Provider, bisa disamakan juga dengan istilah Plugin.
Terraform memiliki beberapa provider resmi artinya provider tersebut didevelop langsung oleh HashiCorp selaku pengembang Terraform. Ada juga yang dikembangkan oleh pihak vendor itu sendiri, provider ini disebut verified provider.
Instalasi provider sebenarnya dilakukan Terraform secara otomatis ketika mendifiniskan provider yang digunakan pada file konfigurasi Terraform. Berikut ini adalah contohnya, misal pada sebuah direktori dibuat konfigurasi dengan nama file main.tf
dan isinya sebagai berikut
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.42.0"
}
}
}
provider "aws" {
region = "ap-southeast-1"
}
Untuk pertama kali maka perlu dijalankan terraform init
pada direktori tersebut.
$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 3.42.0"...
- Installing hashicorp/aws v3.42.0...
- Installed hashicorp/aws v3.42.0 (signed by HashiCorp)
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
Terraform akan otomatis mendownload binary provider AWS pada direktori .terraform
. Hal itu dapat dilhat dengan perintah berikut.
$ ls -lR .terraform
total 0
drwxr-xr-x 3 rioastamal wheel 96B May 28 19:59 providers
.terraform/providers:
total 0
drwxr-xr-x 3 rioastamal wheel 96B May 28 19:59 registry.terraform.io
.terraform/providers/registry.terraform.io:
total 0
drwxr-xr-x 3 rioastamal wheel 96B May 28 19:59 hashicorp
.terraform/providers/registry.terraform.io/hashicorp:
total 0
drwxr-xr-x 3 rioastamal wheel 96B May 28 19:59 aws
.terraform/providers/registry.terraform.io/hashicorp/aws:
total 0
drwxr-xr-x 3 rioastamal wheel 96B May 28 19:59 3.42.0
.terraform/providers/registry.terraform.io/hashicorp/aws/3.42.0:
total 0
drwxr-xr-x 3 rioastamal wheel 96B May 28 19:59 darwin_amd64
.terraform/providers/registry.terraform.io/hashicorp/aws/3.42.0/darwin_amd64:
total 420416
-rwxr-xr-x 1 rioastamal wheel 196M May 28 19:59 terraform-provider-aws_v3.42.0_x5
Untuk selanjutnya anda dapat membaca bagaimana menggunakan masing-masing provider pada halaman berikut.
https://registry.terraform.io/browse/providers
Shared File Provider untuk Banyak Project
Terraform memiliki konsep jika sebuah project haruslah independen dan dapat dicopy atau dipindah ke mesin lain dengan mudah. Oleh karenanya Terraform menyimpan file binary provider pada direktori .terraform
yang berada satu direktori dengan file-file konfigurasi.
Masalah muncul jika kita membuat banyak project katakanlah 10 project Terraform. Berarti setiap direktori tersebut menyimpan salinan dari file binary provider. Kita ambil contoh provider AWS yang ukurannya mendekati 200MB berarti jika kita memiliki 10 project maka akan menghabiskan 2GB. Sangat tidak efisien.
Terraform CLI memiliki konsep shared provider yaitu satu provider yang digunakan bersama. Konsep ini menggunakan metode Hardlink bukan Symlink. Kita harus membuat sebuah direktori dengan struktur yang mirip dengan yang ada di direktori .terraform
tapi kita letakkan pada ~/.terraform.d/plugins
yaitu di $HOME direktori.
Baca Juga
Shell Tips: Perbedaan Symlink dan Hardlink
Pada contoh ini saya melakukan shared untuk provider AWS versi 3.42.0 pada macOS. Namun konsep ini juga berlaku di Linux.
$ mkdir -p ~/.terraform.d/plugins/registry.terraform.io/hashicorp/aws/3.42.0/darwin_amd64/
Kemudian anda dapat meletakkan binary AWS provider pada direktori tersebut. Anda dapat menyalin binary dari project yang sudah ada atau mendownload dari halaman https://releases.hashicorp.com/.
Pada contoh ini saya mendownload dari website HashiCorp.
$ curl https://releases.hashicorp.com/terraform-provider-aws/3.42.0/terraform-provider-aws_3.42.0_darwin_amd64.zip -o ~/Downloads/terraform-provider-aws_3.42.0_darwin_amd64.zip
$ unzip ~/Downloads/terraform-provider-aws_3.42.0_darwin_amd64.zip -d ~/.terraform.d/plugins/registry.terraform.io/hashicorp/aws/3.42.0/darwin_amd64/
Untuk mencobanya buat project baru dan gunakan perintah terraform ini
untuk melakukan inisialiasi provider.
$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 3.42.0"...
- Installing hashicorp/aws v3.42.0...
- Installed hashicorp/aws v3.42.0 (unauthenticated)
[...CUT...]
Jika anda melakukan ls
direktori .teraform
pada direktori aktif project maka akan terdapat file binary provider AWS. Untuk membuktikan bahwa file yang ada didirektori .terraform
dan ~/.terraform.d/plugins/
adalah file yang sama, kita akan harus melihat nomor inode file tersebut.
$ ls -hi .terraform/providers/registry.terraform.io/hashicorp/aws/3.42.0/darwin_amd64/terraform-provider-aws_v3.42.0_x5 \
~/.terraform.d/plugins/registry.terraform.io/hashicorp/aws/3.42.0/darwin_amd64/terraform-provider-aws_v3.42.0_x5
8632960385 .terraform/providers/registry.terraform.io/hashicorp/aws/3.42.0/darwin_amd64/terraform-provider-aws_v3.42.0_x5
8632960385 /Users/rioastamal/.terraform.d/plugins/registry.terraform.io/hashicorp/aws/3.42.0/darwin_amd64/terraform-provider-aws_v3.42.0_x5
Terlihat dua file tersebut memiliki nomor inode yang sama yaitu 8632960385. Dengan demikian meskipun anda memiliki 100 project terraform dengan AWS provider maka hanya menggunakan 1 binary file provider saja.