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:
Buat modul kustom dari resource yang diekspor oleh DM Convert. Dengan demikian, Anda memiliki fleksibilitas paling tinggi.
Gunakan modul yang dipublikasikan dari kumpulan modul resmi Google Cloudatau registry Terraform.
Untuk sebagian besar kasus penggunaan, sebaiknya gunakan modul yang dipublikasikan.
Membuat modul kustom
Setelah mengonversi konfigurasi, identifikasi resource yang ingin dipindahkan ke modul.
Pindahkan konfigurasi resource tersebut ke 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 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 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).
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 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 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.
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.