Prácticas recomendadas para usar DM Convert

Prácticas recomendadas para convertir a Terraform

Estado

El archivo de estado almacena información sobre los recursos que gestiona Terraform. De forma predeterminada, Terraform almacena el estado de forma local en el disco. Si almacenas el estado de forma remota, puedes permitir la colaboración distribuida, proteger la información sensible y ejecutar Terraform en integración continua (CI).

Después de convertir tu plantilla de Deployment Manager a Terraform e importar recursos (opcional), te recomendamos que sigas los pasos para almacenar el estado de forma remota en Cloud Storage.

Módulos

Si quieres reducir la complejidad, aplicar la coherencia y fomentar la reutilización de tu configuración, puedes usar módulos de Terraform para encapsular colecciones de recursos.

Para usar módulos, puede hacer lo siguiente:

En la mayoría de los casos prácticos, te recomendamos que uses un módulo publicado.

Crear un módulo personalizado

  1. Una vez que hayas convertido tu configuración, identifica los recursos que quieras mover a un módulo.

  2. Mueve las configuraciones de esos recursos a un directorio de módulos y convierte las variables necesarias en parámetros.

    En el siguiente ejemplo se muestra cómo mover google_bigquery_dataset y google_bigquery_table a un 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. En el archivo main.tf exportado, sustituye la configuración original por el módulo que has creado.

    En el siguiente ejemplo se muestra esta sustitución con el módulo creado en el ejemplo del paso anterior.

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

    terraform init
    
  5. Mueve el estado de Terraform asociado a los recursos a la instancia del módulo.

    Para mover el módulo del ejemplo del paso anterior, ejecuta el siguiente 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
    

    En este ejemplo, el resultado del movimiento es el siguiente:

    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. Valida que no se haya modificado ningún recurso ejecutando el siguiente comando:

    terraform plan
    

    A continuación, se muestra un ejemplo del resultado que se obtiene después de ejecutar el comando:

    No changes. Your infrastructure matches the configuration.
    

Usar un módulo publicado

  1. Después de convertir la configuración, identifica un módulo publicado y los recursos que quieras mover a él.

  2. Identifica las opciones de configuración del módulo leyendo su documentación.

  3. Crea una instancia del módulo configurada para tu configuración de recursos actual.

    Por ejemplo, si quieres mover google_bigquery_dataset y google_bigquery_table al módulo oficial de BigQuery, el siguiente ejemplo muestra cómo podría ser tu 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 el módulo local, ejecuta el siguiente comando:

    terraform init
    
  5. Lee el código fuente del módulo para identificar las direcciones de los recursos del módulo upstream y crear los 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 los cambios en la configuración, ejecuta el siguiente comando:

    terraform plan
    

Si el módulo publicado que has seleccionado tiene ajustes predeterminados diferentes o está configurado de forma distinta a tu configuración, es posible que veas diferencias destacadas en el resultado de ejecutar el comando.

Accionamiento

Te recomendamos que uses un sistema de integración continua (CI), como Cloud Build, Jenkins o GitHub Actions, para automatizar la ejecución de Terraform a gran escala. Para obtener más información, consulta el artículo Gestionar la infraestructura como código con Terraform, Cloud Build y GitOps.

Si quieres iniciar la creación de activadores y simplificar la autenticación, puedes usar el blueprint Espacio de trabajo de Cloud Build.

Estructura

Cada configuración convertida de DM Convert es una configuración raíz única asignada a un solo archivo de estado. No recomendamos configurar un único archivo de estado para contener un gran número de recursos. Una vez que hayas convertido tu configuración, te recomendamos que te asegures de que la nueva configuración sigue las prácticas recomendadas para los módulos raíz.