Blog Personal Inganta

Berbagi pengetahuan untuk memperkaya pemahaman

15 Jan 2022

Mengelola Berkas Keadaan Jarak Jauh Terraform Menggunakan Layanan AWS

Terraform menyimpan keadaan (state) seluruh sumber daya yang dikelola secara mandiri. Informasi keadaan ini menjadi proxy bagi Terraform untuk mengetahui kondisi nyata dari sumber daya yang dikelola. Konsep tempat penyimpanan keadaan ini dikenal dengan nama backend pada Terraform. Terraform menggunakan berkas lokal sebagai setelan bawaan untuk backend Terraform. Selain berkas lokal, Terraform mendukung tempat penyimpanan keadaan jarak jauh seperti AWS S3, PostgreSQL, dll. Daftar lengkap penyimpanan keadaan yang didukung oleh Terraform bisa dilihat pada halaman https://www.terraform.io/language/settings/backends.

Penggunaan berkas lokal sebagai media penyimpanan keadaan mempermudah kita memulai penggunaan Terraform. Kita bisa menulis konfigurasi Terraform dengan cepat dan mengeksekusi konfigurasi tersebut tanpa perlu mengkonfigurasi media penyimpanan keadaan Terraform terlebih dahulu. Keadaan menjadi lebih sulit ketika kita ingin memisahkan antara tempat penulisan kode Terraform dan tempat pengeksekusian kode tersebut. Kompleksitas semakin meningkat ketika proyek Terraform dikerjakan oleh beberapa orang secara bersama. Kita perlu memastikan bawah kode yang ditulis oleh setiap orang akan dieksekusi secara berurut dan tidak saling tumpang-tindih satu sama lain.

Untuk mengatasi masalah-masalah yang dijabarkan di atas, kita bisa menggunakan layanan AWS S3 sebagai media penyimpanan keadaan Terraform. Terraform memiliki dukungan bawaan untuk menggunakan S3 sebagai media penyimpanan keadaan jarak jauh. Ketika menggunakan S3 sebagai media penyimpanan keadaan Terraform, kita perlu menambahkan fungsionalitas lainnya seperti mekanisme penguncian, pengelolaan versi, dan enkripsi. Kita bisa menggunakan layanan AWS DynamoDB dan AWS KMS untuk implementasi mekanisme penguncian dan enkripsi keadaan Terraform di AWS.

Membuat keranjang S3, tabel DynamoDB, dan kunci KMS untuk backend Terraform

Keranjang S3, tabel DynamoDB, dan kunci KMS merupakan 3 komponen penting dalam implementasi sistem backend Terraform yang handal. S3 menyediakan tempat penyimpanan keadaan jarak jauh yang tahan lama. Selain itu, S3 juga menyediakan mekanisme pengelolaan versi secara bawaan. Tabel DynamoDB menyediakan mekanisme penguncian ketika menggunakan keadaan jarak jauh Terraform. Berkas keadaan Terraform yang tersimpan di dalam keranjang S3 terenkripsi menggunakan kunci KMS sehingga memungkinkan kita untuk menyimpan nilai-nilai sensitive secara aman.

Kita bisa menggunakan Terraform untuk mengadakan komponen-komponen yang dibutuhkan sebagai bagian dari sistem backend jarak jauh Terraform. Proyek Terraform pengadaan sistem backend jarak jauh Terraform sebaiknya menggunakan berkas lokal sebagai media penyimpanan keadaan. Disarankan juga untuk menyimpan kode Terraform dan media penyimpanan keadaan ke dalam sistem pengelola versi seperti git.

Untuk mempermudah pembuatan sistem backend jarak jauh Terraform di AWS, kita bisa menggunakan modul ringanta/backend/aws. Berikut langkah-langkah yang bisa diikuti untuk membuat backend jarak jauh Terraform di AWS pada komputer Linux atau MacOS. Sebelum menjalankan perintah-perintah di bawah, pastikan kredensial dengan level administrator telah terpasang di komputer Anda:

  1. Buka terminal komputer

  2. Pastikan tfenv sudah terinstall. Lihat panduan instalasi pada https://github.com/tfutils/tfenv#installation

  3. Buat folder baru (misalkan namanya backend-terraform) untuk proyek Terraform, dan inisialisasi folder menjadi repositori Git.

    mkdir backend-terraform
    cd backend-terraform
    git init
    cat > .gitignore <<EOL
    .terraform
    tfplan.out
    EOL
    
  4. Buat berkas providers.tf dengan isi sebagai berikut

    terraform {
       required_version = "= 1.1.0"
    
       required_providers {
         aws = {
           source  = "hashicorp/aws"
           version = "3.72.0"
         }
       }
    }
    
    provider "aws" {
       region = "ap-southeast-3"
    }
    
  5. Buat berkas main.tf dengan isi seperti di bawah

    module "backend" {
      source  = "ringanta/backend/aws"
      version = "1.0.0"
       
      name = "backend-kerangjang-s3"
    }
    
  6. Gunakan versi baris perintah Terraform yang sesuai dengan proyek Terraform

    tfenv install min-required
    tfenv use min-required
    
  7. Inisialisasi proyek Terraform

    terraform init
    
  8. Kalkulasi dan cek kembali rencana eksekusi proyek Terraform

    terraform plan -out=tfplan.out
    
  9. Terapkan rencana eksekusi yang telah ditinjau sebelumnya

    terraform apply tfplan.out
    
  10. Simpan keseluruhan berkas ke dalam repositori Git

    git add .
    git commit -m 'Mulai proyek Terraform'
    

Proyek Terraform di atas akan menghasilkan sumber daya AWS di region Jakarta sebagai berikut:

  • Keranjang S3 dengan nama backend-kerangjang-s3 yang bertindak sebagai media peyimpanan keadaan jarak jauh Terraform.
  • Tabel DynamoDB dengan nama backend-kerangjang-s3-lock yang akan menyimpan kunci untuk mengakses backend Terraform.
  • Kunci KMS dengan nama alias terraform_s3_backend yang berguna untuk mengenkripsi berkas keadaan Terraform.

Menggunakan backend jarak jauh AWS Terraform

Berikut contoh proyek Terraform untuk menggambarkan penggunaan backend jarak jauh Terraform di AWS yang telah dibuat pada bagian sebelumnya.

terraform {
  required_version = "= 1.1.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "3.72.0"
    }
  }

  backend "s3" {
    bucket         = "backend-kerangjang-s3"
    key            = "demo-penggunaan-backend-tf.tfstate"
    region         = "ap-southeast-3"
    encrypt        = true
    kms_key_id     = "arn:aws:kms:ap-southeast-3::alias/terraform_s3_backend"
    dynamodb_table = "backend-kerangjang-s3-lock"
  }
}

resource "random_id" "this" {
  byte_length = 8
}

output "id" {
  value = random_id.this.hex
}

Proyek Terraform di atas akan menyimpan berkas keadaan Terraform pada lokasi demo-penggunaan-backend-tf.tfstate di dalam keranjang S3 backend-kerangjang-s3. Berkas tersebut akan dienkripsi menggunakan kunci KMS dengan nama alias terraform_s3_backend. Ketika diterapkan, proyek Terraform akan menghasilkan string acak sepanjang 16 karakter.

Kesimpulan

Pada tulisan ini dijabarkan cara pembuatan backend jarak jauh Terraform di AWS. Backend jarak jauh Terraform dibuat dengan menggunakan modul ringanta/backend/aws. Selain itu tulisan ini juga menunjukan bagaimana cara menggunakan backend jarak jauh Terraform yang telah dibuat sebelumnya.