Práticas recomendadas para usar o DM Convert

Práticas recomendadas para a conversão para o Terraform

Estado

O ficheiro de estado armazena informações sobre os recursos que o Terraform gere. Por predefinição, o Terraform armazena o estado localmente no disco. Se armazenar o estado remotamente, pode permitir a colaboração distribuída, proteger informações confidenciais e executar o Terraform na integração contínua (IC).

Depois de converter o modelo do Deployment Manager para o Terraform e, opcionalmente, importar recursos, recomendamos que siga os passos para armazenar o estado remotamente no Cloud Storage.

Módulos

Se quiser reduzir a complexidade, aplicar a consistência e promover a reutilização da sua configuração, pode usar módulos do Terraform para encapsular coleções de recursos.

Para usar módulos, pode fazer o seguinte:

Para a maioria dos exemplos de utilização, recomendamos que use um módulo publicado.

Crie um módulo personalizado

  1. Depois de converter a configuração , identifique os recursos que quer mover para um módulo.

  2. Mova as configurações desses recursos para um diretório de módulos e converta as variáveis necessárias em parâmetros.

    O exemplo seguinte mostra como mover google_bigquery_dataset e google_bigquery_table para um módulo:

    # 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. No ficheiro main.tf exportado, substitua a configuração original pelo módulo que criou.

    O exemplo seguinte mostra esta substituição através do módulo criado no exemplo do passo anterior.

    # main.tf
    module "bq" {
      source = "./bq-module"
    
      project_id = "PROJECT_ID"
      dataset_id = "bigquerydataset"
      table_id   = "bigquerytable"
    }
    
  4. Para inicializar o módulo local, execute o seguinte comando:

    terraform init
    
  5. Mova o estado do Terraform associado aos recursos para a instância do módulo.

    Para mover o módulo do exemplo no passo anterior, execute o seguinte 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
    

    Para este exemplo, o resultado da mudança é:

    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. Valide que nenhum recurso foi alterado executando o seguinte comando:

    terraform plan
    

    Segue-se um exemplo do resultado que recebe depois de executar o comando:

    No changes. Your infrastructure matches the configuration.
    

Use um módulo publicado

  1. Depois de converter a configuração, identifique um módulo publicado e os recursos que quer mover para o mesmo.

  2. Identifique as opções de configuração do módulo lendo a documentação do módulo.

  3. Crie uma instância do módulo configurado para a configuração do recurso atual.

    Por exemplo, se quiser mover google_bigquery_dataset e google_bigquery_table para o módulo do BigQuery oficial, o exemplo seguinte mostra o aspeto do seu módulo:

    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. Para inicializar o módulo local, execute o seguinte comando:

    terraform init
    
  5. Leia o código fonte do módulo para identificar os endereços dos recursos no módulo a montante e criar os comandos 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. Para ver as alterações à configuração, execute o seguinte comando:

    terraform plan
    

Se o módulo publicado que selecionou tiver definições predefinidas diferentes ou estiver configurado de forma diferente da sua configuração, pode ver diferenças realçadas no resultado da execução do comando.

Acionamento

Recomendamos que use um sistema de integração contínua (IC), como o Cloud Build, o Jenkins ou as ações do GitHub, para automatizar a execução do Terraform à escala. Para mais informações, visite o artigo Gerir a infraestrutura como código com o Terraform, o Cloud Build e o GitOps.

Se quiser iniciar a criação de acionadores e simplificar a autenticação, pode optar por usar o esquema do espaço de trabalho do Cloud Build.

Estrutura

Cada configuração convertida do DM Convert é uma configuração de raiz única mapeada para um único ficheiro de estado. Não recomendamos a configuração de um único ficheiro de estado para conter um grande número de recursos. Depois de converter a configuração, recomendamos que se certifique de que a nova configuração segue as práticas recomendadas para módulos raiz.