Praktik terbaik untuk menggunakan DM Convert

Praktik terbaik untuk mengonversi ke Terraform

Negara Bagian

File status menyimpan informasi tentang resource yang dikelola Terraform. Secara default, Terraform menyimpan status secara lokal di disk. Jika menyimpan status dari jarak jauh, Anda dapat mengizinkan kolaborasi terdistribusi, melindungi informasi sensitif, dan menjalankan Terraform dalam integrasi berkelanjutan (CI).

Setelah mengonversi template Deployment Manager ke Terraform dan secara opsional mengimpor resource, sebaiknya ikuti langkah-langkah untuk menyimpan status dari jarak jauh di Cloud Storage.

Modul

Jika ingin mengurangi kompleksitas, menerapkan konsistensi, dan mendorong penggunaan kembali konfigurasi, Anda dapat menggunakan modul Terraform untuk mengenkapsulasi kumpulan resource.

Untuk menggunakan modul, Anda dapat melakukan salah satu hal berikut:

Untuk sebagian besar kasus penggunaan, sebaiknya gunakan modul yang dipublikasikan.

Membuat modul kustom

  1. Setelah mengonversi konfigurasi, identifikasi resource yang ingin dipindahkan ke modul.

  2. Pindahkan konfigurasi resource tersebut ke direktori modul, dan konversikan variabel yang diperlukan menjadi parameter.

    Contoh berikut menunjukkan cara memindahkan google_bigquery_dataset dan google_bigquery_table ke dalam modul:

    # bq-module/main.tf
    resource "google_bigquery_dataset" "bigquerydataset" {
      provider = google-beta
    
      default_table_expiration_ms = 36000000
      location = "us-west1"
      dataset_id = var.dataset_id
      project = var.project_id
    }
    
    resource "google_bigquery_table" "bigquerytable" {
      provider = google-beta
    
      labels = {
        data-source = "external"
        schema-type = "auto-junk"
      }
      dataset_id = var.dataset_id
      project = var.project_id
      table_id = var.table_id
    
      depends_on = [
        google_bigquery_dataset.bigquerydataset
      ]
    }
    
    # bq-module/variables.tf
    variable "project_id" {
      description = "Project ID"
      type = string
    }
    
    variable "dataset_id" {
      description = "Dataset ID"
      type = string
    }
    
    variable "table_id" {
      description = "Table ID"
      type = string
    }
    
  3. Dalam file main.tf yang diekspor, ganti konfigurasi asli dengan modul yang Anda buat.

    Contoh berikut menunjukkan penggantian ini menggunakan modul yang dibuat dalam contoh dari langkah sebelumnya.

    # main.tf
    module "bq" {
      source = "./bq-module"
    
      project_id = "PROJECT_ID"
      dataset_id = "bigquerydataset"
      table_id   = "bigquerytable"
    }
    
  4. Untuk menginisialisasi modul lokal, jalankan perintah berikut:

    terraform init
    
  5. Pindahkan status Terraform yang terkait dengan resource ke dalam instance modul.

    Untuk memindahkan modul dari contoh di langkah sebelumnya, jalankan perintah berikut:

    terraform state mv google_bigquery_dataset.bigquerydataset module.bq.google_bigquery_dataset.bigquerydataset
    terraform state mv google_bigquery_table.bigquerytable module.bq.google_bigquery_table.bigquerytable
    

    Untuk contoh ini, output dari tindakan tersebut adalah:

    Move "google_bigquery_dataset.bigquerydataset" to "module.bq.google_bigquery_dataset.bigquerydataset"
    Successfully moved 1 object(s).
    Move "google_bigquery_table.bigquerytable" to "module.bq.google_bigquery_table.bigquerytable"
    Successfully moved 1 object(s).
    
  6. Validasi bahwa tidak ada resource yang berubah, dengan menjalankan perintah berikut:

    terraform plan
    

    Berikut adalah contoh output yang Anda terima setelah menjalankan perintah:

    No changes. Your infrastructure matches the configuration.
    

Menggunakan modul yang dipublikasikan

  1. Setelah mengonversi konfigurasi, identifikasi modul yang dipublikasikan dan resource yang ingin Anda pindahkan ke dalamnya.

  2. Identifikasi opsi konfigurasi untuk modul dengan membaca dokumentasi modul.

  3. Buat instance modul yang dikonfigurasi ke konfigurasi resource saat ini.

    Misalnya, jika Anda ingin memindahkan google_bigquery_dataset dan google_bigquery_table ke dalam modul BigQuery resmi, contoh berikut menunjukkan tampilan modul Anda:

    module "bq" {
      source  = "terraform-google-modules/bigquery/google"
      version = "~> 5.0"
    
      project_id          = "PROJECT_ID"
      dataset_id          = "bigquerydataset"
      location            = "us-west1"
      deletion_protection = true
    
      tables = [
        {
          table_id           = "bigquerytable",
          friendly_name      = "bigquerytable"
          time_partitioning  = null,
          range_partitioning = null,
          expiration_time    = null,
          clustering         = [],
          schema             = null,
          labels = {
            data-source = "external"
            schema-type = "auto-junk"
          },
        }
      ]
    }
    
  4. Untuk menginisialisasi modul lokal, jalankan perintah berikut:

    terraform init
    
  5. Baca kode sumber modul untuk mengidentifikasi alamat resource dalam modul upstream dan membuat perintah move.

    terraform state mv google_bigquery_dataset.bigquerydataset  module.bq.google_bigquery_dataset.main
    terraform state mv google_bigquery_table.bigquerytable 'module.bq.google_bigquery_table.main["bigquerytable"]'
    
  6. Untuk melihat perubahan pada konfigurasi, jalankan perintah berikut:

    terraform plan
    

Jika modul yang dipublikasikan yang Anda pilih memiliki setelan default yang berbeda atau dikonfigurasi secara berbeda dari konfigurasi Anda, Anda mungkin melihat perbedaan yang ditandai dalam output dari menjalankan perintah.

Pengaktifan

Sebaiknya gunakan sistem continuous integration (CI), seperti Cloud Build, Jenkins, atau GitHub Actions, untuk mengotomatiskan Terraform dalam skala besar. Untuk informasi selengkapnya, buka artikel Mengelola infrastruktur sebagai kode dengan Terraform, Cloud Build, dan GitOps.

Jika ingin melakukan bootstrap pembuatan pemicu dan menyederhanakan autentikasi, Anda dapat memilih untuk menggunakan blueprint Ruang Kerja Cloud Build.

Struktur

Setiap konfigurasi yang dikonversi dari DM Convert adalah satu konfigurasi root yang dipetakan ke satu file status. Sebaiknya jangan siapkan satu file status untuk menyimpan resource dalam jumlah besar. Setelah mengonversi konfigurasi, sebaiknya pastikan konfigurasi baru Anda mengikuti praktik terbaik untuk modul root.