Best Practices für die Umstellung auf Terraform
Bundesland
Die Statusdatei Informationen zu den von Terraform verwalteten Ressourcen. Standardmäßig speichert Terraform den Status lokal auf dem Laufwerk. Wenn Sie den Status remote speichern, ermöglichen Sie die verteilte Zusammenarbeit, schützen Sie vertrauliche Informationen und führen Terraform in Continuous Integration (CI) aus.
Nachdem Sie Ihre Deployment Manager-Vorlage in Terraform konvertiert und optional Ressourcen importiert haben, empfehlen wir Ihnen, die Schritte zum Speichern des Status aus der Ferne in Cloud Storage auszuführen.
Module
Wenn Sie die Komplexität reduzieren, für Konsistenz sorgen und die Wiederverwendbarkeit Ihrer Konfiguration fördern möchten, können Sie Terraform-Module verwenden, um Ressourcensammlungen zu kapseln.
Sie haben folgende Möglichkeiten, Module zu verwenden:
Erstellen Sie ein benutzerdefiniertes Modul aus den Ressourcen, die von DM Convert. Dies bietet die größte Flexibilität.
Verwenden Sie ein veröffentlichtes Modul aus der Sammlung der offiziellen Google Cloud-Module oder der Terraform Registry.
Für die meisten Anwendungsfälle empfehlen wir, ein veröffentlichtes Modul zu verwenden.
Benutzerdefiniertes Modul erstellen
Nach der Konvertierung Ihrer Konfiguration , geben Sie an, welche Ressourcen Sie in ein Modul verschieben möchten.
Verschieben Sie die Konfigurationen dieser Ressourcen in ein Modulverzeichnis. die erforderlichen Variablen in Parameter umwandeln.
Das folgende Beispiel zeigt, wie Sie
google_bigquery_dataset
undgoogle_bigquery_table
in ein Modul verschieben:# 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 den mit den Ressourcen verknüpften Terraform-Status in der 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 des Verschiebens 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 keine Ressourcen geändert haben:
terraform plan
Im folgenden Beispiel sehen Sie die Ausgabe, die Sie nach Ausführung des Befehls erhalten:
No changes. Your infrastructure matches the configuration.
Veröffentlichtes Modul verwenden
Nachdem Sie Ihre Konfiguration konvertiert haben, ein veröffentlichtes Modul identifizieren und die Ressourcen, die Sie verschieben möchten.
Die Konfigurationsoptionen für das Modul finden Sie im Dokumentation.
Instanz des Moduls erstellen, das für Ihre aktuelle Ressource konfiguriert ist Konfiguration.
Wenn Sie beispielsweise
google_bigquery_dataset
undgoogle_bigquery_table
in das offizielle BigQuery-Modul verschieben möchten, könnte Ihr Modul so aussehen: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
Quellcode des Moduls lesen Ressourcenadressen innerhalb des vorgelagerten Moduls zu identifizieren und die move-Befehlen.
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 Änderungen an der Konfiguration anzusehen:
terraform plan
Wenn das ausgewählte veröffentlichte Modul andere Standardeinstellungen hat oder anders konfiguriert ist als Ihre Konfiguration, werden in der Ausgabe des Befehls möglicherweise Unterschiede hervorgehoben.
Betätigung
Wir empfehlen, ein CI-System (Continuous Integration) wie Cloud Build, Jenkins oder GitHub Actions zu verwenden, um die Ausführung von Terraform im großen Maßstab zu automatisieren. Weitere Informationen finden Sie unter Infrastruktur als Code mit Terraform, Cloud Build und GitOps verwalten.
Wenn Sie die Erstellung von Triggern vereinfachen und die Authentifizierung beschleunigen möchten, können Sie die Cloud Build-Workspace-Vorlage verwenden.
Struktur
Jede aus DM Convert konvertierte Konfiguration ist eine einzelne Stammkonfiguration. die einer einzelnen Statusdatei zugeordnet sind. Wir raten davon ab, eine einzelne Statusdatei einzurichten. für eine große Anzahl von Ressourcen. Nachdem Sie Ihre Konfiguration konvertiert haben, sollten Sie darauf achten, dass Ihre neue Konfiguration Best Practices für Stammmodule