Best practice per l'utilizzo di DM Convert

Best practice per la conversione a Terraform

Stato

Il file di stato memorizza le informazioni sulle risorse gestite da Terraform. Per impostazione predefinita, Terraform archivia lo stato localmente sul disco. Se memorizzi lo stato in remoto, puoi consentire la collaborazione distribuita, proteggere le informazioni sensibili ed eseguire Terraform in integrazione continua (CI).

Dopo aver convertito il modello Deployment Manager in Terraform e, se vuoi, importato le risorse, ti consigliamo di seguire i passaggi per archiviare lo stato in remoto in Cloud Storage.

Moduli

Se vuoi ridurre la complessità, garantire la coerenza e promuovere il riutilizzo della configurazione, puoi utilizzare i moduli Terraform per incapsulare raccolte di risorse.

Per utilizzare i moduli, puoi procedere in uno dei seguenti modi:

Per la maggior parte dei casi d'uso, ti consigliamo di utilizzare un modulo pubblicato.

Creare un modulo personalizzato

  1. Dopo aver convertito la configurazione, identifica le risorse che vuoi spostare in un modulo.

  2. Sposta le configurazioni di queste risorse in una directory del modulo e converti le variabili richieste in parametri.

    L'esempio seguente mostra come spostare google_bigquery_dataset e google_bigquery_table in un modulo:

    # 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. Nel file main.tf esportato, sostituisci la configurazione originale con il modulo che hai creato.

    L'esempio seguente mostra questa sostituzione utilizzando il modulo creato nell'esempio del passaggio precedente.

    # main.tf
    module "bq" {
      source = "./bq-module"
    
      project_id = "PROJECT_ID"
      dataset_id = "bigquerydataset"
      table_id   = "bigquerytable"
    }
    
  4. Per inizializzare il modulo locale, esegui questo comando:

    terraform init
    
  5. Sposta lo stato di Terraform associato alle risorse nell'istanza del modulo.

    Per spostare il modulo dall'esempio del passaggio precedente, esegui questo comando:

    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
    

    Per questo esempio, l'output dello spostamento è:

    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. Verifica che nessuna risorsa sia stata modificata eseguendo questo comando:

    terraform plan
    

    Di seguito è riportato un esempio dell'output ricevuto dopo l'esecuzione del comando:

    No changes. Your infrastructure matches the configuration.
    

Utilizzare un modulo pubblicato

  1. Dopo aver convertito la configurazione, identifica un modulo pubblicato e le risorse che vuoi spostare al suo interno.

  2. Identifica le opzioni di configurazione per il modulo leggendo la documentazione del modulo.

  3. Crea un'istanza del modulo configurata per la configurazione delle risorse attuale.

    Ad esempio, se vuoi spostare google_bigquery_dataset e google_bigquery_table nel modulo BigQuery ufficiale , l'esempio seguente mostra come potrebbe apparire il modulo:

    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. Per inizializzare il modulo locale, esegui questo comando:

    terraform init
    
  5. Leggi il codice sorgente del modulo per identificare gli indirizzi delle risorse all'interno del modulo upstream e creare i comandi 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"]'
    
  6. Per visualizzare le modifiche alla configurazione, esegui il comando seguente:

    terraform plan
    

Se il modulo pubblicato selezionato ha impostazioni predefinite diverse o è configurato in modo diverso rispetto alla tua configurazione, potresti notare differenze evidenziate nell'output dell'esecuzione del comando.

Attivazione

Ti consigliamo di utilizzare un sistema di integrazione continua (CI), come Cloud Build, Jenkins o GitHub Actions, per automatizzare l'esecuzione di Terraform su scala. Per saperne di più, visita la pagina Gestione dell'infrastruttura come codice con Terraform, Cloud Build e GitOps.

Se vuoi avviare la creazione di trigger e semplificare l'autenticazione, puoi scegliere di utilizzare il blueprint Cloud Build Workspace.

Strutturazione

Ogni configurazione convertita da DM Convert è una singola configurazione principale mappata a un singolo file di stato. Non è consigliabile configurare un unico file di stato per contenere un numero elevato di risorse. Dopo aver convertito la configurazione, ti consigliamo di assicurarti che la nuova configurazione segua le best practice per i moduli radice.