Best Practices für die Konvertierung in Terraform
Status
In der Statusdatei werden Informationen zu den Ressourcen gespeichert, die Terraform verwaltet. Standardmäßig speichert Terraform state lokal auf dem Laufwerk. Wenn Sie den Status remote speichern, können Sie die verteilte Zusammenarbeit zulassen, vertrauliche Informationen schützen und Terraform in Continuous Integration (CI) ausführen.
Nachdem Sie Ihre Deployment Manager-Vorlage in Terraform konvertiert und optional Ressourcen importiert haben, sollten Sie die Schritte zum Remote-Speichern des Status in Cloud Storage ausführen.
Module
Wenn Sie die Komplexität reduzieren, Konsistenz erzwingen und die Wiederverwendbarkeit Ihrer Konfiguration fördern möchten, können Sie Terraform-Module verwenden, um Ressourcensammlungen zu kapseln.
Wenn Sie Module verwenden möchten, haben Sie folgende Möglichkeiten:
Erstellen Sie ein benutzerdefiniertes Modul aus den von DM Convert exportierten Ressourcen. Dadurch sind Sie am flexibelsten.
Verwenden Sie ein veröffentlichtes Modul aus der offiziellen Module von Google Cloud oder aus der Terraform-Registry.
Für die meisten Anwendungsfälle empfehlen wir die Verwendung eines veröffentlichten Moduls.
Benutzerdefiniertes Modul erstellen
Nachdem Sie die Konfiguration konvertiert haben, identifizieren Sie die Ressourcen, die Sie in ein Modul verschieben möchten.
Verschieben Sie die Konfigurationen dieser Ressourcen in ein Modulverzeichnis und wandeln Sie die erforderlichen Variablen in Parameter um.
Das folgende Beispiel zeigt, wie
google_bigquery_dataset
undgoogle_bigquery_table
in ein Modul verschoben werden:# 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 }
Ersetzen Sie in der exportierten
main.tf
-Datei die ursprüngliche Konfiguration durch das von Ihnen erstellte Modul.Das folgende Beispiel zeigt diese Ersetzung mithilfe des Moduls, das im Beispiel aus dem vorherigen Schritt erstellt wurde.
# main.tf module "bq" { source = "./bq-module" project_id = "PROJECT_ID" dataset_id = "bigquerydataset" table_id = "bigquerytable" }
Führen Sie den folgenden Befehl aus, um das lokale Modul zu initialisieren:
terraform init
Verschieben Sie den mit den Ressourcen verknüpften Terraform-Status in die Modulinstanz.
Führen Sie den folgenden Befehl aus, um das Modul aus dem Beispiel im vorherigen Schritt zu verschieben:
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
In diesem Beispiel sieht die Ausgabe der Verschiebung so aus:
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).
Prüfen Sie mit dem folgenden Befehl, ob sich die Ressourcen geändert haben:
terraform plan
Das folgende Beispiel zeigt die Ausgabe, die Sie nach Ausführung des Befehls erhalten:
No changes. Your infrastructure matches the configuration.
Veröffentlichtes Modul verwenden
Nachdem Sie die Konfiguration konvertiert haben, identifizieren Sie ein veröffentlichtes Modul und die Ressourcen, die Sie hinein verschieben möchten.
Informationen zu den Konfigurationsoptionen für das Modul finden Sie in der Dokumentation des Moduls.
Erstellen Sie eine Instanz des Moduls, das für Ihre aktuelle Ressourcenkonfiguration konfiguriert ist.
Wenn Sie beispielsweise
google_bigquery_dataset
undgoogle_bigquery_table
in das offizielle BigQuery-Modul verschieben möchten, sehen Sie im folgenden Beispiel, wie das Modul aussehen könnte: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" }, } ] }
Führen Sie den folgenden Befehl aus, um das lokale Modul zu initialisieren:
terraform init
Lesen Sie den Quellcode des Moduls, um Ressourcenadressen im vorgelagerten Modul zu identifizieren und die Befehle move zu erstellen.
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"]'
Führen Sie den folgenden Befehl aus, um sich Änderungen an der Konfiguration anzusehen:
terraform plan
Wenn das von Ihnen ausgewählte veröffentlichte Modul andere Standardeinstellungen oder eine andere Konfiguration als Ihre Konfiguration hat, werden Ihnen möglicherweise Unterschiede in der Ausgabe angezeigt, wenn Sie den Befehl ausführen.
Betätigung
Wir empfehlen die Verwendung eines Continuous-Integration-Systems (CI) wie Cloud Build, Jenkins oder GitHub Actions, um die Ausführung von Terraform in großem Maßstab zu automatisieren. Weitere Informationen finden Sie unter Infrastruktur als Code mit Terraform, Cloud Build und GitOps verwalten.
Wenn Sie das Bootstrapping von Triggern starten und die Authentifizierung vereinfachen möchten, können Sie den Blueprint Cloud Build-Arbeitsbereich verwenden.
Struktur
Jede konvertierte Konfiguration aus DM Convert ist eine einzelne Stammkonfiguration, die einer einzelnen Statusdatei zugeordnet ist. Wir raten davon ab, eine einzelne Statusdatei für eine große Anzahl von Ressourcen einzurichten. Nachdem Sie die Konfiguration konvertiert haben, sollten Sie dafür sorgen, dass die neue Konfiguration den Best Practices für Stammmodule entspricht.