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

Mettez à niveau une pile dans le gestionnaire de ressources vers une version Terraform ultérieure.

Note

Ces instructions ne s'appliquent pas aux piles du gestionnaire de ressources créées au moyen du marché des applications.

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 le gestionnaire de ressources, voir Versions Terraform prises en charge.

Avant de commencer

Pour réussir la mise à niveau de votre pile, vous devez avoir les exigences suivantes :

Mise à jour automatique

Pour prendre en charge l'abandon de versions Terraform antérieures (plus tôt que 1.5.x), le gestionnaire de ressources tentera une mise à niveau automatique de la version Terraform. Cette mise à niveau automatique sera tentée chaque fois que vous exécuterez une tâche d'application réussie (l'état de la tâche est Réussite) sur une pile configurée pour une ancienne version de Terraform.

Note

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 1.5.x lors d'une ou plusieurs tentatives de mise à niveau réussies. L'utilisation de mises à niveau intermédiaires traite des différences de syntaxe HCL, des définitions de bloc fournisseur et des différences de fichier d'état, comme indiqué dans les instructions de mise à niveau manuelles. La version cible d'une mise à niveau est sélectionnée comme suit :
  • La version cible de 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 de la mise à niveau 0.14.x, 1.0.x, 1.1.x ou 1.2.x est 1.5.x.

La tentative de mise à niveau ne se produit qu'après le succès d'une tâche d'application (l'état de la tâche est Réussite).

  • Si la mise à niveau réussit, la version Terraform et le fichier d'état de la pile sont mis à niveau vers 1.5.x (ou version intermédiaire). Aucune autre action n'est requise.
  • Si la mise à niveau échoue, la version Terraform de la pile n'est pas modifiée et les ressources ne sont pas touchées. Un message d'échec de la mise à niveau s'affiche dans la page des détails de la pile. Dans ce cas, obtenez les journaux pour la tâche d'application (sélectionnez Afficher les journaux de mise à niveau terraform pour plus d'informations sur l'échec), puis mettez à jour la configuration Terraform. La prochaine tâche d'application réussie que vous exécuterez sur cette pile déclenchera le processus de mise à niveau automatique par le gestionnaire de ressources.
    Note

    Même si la mise à niveau échoue, l'état de la tâche est toujours Réussite.

Chemins de mise à niveau

Les chemins de mise à niveau pris en charge par la version initiale sont les suivants.

Version initiale de Terraform Chemin de mise à niveau
0.12 Dans l'ordre, effectuez la 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, la 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, effectuez une mise à niveau vers chaque version prise en charge : 1.1, 1.2, 1.5.
1.1 Dans l'ordre, effectuez une mise à niveau vers chaque version prise en charge : 1.2, 1.5.
1.2 Mettez à niveau vers 1.5.

Consultez les guides officiels de mise à niveau 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, voir le lien associé.

  1. Dans la page de liste Piles, sélectionnez la pile avec laquelle vous voulez travailler. Si vous avez besoin d'aide pour trouver la page de liste ou la pile, voir Liste des piles.
  2. Vérifiez que la page de détails de la pile affiche la version attendue (version Terraform).
    Pour obtenir des instructions sur l'interface de ligne de commande et l'API pour obtenir les détails d'une pile, voir Obtention des détails d'une pile.
  3. Rechercher les modifications en attente de l'infrastructure :
    1. Sélectionnez Planifier.

      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, voir Création d'une tâche 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 comporte des modifications en attente.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, voir Obtention des journaux pour une tâche.

      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 la pile pour retourner à 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, voir Création d'une tâche d'application.

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

    3. Confirmez que l'action d'application a réussi : Sélectionnez Journaux pour vérifier le journal de l'action de plan terminée.

      Pour obtenir des instructions sur l'interface de ligne de commande et l'API, voir Obtention des journaux pour une tâche.

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

Tâche 2 : Télécharger la configuration et l'état

Note

Si la configuration Terraform de la pile est stockée dans un système de contrôle de 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 seau, téléchargez-la à partir de là.

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

  1. Sur un ordinateur qui peut 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 : Dans la page de liste Piles, sélectionnez la pile avec laquelle vous voulez travailler. Si vous avez besoin d'aide pour trouver la page de liste ou la pile, voir Liste des piles.
  3. À côté de Configuration Terraform, sélectionnez Télécharger.

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

  4. Téléchargez le fichier d'état Terraform :
    1. Dans la page des détails de la pile, sélectionnez Voir l'état.
    2. Pour télécharger le fichier d'état de la pile, allez dans Actions supplémentaires et sélectionnez Télécharger l'état Terraform.

    Pour obtenir des instructions sur l'interface de ligne de commande et l'API, voir 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 pour mettre à niveau la configuration Terraform.

Tâche 3 : Mettre à niveau la configuration

Cette tâche fournit des étapes personnalisées pour mettre à niveau une configuration Terraform utilisée avec le gestionnaire de ressources.
  1. Sur l'ordinateur que vous avez utilisé pour stocker les fichiers de configuration et d'état Terraform téléchargés, téléchargez les fichiers .zip nécessaires pour mettre à niveau votre 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 la pile téléchargée.
    Exemple :
    cd c:\StackUpgrade
  8. Pour initialiser Terraform, exécutez la commande suivante :
    terraform_<major-version> init

    Exemple :

    terraform_13 init
  9. Pour mettre à niveau la syntaxe de votre configuration Terraform, exécutez la commande pour la version Terraform cible :
    Version cible de Terraform Commande
    0.13 terraform_13 13upgrade
    0.14 terraform_14 14upgrade
    1.0 et versions supérieures Aucun 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.

    Si vous réussissez, passez à l'étape suivante.

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

  10. Créez une archive .zip de vos 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 pour satisfaire à 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 la configuration Terraform mise à niveau là-bas.
    La validation la plus récente est utilisée lorsque vous exécutez des tâches sur la pile.
  12. Si un seau de stockage d'objets est utilisé pour la configuration Terraform de la pile, modifiez le contenu de ce seau pour qu'il corresponde à la configuration Terraform mise à niveau.
    Note

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

    Le contenu le plus récent du seau est utilisé lorsque vous exécutez des tâches sur la pile.

Lorsque la configuration Terraform a été mise à niveau vers la version Terraform cible, vous pouvez passer à la tâche suivante pour mettre à niveau 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 pour mettre à jour une pile, voir Mise à jour d'une pile.
  1. Dans la console, rouvrez la page de détails de la pile que vous mettez à niveau : Dans la page de liste Piles, sélectionnez la pile avec laquelle vous voulez travailler. Si vous avez besoin d'aide pour trouver la page de liste ou la pile, voir Liste des piles.
  2. Dans le menu Actions (trois points) de la pile, sélectionnez Modifier.
  3. Chargez la configuration Terraform mise à niveau dans la pile.

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

    Exemple de chemin d'accès au fichier : c:\StackUpgrade\MyConfigUpgraded.zip

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

    Note

    Ignorez cette étape de 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 seau de stockage d'objets, la pile a été configurée pour utiliser la configuration Terraform mise à niveau dans la tâche 3 : Mettre à niveau la configuration lorsque vous avez validé la modification du code source ou chargé le fichier dans le seau.)
  4. Spécifiez la version Terraform cible : Modifiez la version Terraform.
  5. Sélectionnez Suivant deux fois, puis Enregistrer les modifications.
La pile est maintenant synchronisée avec la configuration Terraform mise à niveau et la version Terraform spécifié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, voir Création d'une tâche d'importation.
  1. Dans la console, rouvrez la page de détails de la pile que vous mettez à niveau : Dans la page de liste Piles, sélectionnez la pile avec laquelle vous voulez travailler. Si vous avez besoin d'aide pour trouver la page de liste ou la pile, voir Liste des piles.
  2. Allez à Actions supplémentaires et sélectionnez État de l'importation.
  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 naviguer jusqu'à l'emplacement du fichier ou du dossier.

    Exemple de chemin d'accès au fichier : c:\StackUpgrade\terraform.tfstate

  4. Sélectionnez Importer.

    La tâche d'importation est créée. La nouvelle tâche est indiquée sous Tâches.

    Une fois la tâche terminée, la page Détails de la tâche s'ouvre.

  5. Confirmer l'importation réussie : Sélectionnez Journaux.

    Pour obtenir des instructions sur l'interface de ligne de commande et l'API, voir Obtention des journaux pour une tâche.

Après une importation réussie du fichier d'état, passez à la tâche suivante pour vérifier 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, voir le lien associé.

  1. Dans la page de liste Piles, sélectionnez la pile avec laquelle vous voulez travailler. Si vous avez besoin d'aide pour trouver la page de liste ou la pile, voir Liste des piles.
  2. Rechercher les modifications en attente de l'infrastructure :
    1. Sélectionnez Planifier.

      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, voir Création d'une tâche 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, voir Obtention des journaux pour une tâche.

    3. Dans le contenu du journal, recherchez les problèmes décrits sous Dépannage des journaux lors d'une mise à niveau.

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

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

    Exemple de chemin d'accès au fichier : c:\StackUpgrade\MyConfigUpgraded.zip

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

    Note

    Ignorez cette étape de 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 seau de stockage d'objets, la pile a été configurée pour utiliser la configuration Terraform mise à niveau dans la tâche 3 : Mettre à niveau la configuration lorsque vous avez validé la modification du code source ou chargé le fichier dans le seau.)
  5. Sélectionnez Suivant deux fois, puis Enregistrer les modifications.
  6. Exécutez de 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 Planifier.

      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, voir Création d'une tâche 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, voir Obtention des journaux pour une tâche.

Dépannage des journaux pendant une mise à niveau

Voici quelques problèmes que vous pourriez voir 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 du gestionnaire de ressources 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 Terraform spécifié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 sources pour le fournisseur. Pour plus d'informations, voir 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 cité 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 Terraform spécifié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 lors de 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 Terraform spécifiée. Les versions 1.0.x et ultérieures n'utilisent pas cette syntaxe pour les mappages. 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 pour que le mappage utilise tomap(). Exemple de mise à jour :

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

Erreur : Erreur lors de 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 Terraform spécifié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 pour que la liste utilise 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 Terraform spécifié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 obsolète

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

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

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