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:
Buat modul kustom dari resource yang diekspor oleh DM Convert. Hal ini memberi Anda fleksibilitas paling besar.
Gunakan modul yang dipublikasikan dari koleksi modul resmi Google Cloud atau registry Terraform.
Untuk sebagian besar kasus penggunaan, sebaiknya Anda menggunakan modul yang dipublikasikan.
Membuat modul kustom
Setelah Anda mengonversi konfigurasi, identifikasi resource mana yang ingin Anda pindahkan ke dalam modul.
Pindahkan konfigurasi resource tersebut ke dalam direktori modul, dan konversikan variabel yang diperlukan menjadi parameter.
Contoh berikut menunjukkan cara memindahkan
google_bigquery_dataset
dangoogle_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 }
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" }
Untuk melakukan inisialisasi modul lokal, jalankan perintah berikut:
terraform init
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).
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
Setelah Anda mengonversi konfigurasi, identifikasi modul yang dipublikasikan dan resource yang ingin Anda pindahkan ke dalamnya.
Identifikasi opsi konfigurasi untuk modul dengan membaca dokumentasi modul.
Buat instance modul yang dikonfigurasi ke konfigurasi resource Anda saat ini.
Misalnya, jika Anda ingin memindahkan
google_bigquery_dataset
dangoogle_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" }, } ] }
Untuk melakukan inisialisasi modul lokal, jalankan perintah berikut:
terraform init
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"]'
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.