Best Practices für die Verwendung von DM Convert

Best Practices für die Konvertierung zu Terraform

Bundesland

In der Zustandsdatei werden Informationen zu den von Terraform verwalteten Ressourcen gespeichert. Standardmäßig speichert Terraform den Status lokal auf der Festplatte. Wenn Sie den Zustand remote speichern, können Sie die verteilte Zusammenarbeit ermöglichen, vertrauliche Informationen schützen und Terraform in der Continuous Integration (CI) ausführen.

Nachdem Sie Ihre Deployment Manager-Vorlage in Terraform konvertiert und optional Ressourcen importiert haben, empfehlen wir, die Schritte zum Speichern des Status in Cloud Storage auszuführen.

Module

Wenn Sie die Komplexität reduzieren, die Konsistenz erzwingen und die Wiederverwendbarkeit Ihrer Konfiguration fördern möchten, können Sie Terraform-Module verwenden, um Sammlungen von Ressourcen zu kapseln.

Sie haben folgende Möglichkeiten, um Module zu verwenden:

Für die meisten Anwendungsfälle empfehlen wir, ein veröffentlichtes Modul zu verwenden.

Benutzerdefiniertes Modul erstellen

  1. Nachdem Sie Ihre Konfiguration konvertiert haben, müssen Sie festlegen, welche Ressourcen Sie in ein Modul verschieben möchten.

  2. Verschieben Sie die Konfigurationen dieser Ressourcen in ein Modulverzeichnis und wandeln Sie erforderliche Variablen in Parameter um.

    Das folgende Beispiel zeigt, wie Sie google_bigquery_dataset und google_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
    }
    
  3. Ersetzen Sie in der exportierten Datei main.tf die ursprüngliche Konfiguration durch das von Ihnen erstellte Modul.

    Das folgende Beispiel zeigt diesen Ersatz anhand 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"
    }
    
  4. Führen Sie den folgenden Befehl aus, um das lokale Modul zu initialisieren:

    terraform init
    
  5. Verschieben Sie den Terraform-Zustand, der den Ressourcen zugeordnet ist, 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 des Befehls 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).
    
  6. Prüfen Sie mit dem folgenden Befehl, ob sich Ressourcen geändert haben:

    terraform plan
    

    Im Folgenden sehen Sie ein Beispiel für die Ausgabe, die Sie nach der Ausführung des Befehls erhalten:

    No changes. Your infrastructure matches the configuration.
    

Veröffentlichtes Modul verwenden

  1. Nachdem Sie Ihre Konfiguration konvertiert haben, suchen Sie ein veröffentlichtes Modul und die Ressourcen, die Sie darin verschieben möchten.

  2. Konfigurationsoptionen für das Modul finden Sie in der Dokumentation des Moduls.

  3. Erstellen Sie eine Instanz des Moduls, die für Ihre aktuelle Ressourcenkonfiguration konfiguriert ist.

    Wenn Sie beispielsweise google_bigquery_dataset und google_bigquery_table in das offizielle BigQuery-Modul verschieben möchten, sehen Sie im folgenden Beispiel, wie Ihr 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"
          },
        }
      ]
    }
    
  4. Führen Sie den folgenden Befehl aus, um das lokale Modul zu initialisieren:

    terraform init
    
  5. Lesen Sie den Modulquellcode, um Ressourcenadressen im Upstream-Modul zu ermitteln und die move-Befehle 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"]'
    
  6. Führen Sie den folgenden Befehl aus, um sich Änderungen an der Konfiguration anzusehen:

    terraform plan
    

Wenn das veröffentlichte Modul, das Sie ausgewählt haben, andere Standardeinstellungen hat oder anders konfiguriert ist als Ihre Konfiguration, werden die Unterschiede in der Ausgabe des Befehls hervorgehoben.

Betätigung

Wir empfehlen, ein Continuous Integration-System (CI) 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 starten und die Authentifizierung vereinfachen möchten, können Sie das Blueprint Cloud Build Workspace verwenden.

Struktur

Jede konvertierte Konfiguration aus DM Convert ist eine einzelne Root-Konfiguration, die einer einzelnen Statusdatei zugeordnet ist. Wir raten davon ab, eine einzelne Statusdatei für eine große Anzahl von Ressourcen einzurichten. Nachdem Sie Ihre Konfiguration umgestellt haben, sollten Sie darauf achten, dass Ihre neue Konfiguration den Best Practices für Root-Module entspricht.