Bonnes pratiques d'utilisation de DM Convert

Bonnes pratiques de conversion au format Terraform

État

Le fichier d'état stocke des informations sur les ressources gérées par Terraform. Par défaut, Terraform stocke l'state localement sur le disque. Si vous stockez l'état à distance, vous pouvez autoriser la collaboration distribuée, protéger les informations sensibles et exécuter Terraform en intégration continue (CI).

Après avoir converti votre modèle Deployment Manager au format Terraform et éventuellement importé des ressources, nous vous recommandons de suivre la procédure permettant de stocker l'état à distance dans Cloud Storage.

Modules

Si vous souhaitez réduire la complexité, appliquer la cohérence et promouvoir la réutilisation de votre configuration, vous pouvez utiliser des modules Terraform pour encapsuler des collections de ressources.

Pour utiliser des modules, vous pouvez effectuer l'une des opérations suivantes:

Dans la plupart des cas, nous vous recommandons d'utiliser un module publié.

Créer un module personnalisé

  1. Après avoir converti votre configuration, identifiez les ressources que vous souhaitez déplacer dans un module.

  2. Déplacez les configurations de ces ressources dans un répertoire de module, puis convertissez les variables requises en paramètres.

    L'exemple suivant montre comment déplacer google_bigquery_dataset et google_bigquery_table dans un module:

    # 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. Dans le fichier main.tf exporté, remplacez la configuration d'origine par le module que vous avez créé.

    L'exemple suivant illustre ce remplacement à l'aide du module créé dans l'exemple de l'étape précédente.

    # main.tf
    module "bq" {
      source = "./bq-module"
    
      project_id = "PROJECT_ID"
      dataset_id = "bigquerydataset"
      table_id   = "bigquerytable"
    }
    
  4. Pour initialiser le module local, exécutez la commande suivante:

    terraform init
    
  5. Déplacez l'état Terraform associé aux ressources dans l'instance de module.

    Pour déplacer le module de l'exemple de l'étape précédente, exécutez la commande suivante:

    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
    

    Dans cet exemple, le résultat du déplacement est le suivant:

    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. Vérifiez qu'aucune ressource n'a été modifiée en exécutant la commande suivante:

    terraform plan
    

    Voici un exemple du résultat que vous obtenez après l'exécution de la commande:

    No changes. Your infrastructure matches the configuration.
    

Utiliser un module publié

  1. Après avoir converti votre configuration, identifiez un module publié et les ressources que vous souhaitez y déplacer.

  2. Identifiez les options de configuration du module en lisant sa documentation.

  3. Créez une instance du module configurée selon votre configuration de ressources actuelle.

    Par exemple, si vous souhaitez déplacer google_bigquery_dataset et google_bigquery_table dans le module BigQuery officiel, l'exemple suivant vous montre à quoi pourrait ressembler votre module:

    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. Pour initialiser le module local, exécutez la commande suivante:

    terraform init
    
  5. Lisez le code source du module pour identifier les adresses des ressources dans le module en amont et créez les commandes 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. Pour afficher les modifications apportées à la configuration, exécutez la commande suivante:

    terraform plan
    

Si le module publié que vous avez sélectionné possède des paramètres par défaut différents ou s'il est configuré différemment de votre configuration, des différences peuvent apparaître en surbrillance dans le résultat de l'exécution de la commande.

Actionnement

Nous vous recommandons d'utiliser un système d'intégration continue (CI), tel que Cloud Build, Jenkins ou GitHub Actions, pour automatiser l'exécution de Terraform à grande échelle. Pour en savoir plus, consultez la page Gérer l'Infrastructure as Code avec Terraform, Cloud Build et GitOps.

Si vous souhaitez amorcer la création de déclencheurs et simplifier l'authentification, vous pouvez choisir d'utiliser le plan d'espace de travail Cloud Build.

Structurer

Chaque configuration convertie à partir de DM Convert est une configuration racine unique mappée à un seul fichier d'état. Nous vous déconseillons de configurer un seul fichier d'état pour contenir un grand nombre de ressources. Une fois la configuration convertie, nous vous recommandons de vous assurer qu'elle respecte les bonnes pratiques pour les modules racine.