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'état localement sur 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 si vous souhaitez importer des ressources, nous vous recommandons de suivre la procédure stocker l'état à distance dans Cloud Storage.
Modules
Si vous souhaitez réduire la complexité, appliquer la cohérence et favoriser 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:
Créez un module personnalisé à partir des ressources exportées par DM Convert. C'est ce qui vous offre le plus de flexibilité.
Utilisez un module publié à partir Google Cloud collection de modules officiels ou le registre Terraform.
Dans la plupart des cas d'utilisation, nous vous recommandons d'utiliser un module publié.
Créer un module personnalisé
Après avoir converti votre configuration identifier les ressources que vous souhaitez déplacer dans un module.
Déplacez les configurations de ces ressources dans un répertoire de module. convertir les variables requises en paramètres.
L'exemple suivant montre comment déplacer
google_bigquery_dataset
etgoogle_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 }
Dans le fichier
main.tf
exporté, remplacez la configuration d'origine par le que vous avez créé.L'exemple suivant montre 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" }
Pour initialiser le module local, exécutez la commande suivante :
terraform init
Déplacer 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, la sortie de la migration est la suivante :
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).
Vérifiez qu'aucune ressource n'a changé en exécutant la commande suivante :
terraform plan
Voici un exemple de résultat que vous obtenez après l'exécution de la commande:
No changes. Your infrastructure matches the configuration.
Utiliser un module publié
Une fois que vous avez converti votre configuration, identifier un module publié ; et les ressources que vous souhaitez y transférer.
Identifiez les options de configuration du module en consultant les dans la documentation Google Cloud.
Créer une instance du module configuré sur votre ressource actuelle configuration.
Par exemple, si vous souhaitez déplacer
google_bigquery_dataset
etgoogle_bigquery_table
dans le module BigQuery officiel, l'exemple suivant 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" }, } ] }
Pour initialiser le module local, exécutez la commande suivante:
terraform init
Lisez le code source du module. pour identifier les adresses de ressources dans le module en amont et construire 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"]'
Pour afficher les modifications apportées à la configuration, exécutez la commande suivante :
terraform plan
Si le module publié que vous avez sélectionné a 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 une infrastructure as Code avec Terraform, Cloud Build et GitOps.
Si vous voulez amorcer la création de déclencheurs et simplifier l'authentification, vous pouvez choisir d'utiliser l'espace de travail Cloud Build le plan de contrôle.
Structure
Chaque configuration convertie à partir de DM Convert est une configuration racine unique mappés à un seul fichier d'état. Nous vous déconseillons de configurer un seul fichier d'état peut contenir un grand nombre de ressources. Après avoir converti votre configuration, nous vous recommandons de vérifier que votre nouvelle configuration respecte les Bonnes pratiques pour les modules racines.