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.
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 :
-
Un ordinateur MacOS, Linux ou Windows pour exécuter des outils de ligne de commande
-
Logiciel pour créer et déballer des archives
.zip
, telles que 7-ZIP -
Politiques du service IAM pour gérer les piles et les tâches
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.
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é.
Tâche 2 : Télécharger la configuration et l'état
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é.
Tâche 3 : Mettre à niveau la configuration
Tâche 4 : Mettre à niveau la pile
Tâche 5 : Importer l'état
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é.
Dépannage des journaux pendant une mise à niveau
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.