Praktik terbaik untuk mengonversi ke Terraform
Negara bagian/Provinsi
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 meningkatkan penggunaan kembali konfigurasi, Anda dapat menggunakan modul Terraform untuk merangkum kumpulan 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 tinggi.
Gunakan modul yang dipublikasikan dari koleksi modul resmi Google Cloudatau Terraform Registry.
Untuk sebagian besar kasus penggunaan, sebaiknya gunakan modul yang dipublikasikan.
Membuat modul kustom
Setelah mengonversi konfigurasi ,identifikasi resource yang ingin Anda pindahkan ke dalam modul.
Pindahkan konfigurasi resource tersebut ke direktori modul, dan konversi 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 menginisialisasi 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 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 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 saat ini.
Misalnya, jika Anda ingin memindahkan
google_bigquery_dataset
dangoogle_bigquery_table
ke 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 menginisialisasi 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 dari konfigurasi Anda, Anda mungkin melihat perbedaan yang ditandai dalam output dari menjalankan perintah.
Penggerak
Sebaiknya gunakan sistem continuous integration (CI), seperti Cloud Build, Jenkins, atau GitHub Actions, untuk mengotomatiskan eksekusi Terraform dalam skala besar. Untuk mengetahui 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 cetak biru Cloud Build Workspace.
Struktur
Setiap konfigurasi yang dikonversi dari DM Convert adalah konfigurasi akar tunggal yang dipetakan ke satu file status. Sebaiknya jangan menyiapkan satu file status untuk menyimpan sejumlah besar resource. Setelah mengonversi konfigurasi, sebaiknya pastikan konfigurasi baru Anda mengikuti praktik terbaik untuk modul root.