Stack auf eine spätere Terraform-Version upgraden
So aktualisieren Sie einen Stack in Resource Manager auf eine spätere Terraform-Version.
Diese Anweisungen gelten nicht für Resource Manager-Stacks, die über Marketplace erstellt wurden.
Diese Schritte werden in der Befehlszeile und in der Konsole ausgeführt.
Informationen zu Terraform-Versionen, die von Resource Manager unterstützt werden, finden Sie unter Unterstützte Terraform-Versionen.
Bevor Sie beginnen
Um Ihren Stack erfolgreich upzugraden, benötigen Sie die folgenden Voraussetzungen:
-
Ein MacOS-, Linux- oder Windows-Computer zum Ausführen von Befehlszeilentools
-
Software zum Erstellen und Entpacken von
.zip
-Archiven, wie 7-ZIP
Automatisches Upgrade
Um die Einstellung von älteren Terraform-Versionen (vorher als 1.5.x) zu unterstützen, führt Resource Manager ein automatisches Terraform-Versionsupgrade aus. Dieses automatische Upgrade wird immer dann versucht, wenn Sie einen erfolgreichen Apply-Job (Jobstatus ist erfolgreich) auf einem Stack ausführen, der für eine ältere Terraform-Version konfiguriert ist.
Die Zielversion für das versuchte Upgrade hängt von der aktuell konfigurierten Terraform-Version des Stacks ab. Durch automatische Intermediärupgrades wird der Stack bei mindestens einem erfolgreichen Upgradeversuch auf 1.5.x verschoben. Bei Zwischenupgrades werden Unterschiede in der HCL-Syntax, den Providerblockdefinitionen und den Unterschieden in Statusdateien behandelt, wie in den manuellen Upgradeanweisungen beschrieben. Die Zielversion für ein Upgrade wird wie folgt ausgewählt:
- Die Zielversion für das Upgrade 0.12.x ist 0.13.x.
- Die Zielversion für das Upgrade 0.13.x ist 0.14.x.
- Die Zielversion für das Upgrade von 0.14.x, 1.0.x, 1.1.x oder 1.2.x ist 1.5.x.
Der Upgradeversuch erfolgt erst, nachdem ein Apply-Job erfolgreich ausgeführt wurde (Jobstatus ist erfolgreich).
- Wenn das Upgrade erfolgreich verläuft, werden die Terraform-Version und die Statusdatei des Stacks auf 1.5.x (oder Intermediärversion) upgegradet. Keine weitere Maßnahme ist erforderlich.
- Wenn das Upgrade nicht erfolgreich verläuft, bleibt die Terraform-Version des Stacks unverändert, und die Ressourcen sind nicht betroffen. Auf der Detailseite des Stacks wird eine Meldung über einen Upgradefehler angezeigt. In dieser Situation rufen Sie Logs für den Apply-Job ab (wählen Sie Terraform-Upgradelogs anzeigen aus, um Informationen zum Fehler anzuzeigen), und aktualisieren Sie dann die Terraform-Konfiguration. Der nächste erfolgreiche Apply-Job, den Sie auf diesem Stack ausführen, löst den automatischen Upgradeprozess durch Resource Manager aus.Hinweis
Selbst wenn das Upgrade nicht erfolgreich verläuft, ist der Jobstatus weiterhin erfolgreich.
Upgradepfade
Die folgenden Upgradepfade werden von der anfänglichen Version unterstützt.
Ursprüngliche Terraform-Version | Upgradepfad |
---|---|
0,12 | Führen Sie nacheinander ein Upgrade auf jede unterstützte Version durch: 0.13, 0.14, 1.0 (empfohlen), 1.1, 1.2, 1.5. |
0,13 | Führen Sie nacheinander ein Upgrade auf jede unterstützte Version durch: 0.14, 1.0 (empfohlen), 1.1, 1.2, 1.5. |
0,14 | Führen Sie nacheinander ein Upgrade auf jede unterstützte Version durch: 1.0 (empfohlen), 1.1, 1.2, 1.5. |
1 | Führen Sie nacheinander ein Upgrade auf jede unterstützte Version durch: 1.1, 1.2, 1.5. |
1,1 | Führen Sie nacheinander ein Upgrade auf jede unterstützte Version durch: 1.2, 1.5. |
1,2 | Upgrade auf 1.5. |
Weitere Informationen finden Sie in den offiziellen Upgrade-Leitfäden von Terraform:
Aufgabe 1: Aktuelle Infrastruktur bestätigen
Diese Aufgabe verwendet die Konsole. CLI- und API-Anweisungen für einen Schritt finden Sie unter dem zugehörigen Link.
Aufgabe 2: Konfiguration und Status herunterladen
Wenn die Terraform-Konfiguration des Stacks in einem Quellcode-Kontrollsystem wie GitLab gespeichert ist, checken Sie die Terraform-Konfiguration aus, und laden Sie sie von dort herunter.
Wenn die Terraform-Konfiguration des Stacks in einem Bucket gespeichert ist, laden Sie die Terraform-Konfiguration von dort herunter.
Diese Aufgabe verwendet die Konsole. CLI- und API-Anweisungen für einen Schritt finden Sie unter dem zugehörigen Link.
Aufgabe 3: Konfiguration upgraden
Aufgabe 4: Stack upgraden
Aufgabe 5: Status importieren
Aufgabe 6: Auf Probleme prüfen
Diese Aufgabe verwendet die Konsole. CLI- und API-Anweisungen für einen Schritt finden Sie unter dem zugehörigen Link.
Protokolle während eines Upgrades beheben
Fehler: Provider konnten nicht installiert werden
Das Log zeigt eine Fehlermeldung wie die Folgende an.
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 .
Die Konfiguration erfüllt nicht die Anforderungen für die angegebene Terraform-Version. Version 0.13.x und höher verwenden diese Syntax nicht für Provider. Beispielkonfiguration, die diesen Fehler verursacht:
provider "gitlab" {
token = "glpat-_abcd"
}
# Add a project owned by the user
resource "gitlab_project" "sample_project" {
name = "example"
}
Fügen Sie einen required_providers
-Block hinzu, und geben Sie explizit die Quellinformationen für den Provider an. Weitere Informationen finden Sie unter Anfordernde Provider. Beispielaktualisierung:
terraform {
required_providers {
oci = {
source = "oracle/oci"
version = "5.46"
}
gitlab = {
source = "gitlabhq/gitlab"
version = "17.8.0"
}
}
}
Fehler: Ungültige Constraints für Typ in Anführungszeichen
Das Log zeigt eine Fehlermeldung wie die Folgende an.
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".
Die Konfiguration erfüllt nicht die Anforderungen für die angegebene Terraform-Version. Version 1.0.x und höher verwenden keine Anführungszeichen für Typdeklarationen von Variablen. Beispielkonfiguration, die diesen Fehler verursacht:
variable "vcn_dns_label" {
type = "string"
default = "vcn"
}
Entfernen Sie die Anführungszeichen aus Variablendeklarationen. Beispielaktualisierung:
variable "vcn_dns_label" {
type = string
default = "vcn"
}
Fehler: Fehler beim Funktionsaufruf (Map)
Das Log zeigt eine Fehlermeldung wie die Folgende an.
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.
Die Konfiguration erfüllt nicht die Anforderungen für die angegebene Terraform-Version. Version 1.0.x und höher verwenden diese Syntax nicht für Maps. Beispielkonfiguration, die diesen Fehler verursacht:
resource "oci_core_subnet" "this" {
...
...
vcn_id = lookup(map("a", 1, "b", 2), "a", "default")
...
...
}
Korrigieren Sie die Syntax für die Zuordnung, um tomap()
zu verwenden. Beispielaktualisierung:
resource "oci_core_subnet" "this" {
...
...
vcn_id = lookup(tomap({"a" = 1, "b" = 2}), "a", "default")
...
...
}
Fehler: Fehler beim Funktionsaufruf (Liste)
Das Log zeigt eine Fehlermeldung wie die Folgende an.
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.
Die Konfiguration erfüllt nicht die Anforderungen für die angegebene Terraform-Version. Version 1.0.x und höher verwenden diese Syntax nicht für Listen. Beispielkonfiguration, die diesen Fehler verursacht:
resource "oci_core_subnet" "this" {
count = length(list("phx-ad-1", "phx-ad-2"))
...
...
}
Korrigieren Sie die Syntax für die Liste, um tolist()
zu verwenden. Beispielaktualisierung:
resource "oci_core_subnet" "this" {
count = length(tolist(["phx-ad-1", "phx-ad-2"]))
...
...
}
Fehler: Das Formular ["*"] des Platzhalters ignore_changes ist veraltet
Das Log zeigt eine Fehlermeldung wie die Folgende an.
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.
Die Konfiguration erfüllt nicht die Anforderungen für die angegebene Terraform-Version. Version 1.0.x und höher verwenden diese Syntax nicht für ignore_changes
-Platzhalter. Beispielkonfiguration, die diesen Fehler verursacht:
resource "oci_core_subnet" "this" {
...
...
lifecycle {
ignore_changes = ["*"]
}
}
Verwenden Sie stattdessen ignore_changes = all
. Beispielaktualisierung:
resource "oci_core_subnet" "this" {
...
...
lifecycle {
ignore_changes = all
}
}
Problem: Veraltete HCL-Syntax
Das Protokoll weist auf das Vorhandensein einer veralteten HCL-Syntax hin.
Die Konfiguration erfüllt nicht die Anforderungen für die angegebene Terraform-Version.
Aktualisieren Sie die Konfiguration, um die veraltete HCL-Syntax auszulassen.