Mise à niveau d'une pile vers une version ultérieure de Terraform

Mettez à niveau une pile dans Resource Manager vers une version ultérieure de Terraform.

Remarque

Ces instructions ne s'appliquent pas aux piles Resource Manager créées via Marketplace.

Ces étapes sont effectuées dans la ligne de commande et dans la console.

Pour plus d'informations sur les versions de Terraform prises en charge par Resource Manager, reportez-vous à Versions Terraform prises en charge.

Avant de commencer

Pour mettre à niveau la pile, vous devez satisfaire aux exigences suivantes :

Mise à niveau automatique

Pour prendre en charge l'abandon des versions antérieures à Terraform (antérieures à 1.5.x), Resource Manager tentera une mise à niveau automatique de la version Terraform. Cette mise à niveau automatique est tentée chaque fois que vous exécutez un travail d'application réussi (état du travail réussi) sur une pile configurée pour une ancienne version de Terraform.

Remarque

La version cible de la tentative de mise à niveau dépend de la version Terraform actuellement configurée de la pile. Les mises à niveau automatiques intermédiaires déplacent la pile vers la version 1.5.x lors d'une ou plusieurs tentatives de mise à niveau réussies. L'utilisation de mises à niveau intermédiaires permet de contourner les différences de syntaxe HCL, de définitions de bloc de fournisseur et de différences de fichiers d'état, comme indiqué dans les instructions de mise à niveau manuelle. La version cible d'une mise à niveau est sélectionnée comme suit :
  • La version cible pour la mise à niveau 0.12.x est 0.13.x.
  • La version cible de la mise à niveau 0.13.x est 0.14.x.
  • La version cible pour mettre à niveau 0.14.x, 1.0.x, 1.1.x ou 1.2.x est 1.5.x.

La tentative de mise à niveau n'a lieu qu'après la réussite d'un travail d'application (état du travail réussi).

  • Si la mise à niveau réussit, la version et le fichier d'état de Terraform de la pile sont mis à niveau vers la version 1.5.x (ou version intermédiaire). Aucune action supplémentaire n'est requise.
  • Si la mise à niveau échoue, la version de Terraform de la pile n'est pas modifiée et les ressources ne sont pas affectées. Un message d'échec de mise à niveau apparaît sur la page de détails de la pile. Dans ce cas, obtenez les journaux pour le travail d'application (sélectionnez Afficher les journaux de mise à niveau terraform pour obtenir des informations sur l'échec), puis mettez à jour la configuration Terraform. Le prochain travail d'application réussi que vous exécutez sur cette pile déclenchera le processus de mise à niveau automatique par Resource Manager.
    Remarque

    Même si la mise à niveau échoue, l'état du travail est toujours correct.

Chemins de mise à niveau

Voici les chemins de mise à niveau pris en charge par version initiale.

Version initiale de Terraform Chemin de mise à niveau
0,12 Dans l'ordre, effectuez une mise à niveau vers chaque version prise en charge : 0.13, 0.14, 1.0 (recommandé), 1.1, 1.2, 1.5.
0,13 Dans l'ordre, effectuez une mise à niveau vers chaque version prise en charge : 0.14, 1.0 (recommandé), 1.1, 1.2, 1.5.
0,14 Dans l'ordre, effectuez une mise à niveau vers chaque version prise en charge : 1.0 (recommandé), 1.1, 1.2, 1.5.
1 Dans l'ordre, mettez à niveau vers chaque version prise en charge : 1.1, 1.2, 1.5.
1,1 Dans l'ordre, mettez à niveau vers chaque version prise en charge : 1.2, 1.5.
1,2 Mettre à niveau vers 1.5.

Reportez-vous aux guides de mise à niveau officiels de Terraform :

Tâche 1 : confirmer l'infrastructure à jour

Cette tâche utilise la console. Pour obtenir des instructions sur l'interface de ligne de commande et l'API pour une étape, reportez-vous au lien associé.

  1. Sur la page de liste Piles, sélectionnez la pile à utiliser. Si vous avez besoin d'aide pour rechercher la page de liste ou la pile, reportez-vous à Liste des piles.
  2. Vérifiez que la page de détails de la pile affiche la version attendue (version de Terraform).
    Pour obtenir des instructions sur l'interface de ligne de commande et l'API afin d'obtenir les détails d'une pile, reportez-vous à Obtention des détails d'une pile.
  3. Rechercher les modifications en attente de l'infrastructure :
    1. Sélectionnez Plan.

      Une fois l'action terminée, la page de détails du travail associé s'ouvre.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Création d'un travail de planification.

    2. Pour consulter le journal de l'action de plan terminée, sélectionnez Journaux.

      Le contenu du journal indique si la pile est à jour ou si des modifications sont en attente.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Obtention des journaux pour un travail.

      Exemple pour une pile à jour (aucune modification en attente) :

      No changes. Infrastructure is up-to-date.

  4. Si le contenu du journal indique des modifications en attente, appliquez les modifications en attente :
    1. Sélectionnez Détails de pile pour revenir à la page de détails de la pile.

    2. Sélectionnez Appliquer.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Création d'un travail d'application.

      Une fois l'action terminée, la page de détails du travail associé s'ouvre.

    3. Vérifiez que l'action d'application a réussi : sélectionnez Journaux pour consulter le journal de l'action de plan terminée.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Obtention des journaux pour un travail.

Lorsque l'infrastructure de pile est à jour, vous pouvez passer à la tâche suivante de téléchargement des fichiers de configuration et d'état Terraform.

Tâche 2 : téléchargement de la configuration et de l'état

Remarque

Si la configuration Terraform de la pile est stockée dans un système de contrôle du code source, tel que GitLab, extrayez et téléchargez la configuration Terraform à partir de là.

Si la configuration Terraform de la pile est stockée dans un bucket, téléchargez-la à partir de ce dernier.

Cette tâche utilise la console. Pour obtenir des instructions sur l'interface de ligne de commande et l'API pour une étape, reportez-vous au lien associé.

  1. Sur un ordinateur capable d'exécuter des outils de ligne de commande, créez un dossier pour stocker la configuration et l'état Terraform téléchargés.
    Exemple de nom de dossier : c:\StackUpgrade
  2. Dans la console : sur la page de liste Piles, sélectionnez la pile à utiliser. Si vous avez besoin d'aide pour rechercher la page de liste ou la pile, reportez-vous à Liste des piles.
  3. En regard de Configuration Terraform, sélectionnez Télécharger en local.

    Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Obtention de la configuration Terraform d'une pile.

  4. Téléchargez le fichier d'état Terraform :
    1. Sur la page de détails de la pile, sélectionnez Visualiser l'état.
    2. Pour télécharger le fichier d'état de la pile en local, accédez à Actions supplémentaires et sélectionnez Etat de téléchargement en local de Terraform en local.

    Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Obtention du fichier d'état d'une pile.

Une fois la configuration et l'état Terraform téléchargés, vous pouvez passer à la tâche suivante de mise à niveau de la configuration Terraform.

Tâche 3 : mise à niveau de la configuration

Cette tâche fournit des étapes personnalisées pour la mise à niveau d'une configuration Terraform utilisée avec Resource Manager.
  1. Sur le même ordinateur que celui sur lequel vous utilisiez pour stocker les fichiers de configuration et d'état Terraform téléchargés, téléchargez les fichiers .zip nécessaires à la mise à niveau de la configuration Terraform :
  2. Extrayez le contenu de chaque fichier .zip.
  3. Mettez à jour la configuration du fournisseur pour ajouter des arguments tels que user_ocid, fingerprint et private_key_path. Vous avez peut-être déjà commenté ces arguments.
    Exemple d'arguments commentés :
    provider "oci" {
                        tenancy_ocid = var.tenancy_ocid
                        /*
                        user_ocid = var.user_ocid
                        fingerprint = var.fingerprint
                        private_key_path = var.private_key_path
                        */
                        region = var.region
                        }
  4. Pour suivre des exemples de code dans le reste de cette procédure, renommez le fichier extrait en terraform_<major-version>.
    Exemple : terraform_13
  5. Pour rendre la commande (fichier extrait) accessible, stockez-la dans un répertoire présent dans votre répertoire PATH.
  6. Ouvrez une invite de commande.
  7. Accédez au répertoire dans lequel vous avez stocké les informations de pile téléchargées.
    Exemple :
    cd c:\StackUpgrade
  8. Pour initialiser Terraform, exécutez la commande suivante :
    terraform_<major-version> init

    Exemple :

    terraform_13 init
  9. Afin de mettre à niveau la syntaxe de votre configuration Terraform, exécutez la commande pour la version de Terraform cible :
    Version de Terraform cible Commande
    0,13 terraform_13 13upgrade
    0,14 terraform_14 14upgrade
    1.0 et supérieur Aucune action nécessaire. Si les mises à niveau précédentes ont été appliquées avec succès au cours du processus, aucune modification spéciale n'est nécessaire pour mettre à niveau la configuration.

    La sortie indique si la mise à niveau a réussi.

    En cas de réussite, passez à l'étape suivante.

    En cas d'échec, apportez des modifications manuelles aux fichiers de configuration Terraform comme indiqué.

  10. Créez une archive .zip des fichiers de configuration Terraform.

    Exemple d'archive .zip : c:\StackUpgrade\MyConfigUpgraded.zip

    Assurez-vous que l'archive omet le fichier d'état Terraform (terraform.tfstate) et le répertoire .terraform afin de respecter la structure de fichiers requise pour les configurations Terraform.

  11. Si un système de contrôle de code source (tel que GitHub) est utilisé pour la configuration Terraform de la pile, validez-y la configuration Terraform mise à niveau.
    La validation la plus récente est utilisée lorsque vous exécutez des travaux sur la pile.
  12. Si un bucket Object Storage est utilisé pour la configuration Terraform de la pile, modifiez son contenu afin qu'il corresponde à la configuration Terraform mise à niveau.
    Remarque

    Sauvegardez le bucket en cours avant de le modifier pour qu'il corresponde à la configuration Terraform mise à niveau. Limitez le bucket aux fichiers destinés à être utilisés avec Terraform.

    Le contenu le plus récent du bucket est utilisé lorsque vous exécutez des travaux sur la pile.

Une fois la configuration Terraform mise à niveau vers la version Terraform cible, vous pouvez passer à la tâche suivante de mise à niveau de la pile.

Tâche 4 : mettre à niveau la pile

Cette tâche utilise la console. Pour obtenir des instructions sur l'interface de ligne de commande et l'API relatives à la mise à jour d'une pile, reportez-vous à Mise à jour d'une pile.
  1. Dans la console, rouvrez la page de détails de la pile à mettre à niveau : sur la page de liste Piles, sélectionnez la pile à utiliser. Si vous avez besoin d'aide pour rechercher la page de liste ou la pile, reportez-vous à Liste des piles.
  2. Dans le menu Actions (trois points) de la pile, sélectionnez Modifier.
  3. Téléchargez la configuration Terraform mise à niveau vers la pile.

    Vous pouvez faire glisser le fichier dans le contrôle de la boîte de dialogue ou sélectionner Parcourir et accéder à l'emplacement du fichier ou du dossier.

    Exemple de chemin de fichier : c:\StackUpgrade\MyConfigUpgraded.zip

    La boîte de dialogue est remplie avec les informations contenues dans la configuration Terraform.

    Remarque

    Ignorez cette étape de téléchargement si la configuration Terraform de la pile est stockée dans un système de contrôle de code source (tel que GitHub) ou dans un bucket Object Storage. La pile a été configurée pour utiliser la configuration Terraform mise à niveau dans Tâche 3 : mettre à niveau la configuration lorsque vous avez validé la modification dans le code source ou téléchargé le fichier vers le bucket.)
  4. Indiquez la version de Terraform cible : modifiez la version de Terraform.
  5. Sélectionnez deux fois Suivant, puis Enregistrer les modifications.
La pile est désormais synchronisée avec la configuration Terraform mise à niveau et la version Terraform indiquée. Vous pouvez maintenant passer à la tâche suivante pour importer le fichier d'état.

Tâche 5 : Importer l'état

Cette tâche utilise la console. Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Création d'un travail d'import.
  1. Dans la console, rouvrez la page de détails de la pile à mettre à niveau : sur la page de liste Piles, sélectionnez la pile à utiliser. Si vous avez besoin d'aide pour rechercher la page de liste ou la pile, reportez-vous à Liste des piles.
  2. Accédez à Actions supplémentaires et sélectionnez Etat d'import.
  3. Dans le panneau Importer, ajoutez le fichier d'état Terraform téléchargé.

    Vous pouvez faire glisser le fichier dans le contrôle de la boîte de dialogue ou sélectionner Parcourir et accéder à l'emplacement du fichier ou du dossier.

    Exemple de chemin de fichier : c:\StackUpgrade\terraform.tfstate

  4. Sélectionnez Importer.

    Le travail d'importation est créé. Le nouveau travail apparaît sous Travaux.

    Une fois le travail terminé, la page Détails du travail s'ouvre.

  5. Confirmer l'import réussi : sélectionnez Journaux.

    Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Obtention des journaux pour un travail.

Après une importation réussie du fichier d'état, passez à la tâche suivante pour rechercher les problèmes.

Tâche 6 : vérifier les problèmes

Cette tâche utilise la console. Pour obtenir des instructions sur l'interface de ligne de commande et l'API pour une étape, reportez-vous au lien associé.

  1. Sur la page de liste Piles, sélectionnez la pile à utiliser. Si vous avez besoin d'aide pour rechercher la page de liste ou la pile, reportez-vous à Liste des piles.
  2. Rechercher les modifications en attente de l'infrastructure :
    1. Sélectionnez Plan.

      Une fois l'action terminée, la page de détails du travail associé s'ouvre.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Création d'un travail de planification.

    2. Pour consulter le journal de l'action de plan terminée, sélectionnez Journaux.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Obtention des journaux pour un travail.

    3. Dans le contenu du journal, recherchez les problèmes décrits à la section Troubleshooting Logs During an Upgrade.

  3. Résolvez les problèmes répertoriés en mettant à jour manuellement la configuration Terraform, comme décrit dans Dépannage des journaux lors d'une mise à niveau.
  4. Sur la page de détails de la pile, sélectionnez Modifier, puis téléchargez la nouvelle configuration Terraform vers la pile.

    Vous pouvez faire glisser le fichier dans le contrôle de la boîte de dialogue ou sélectionner Parcourir et accéder à l'emplacement du fichier ou du dossier.

    Exemple de chemin de fichier : c:\StackUpgrade\MyConfigUpgraded.zip

    La boîte de dialogue est remplie avec les informations contenues dans la configuration Terraform.

    Remarque

    Ignorez cette étape de téléchargement si la configuration Terraform de la pile est stockée dans un système de contrôle de code source (tel que GitHub) ou dans un bucket Object Storage. La pile a été configurée pour utiliser la configuration Terraform mise à niveau dans Tâche 3 : mettre à niveau la configuration lorsque vous avez validé la modification dans le code source ou téléchargé le fichier vers le bucket.)
  5. Sélectionnez deux fois Suivant, puis Enregistrer les modifications.
  6. Exécutez à nouveau l'action de plan pour confirmer que les problèmes ne sont plus répertoriés dans le contenu du journal associé.
    1. Sélectionnez Plan.

      Une fois l'action terminée, la page de détails du travail associé s'ouvre.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Création d'un travail de planification.

    2. Pour consulter le journal de l'action de plan terminée, sélectionnez Journaux.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, reportez-vous à Obtention des journaux pour un travail.

Dépannage des journaux lors d'une mise à niveau

Voici quelques problèmes que vous pouvez rencontrer dans les journaux lors de la mise à niveau d'une pile vers une nouvelle version de Terraform. Cette liste est limitée à quelques problèmes que l'équipe de service Resource Manager connaît.

Erreur : échec de l'installation des fournisseurs

Le journal affiche un message d'erreur semblable au suivant.

Error:  Failed to install providers
Could not find required providers, but found possible alternatives:
hashicorp/gitlab -> gitlabhq/gitlab
If these suggestions look correct, upgrade your configuration with the following command:
terraform 0.13upgrade .

La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 0.13.x et ultérieures n'utilisent pas cette syntaxe pour les fournisseurs. Exemple de configuration à l'origine de cette erreur :

provider "gitlab" {
  token = "glpat-_abcd"
}  
# Add a project owned by the user
resource "gitlab_project" "sample_project" {
  name = "example"
}

Ajoutez un bloc required_providers et mentionnez explicitement les informations source pour le fournisseur. Pour plus d'informations, reportez-vous à Fournisseurs requis. Exemple de mise à jour :

terraform {
  required_providers {
    oci = {
      source  = "oracle/oci"
      version = "5.46"
    }
    gitlab = {
      source  = "gitlabhq/gitlab"
      version = "17.8.0"
    }
  }
}

Erreur : contraintes de type entre guillemets non valides

Le journal affiche un message d'erreur semblable au suivant.

Error: Invalid quoted type constraints on variables.tf line 18, in variable "vcn_dns_label"
 18:       type = "string"
Terraform 0.11 and earlier required type constraints to be given in quotes, 
but that form is now deprecated and will be removed in a future version of
Terraform. Remove the quotes around "string".

La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 1.0.x et ultérieures n'utilisent pas de guillemets pour les déclarations de type de variables. Exemple de configuration à l'origine de cette erreur :

variable "vcn_dns_label" {
  type  = "string"
  default = "vcn"
}

Supprimez les guillemets des déclarations de type des variables. Exemple de mise à jour :

variable "vcn_dns_label" {
  type = string
  default = "vcn"
}

Erreur : Erreur dans l'appel de fonction (mappage)

Le journal affiche un message d'erreur semblable au suivant.

Error: Error in function call
on main.tf line 44, in resource "oci_core_subnet" "this":
44:       display_name        = lookup(map("a", "b", "c", "d"), "a", "default")
────────────────
while calling map(vals...)
Call to function "map" failed: the "map" function was deprecated in Terraform v0.12 and 
is no longer available; use tomap({ ... }) syntax to write a literal map.

La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 1.0.x et ultérieures n'utilisent pas cette syntaxe pour les cartes. Exemple de configuration à l'origine de cette erreur :

resource "oci_core_subnet" "this" {
   ...
   ...
   vcn_id = lookup(map("a", 1, "b", 2), "a", "default")
   ...
   ...
}

Corrigez la syntaxe de la correspondance pour utiliser tomap(). Exemple de mise à jour :

resource "oci_core_subnet" "this" {
   ...
   ...
   vcn_id = lookup(tomap({"a" = 1, "b" = 2}), "a", "default")
   ...
   ...
}

Erreur : Erreur dans l'appel de fonction (liste)

Le journal affiche un message d'erreur semblable au suivant.

Error: Error in function call
on main.tf line 35, in resource "oci_core_subnet" "this"
  35:       count               = length(list("phx-ad-1"", ""phx-ad-2"))
Call to function "list"" failed: the ""list" function was deprecated in
Terraform v0.12 and is no longer available; use tolist([ ... ]) syntax to
write a literal list.

La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 1.0.x et ultérieures n'utilisent pas cette syntaxe pour les listes. Exemple de configuration à l'origine de cette erreur :

resource "oci_core_subnet" "this" {
   count = length(list("phx-ad-1", "phx-ad-2"))
   ...
   ...
}

Corrigez la syntaxe de la liste pour utiliser tolist(). Exemple de mise à jour :

resource "oci_core_subnet" "this" {
   count = length(tolist(["phx-ad-1", "phx-ad-2"]))
   ...
   ...
}

Erreur : la forme ["*"] du caractère générique ignore_changes est obsolète

Le journal affiche un message d'erreur semblable au suivant.

Getting providers from registry and/or custom terraform providers
resource "oci_core_subnet" "this"
  44:         ignore_changes = ["*"]
The ["*"] form of ignore_changes wildcard is was deprecated and is now
invalid. Use "ignore_changes = all" to ignore changes to all attributes.

La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 1.0.x et ultérieures n'utilisent pas cette syntaxe pour les caractères génériques ignore_changes. Exemple de configuration à l'origine de cette erreur :

resource "oci_core_subnet" "this" {
    ...
    ...
    lifecycle {
      ignore_changes = ["*"]
    }
}

Utilisez plutôt ignore_changes = all. Exemple de mise à jour :

resource "oci_core_subnet" "this" {
    ...
    ...
    lifecycle {
      ignore_changes = all
    }
}

Problème : Syntaxe HCL en phase d'abandon

Le journal indique l'existence d'une syntaxe HCL obsolète.

La configuration ne répond pas aux exigences de la version de Terraform indiquée.

Mettez à jour la configuration pour omettre la syntaxe HCL obsolète.