“Managing Terraform State”
Daftar Isi
Pengantar
Terraform harus menyimpan status tentang infrastruktur dan konfigurasi terkelola Anda. Status ini digunakan oleh Terraform untuk memetakan sumber daya dunia nyata ke konfigurasi Anda, melacak metadata, dan meningkatkan kinerja untuk infrastruktur besar. Status ini disimpan secara default dalam file lokal bernama terraform.tfstate, tetapi juga dapat disimpan dari jarak jauh, yang berfungsi lebih baik di lingkungan tim.
Terraform menggunakan status lokal ini untuk membuat rencana dan membuat perubahan pada infrastruktur Anda. Sebelum operasi apa pun, Terraform melakukan penyegaran untuk memperbarui status dengan infrastruktur nyata.
Tujuan utama status Terraform adalah untuk menyimpan binding antara objek dalam sistem jarak jauh dan instance sumber daya yang dideklarasikan dalam konfigurasi Anda. Saat Terraform membuat objek jarak jauh sebagai respons terhadap perubahan konfigurasi, Terraform akan merekam identitas objek jarak jauh tersebut terhadap instance sumber daya tertentu dan kemudian berpotensi memperbarui atau menghapus objek itu sebagai respons terhadap perubahan konfigurasi di masa mendatang.
Persyaratan
Aktifkan Cloud Shell
Tujuan dari Terraform state
Status adalah persyaratan yang diperlukan agar Terraform berfungsi. Orang terkadang bertanya apakah Terraform dapat bekerja tanpa status atau tidak menggunakan status dan hanya memeriksa sumber daya cloud di setiap proses. Dalam skenario di mana Terraform mungkin dapat lolos tanpa status, hal itu akan memerlukan pemindahan sejumlah besar kompleksitas dari satu tempat (keadaan) ke tempat lain (konsep penggantian). Bagian ini akan membantu menjelaskan mengapa status Terraform diperlukan.
Membuat Backend
Buat Local Backend
- Buat file main.tf
touch main.tf
- Cek project ID
gcloud config list --format 'value(core.project)'
- Buka Open Editor
- Tambahkan Cloud Storage bucket resource code pada
main.tf
provider "google" { project = "# REPLACE WITH YOUR PROJECT ID" region = "us-central-1" } resource "google_storage_bucket" "test-bucket-for-state" { name = "# REPLACE WITH YOUR PROJECT ID" location = "US" uniform_bucket_level_access = true }
- Tambahkan code local backend pada main.tf
terraform { backend "local" { path = "terraform/state/terraform.tfstate" } }
- initialize dan apply terraform
terraform init terraform apply terraform show
Tambahkan Cloud Storage backend
- Edit main.tf
terraform { backend "gcs" { bucket = "# REPLACE WITH YOUR BUCKET NAME" prefix = "terraform/state" } }
- Initialize
terraform init -migrate-state
Refresh state
- Kembali ke bucket , klik nama bucket lalu pilih Show info panel
- Klik Label -> Click Add Label. Set the Key =
key
and Value =value
- save
- Refresh terraform
terraform refresh terraform show
Clean up Terraform
- Edit main.tf
terraform { backend "local" { path = "terraform/state/terraform.tfstate" } }
- Initialize
terraform init -migrate-state
- Tambahkan value destroy pada main.tf
resource "google_storage_bucket" "test-bucket-for-state" { name = "qwiklabs-gcp-03-c26136e27648" location = "US" uniform_bucket_level_access = true force_destroy = true }
- Jalankan
terraform apply
- destroy
terraform destroy
Import Terraform configuration
Buat Docker container
- Buat docker
hashicorp-learn
docker run --name hashicorp-learn --detach --publish 8080:80 nginx:latest
- Cek Docker
docker ps
Import container kedalam Terraform
- Clone repository
git clone https://github.com/hashicorp/learn-terraform-import.git
- Ganti folder
cd learn-terraform-import
- initialize
terraform init
- Open
learn-terraform-import/main.tf
- Kemudian pada bagian provider
provider "docker" { # host = "npipe:////.//pipe//docker_engine" }
- Open
learn-terraform-import/docker.tf
- Edit docker.tf
resource "docker_container" "web" {}
- cek docker
docker ps
- Import docker
terraform import docker_container.web $(docker inspect -f {{.ID}} hashicorp-learn)
- Cek terraform list
terraform show
- Buat Konfigurasi
terraform plan
- Copy terraform state
terraform show -no-color > docker.tf
- Jalankan lagi command berikut
terraform plan
- Remove beberapa atribute
resource "docker_container" "web" { image = "sha256:87a94228f133e2da99cb16d653cd1373c5b4e8689956386c1c12b60a20421a02" name = "hashicorp-learn" ports { external = 8080 internal = 80 ip = "0.0.0.0" protocol = "tcp" } }
- Jalankan perintah berikut
terraform plan
- Apply perubahan
terraform apply
Buat image resource
- Buat image , ganti IMAGE-ID dengan yang ada di docker.tf
docker image inspect <IMAGE-ID> -f {{.RepoTags}}
- Tambahkan kode berikut pada docker.tf
resource "docker_image" "nginx" { name = "nginx:latest" }
- Buat image konfig
terraform apply
- Edit pada bagian
docker_container.web
resource "docker_container" "web" { image = docker_image.nginx.latest name = "hashicorp-learn" ports { external = 8080 internal = 80 ip = "0.0.0.0" protocol = "tcp" } }
- Jalankan command berikut
terraform apply
Manage container dengan Terraform
- Edit docker.tf
resource "docker_container" "web" { name = "hashicorp-learn" image = docker_image.nginx.latest ports { external = 8081 internal = 80 ip = "0.0.0.0" protocol = "tcp" } }
- Apply perubahan
terraform apply
- Cek docker
docker ps
Destroy infrastructure
- Destroy
terraform destroy
- Validated
docker ps --filter "name=hashicorp-learn"
Penutup
Sahabat Blog Learning & Doing demikianlah penjelasan mengenai Managing Terraform State. Semoga Bermanfaat . Sampai ketemu lagi di postingan berikut nya