Site icon Learning & Doing

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

touch main.tf
gcloud config list --format 'value(core.project)'
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
}
terraform {
  backend "local" {
    path = "terraform/state/terraform.tfstate"
  }
}
terraform init
terraform apply
terraform show

Tambahkan Cloud Storage backend

terraform {
  backend "gcs" {
    bucket  = "# REPLACE WITH YOUR BUCKET NAME"
    prefix  = "terraform/state"
  }
}
terraform init -migrate-state

Refresh state

terraform refresh
terraform show

Clean up Terraform

terraform {
  backend "local" {
    path = "terraform/state/terraform.tfstate"
  }
}
terraform init -migrate-state
resource "google_storage_bucket" "test-bucket-for-state" {
  name        = "qwiklabs-gcp-03-c26136e27648"
  location    = "US"
  uniform_bucket_level_access = true
  force_destroy = true
}
terraform apply
terraform destroy

Import Terraform configuration

Buat Docker container

docker run --name hashicorp-learn --detach --publish 8080:80 nginx:latest
docker ps

Import container kedalam Terraform

git clone https://github.com/hashicorp/learn-terraform-import.git
cd learn-terraform-import
terraform init
provider "docker" {
#   host    = "npipe:////.//pipe//docker_engine"
}
resource "docker_container" "web" {}
docker ps
terraform import docker_container.web $(docker inspect -f {{.ID}} hashicorp-learn)
terraform show
terraform plan
terraform show -no-color > docker.tf
terraform plan
resource "docker_container" "web" {
    image = "sha256:87a94228f133e2da99cb16d653cd1373c5b4e8689956386c1c12b60a20421a02"
    name  = "hashicorp-learn"
    ports {
        external = 8080
        internal = 80
        ip       = "0.0.0.0"
        protocol = "tcp"
    }
}
terraform plan
terraform apply

Buat image resource

docker image inspect <IMAGE-ID> -f {{.RepoTags}}
resource "docker_image" "nginx" {
  name         = "nginx:latest"
}
terraform apply
resource "docker_container" "web" {
    image = docker_image.nginx.latest
    name  = "hashicorp-learn"
    ports {
        external = 8080
        internal = 80
        ip       = "0.0.0.0"
        protocol = "tcp"
    }
}
terraform apply

Manage container dengan Terraform

resource "docker_container" "web" {
  name  = "hashicorp-learn"
  image = docker_image.nginx.latest
  ports {
    external = 8081
    internal = 80
    ip       = "0.0.0.0"
    protocol = "tcp"
  }
}
terraform apply
docker ps

Destroy infrastructure

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

Exit mobile version