Prácticas recomendadas para usar la conversión de DM

Prácticas recomendadas para la conversión a Terraform

Estado

El archivo de estado almacena información sobre los recursos que administra 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 información sensible y ejecutar Terraform en integración continua (CI).

Después de convertir tu plantilla de Deployment Manager en Terraform y, de manera opcional, importar recursos, te recomendamos que sigas Almacena el estado de forma remota en Cloud Storage.

Módulos

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

Para usar módulos, puedes hacer lo siguiente:

Para la mayoría de los casos de uso, te recomendamos que uses un módulo publicado.

Crea un módulo personalizado

  1. Después de convertir tu configuración, ,a identificar qué recursos quieres trasladar a un módulo.

  2. Mueve las configuraciones de esos recursos a un directorio de módulos y convierte las variables requeridas 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, reemplaza la configuración original por el módulo que creaste.

    En el siguiente ejemplo, se muestra este reemplazo 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 con 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
    

    Para este ejemplo, el resultado del traslado 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. Ejecuta el siguiente comando para validar que no haya cambiado ningún recurso:

    terraform plan
    

    El siguiente es un ejemplo del resultado que recibes después de ejecutar el comando:

    No changes. Your infrastructure matches the configuration.
    

Cómo usar un módulo publicado

  1. Después de convertir tu configuración, haz lo siguiente: identificar un módulo publicado y los recursos que quieres trasladar.

  2. Para identificar las opciones de configuración del módulo, lee la documentación del módulo.

  3. Crea una instancia del módulo configurado según la configuración de recursos actual.

    Por ejemplo, si quieres mover google_bigquery_dataset y google_bigquery_table al módulo de BigQuery oficial, en el siguiente ejemplo, se muestra cómo podría verse 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 dentro del módulo upstream y compila 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 seleccionaste tiene parámetros de configuración predeterminados diferentes o se configuró de forma diferente a tu configuración, es posible que veas diferencias destacadas en el resultado de la ejecución del comando.

Accionamiento

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

Si quieres arrancar la creación de activadores y simplificar la autenticación, puedes elegir usar el lugar de trabajo de Cloud Build plano.

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 solo archivo de estado para contener una gran cantidad de recursos. Después de convertir tu configuración, le recomendamos asegurarse de que su nueva configuración siga prácticas recomendadas para los módulos raíz.