Install Terraform pada macOS dan Linux

3 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
Install Terraform macOS dan Linux
HashiCorp Terraform (Sumber: terraform.io)

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.