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:
Buka terminal komputer
Pastikan
tfenv
sudah terinstall. Lihat panduan instalasi pada https://github.com/tfutils/tfenv#installationBuat 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
Buat berkas
providers.tf
dengan isi sebagai berikutterraform { required_version = "= 1.1.0" required_providers { aws = { source = "hashicorp/aws" version = "3.72.0" } } } provider "aws" { region = "ap-southeast-3" }
Buat berkas
main.tf
dengan isi seperti di bawahmodule "backend" { source = "ringanta/backend/aws" version = "1.0.0" name = "backend-kerangjang-s3" }
Gunakan versi baris perintah Terraform yang sesuai dengan proyek Terraform
tfenv install min-required tfenv use min-required
Inisialisasi proyek Terraform
terraform init
Kalkulasi dan cek kembali rencana eksekusi proyek Terraform
terraform plan -out=tfplan.out
Terapkan rencana eksekusi yang telah ditinjau sebelumnya
terraform apply tfplan.out
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.