Praktik terbaik untuk menggunakan DM Convert

Praktik terbaik untuk melakukan konversi ke Terraform

Status

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

Setelah Anda 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 koleksi resource.

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

Untuk sebagian besar kasus penggunaan, sebaiknya Anda menggunakan modul yang dipublikasikan.

Membuat modul kustom

  1. Setelah Anda mengonversi konfigurasi, identifikasi resource mana yang ingin Anda pindahkan ke dalam modul.

  2. Pindahkan konfigurasi resource tersebut ke dalam 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 melakukan inisialisasi 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 pemindahan 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 Anda 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 Anda 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 melakukan inisialisasi 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 dengan konfigurasi, Anda mungkin melihat perbedaan yang disorot dalam output saat menjalankan perintah.

Aktuasi

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

Jika ingin mem-bootstrap pembuatan pemicu dan menyederhanakan autentikasi, Anda dapat memilih untuk menggunakan cetak biru Cloud Build Workspace.

Struktur

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