Best Practices für die Verwendung von DM Convert

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:

Für die meisten Anwendungsfälle empfehlen wir die Verwendung eines veröffentlichten Moduls.

Benutzerdefiniertes Modul erstellen

  1. Nachdem Sie die Konfiguration konvertiert haben, identifizieren Sie die Ressourcen, die Sie in ein Modul verschieben möchten.

  2. 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 und google_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
    }
    
  3. 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"
    }
    
  4. Führen Sie den folgenden Befehl aus, um das lokale Modul zu initialisieren:

    terraform init
    
  5. 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).
    
  6. 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

  1. Nachdem Sie die Konfiguration konvertiert haben, identifizieren Sie ein veröffentlichtes Modul und die Ressourcen, die Sie hinein verschieben möchten.

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

  3. Erstellen Sie eine Instanz des Moduls, das 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 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"
          },
        }
      ]
    }
    
  4. Führen Sie den folgenden Befehl aus, um das lokale Modul zu initialisieren:

    terraform init
    
  5. 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"]'
    
  6. 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.