Sunday, May 29, 2022
GCP Terraform

Managing Terraform State

Managing

“Managing Terraform State”

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
  • Buka Navigation menu, click Cloud Storage > Browser
  • Cek bucket terraform/state/default.tfstate

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

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
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
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

(Visited 17 times, 1 visits today)
Klik untuk berbagi dengan orang lain
Baca Juga :  Belajar Terraform di GCP

Similar Posts