Stack auf eine spätere Terraform-Version upgraden

So aktualisieren Sie einen Stack in Resource Manager auf eine spätere Terraform-Version.

Hinweis

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:

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.

Hinweis

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.

  1. Wählen Sie auf der Listenseite Stacks den Stack aus, mit dem Sie arbeiten möchten. Wenn Sie Hilfe bei der Suche nach der Listenseite oder dem Stack benötigen, finden Sie weitere Informationen unter Stacks auflisten.
  2. Stellen Sie sicher, dass auf der Detailseite für den Stack die erwartete Version (Terraform-Version) angezeigt wird.
    CLI- und API-Anweisungen zum Abrufen der Details eines Stacks finden Sie unter Stackdetails abrufen.
  3. Auf ausstehende Änderungen an der Infrastruktur prüfen:
    1. Wählen Sie Plan aus.

      Wenn die Aktion abgeschlossen ist, wird die Detailseite für den zugehörigen Job geöffnet.

      CLI- und API-Anweisungen finden Sie unter Planjob erstellen.

    2. Um das Log auf die abgeschlossene Planaktion zu prüfen, wählen Sie Logs aus.

      Der Loginhalt gibt an, ob der Stack aktuell ist oder ausstehende Änderungen aufweist.

      CLI- und API-Anweisungen finden Sie unter Logs für einen Job abrufen.

      Beispiel für einen Stack, der aktuell ist (keine ausstehenden Änderungen):

      No changes. Infrastructure is up-to-date.

  4. Wenn der Loginhalt auf ausstehende Änderungen hinweist, wenden Sie ausstehende Änderungen an:
    1. Wählen Sie Stackdetails aus, um zur Detailseite für den Stack zurückzukehren.

    2. Wählen Sie Anwenden aus.

      CLI- und API-Anweisungen finden Sie unter Apply-Jobs erstellen.

      Wenn die Aktion abgeschlossen ist, wird die Detailseite für den zugehörigen Job geöffnet.

    3. Bestätigen Sie, dass die Aktion "Anwenden" erfolgreich war: Wählen Sie Logs aus, um das Log auf die abgeschlossene Planaktion zu prüfen.

      CLI- und API-Anweisungen finden Sie unter Logs für einen Job abrufen.

Wenn die Stackinfrastruktur auf dem neuesten Stand ist, können Sie mit der nächsten Aufgabe zum Herunterladen von Terraform-Konfigurations- und Statusdateien fortfahren.

Aufgabe 2: Konfiguration und Status herunterladen

Hinweis

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.

  1. Erstellen Sie auf einem Computer, auf dem Befehlszeilentools ausgeführt werden können, einen Ordner, in dem die heruntergeladene Terraform-Konfiguration und der Status gespeichert werden.
    Beispielordnername: c:\StackUpgrade
  2. Wählen Sie in der Konsole auf der Listenseite Stacks den Stack aus, mit dem Sie arbeiten möchten. Wenn Sie Hilfe bei der Suche nach der Listenseite oder dem Stack benötigen, finden Sie weitere Informationen unter Stacks auflisten.
  3. Wählen Sie neben der Terraform-Konfiguration die Option Herunterladen aus.

    CLI- und API-Anweisungen finden Sie unter Terraform-Konfiguration eines Stacks abrufen.

  4. Laden Sie die Terraform-Statusdatei herunter:
    1. Wählen Sie auf der Detailseite des Stacks die Option Status anzeigen aus.
    2. Um die Statusdatei des Stacks herunterzuladen, gehen Sie zu Weitere Aktionen, und wählen Sie Terraform-Status herunterladen aus.

    CLI- und API-Anweisungen finden Sie unter Stackstatusdatei abrufen.

Wenn die Terraform-Konfiguration und der Terraform-Status heruntergeladen werden, können Sie mit der nächsten Aufgabe zum Upgrade der Terraform-Konfiguration fortfahren.

Aufgabe 3: Konfiguration upgraden

Diese Aufgabe enthält benutzerdefinierte Schritte für das Upgrade einer Terraform-Konfiguration, die mit Resource Manager verwendet wird.
  1. Laden Sie auf demselben Computer, mit dem Sie die heruntergeladenen Terraform-Konfigurations- und -Statusdateien gespeichert haben, die .zip-Dateien herunter, die für das Upgrade der Terraform-Konfiguration erforderlich sind:
  2. Extrahieren Sie den Inhalt jeder .zip-Datei.
  3. Aktualisieren Sie die Providerkonfiguration, um Argumente wie user_ocid, fingerprint und private_key_path hinzuzufügen. Möglicherweise haben Sie diese Argumente vorher kommentiert.
    Beispiel für ausgekommentierte Argumente:
    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. Um Codebeispiele im Rest dieses Verfahrens zu befolgen, benennen Sie die extrahierte Datei in terraform_<major-version> um.
    Beispiel: terraform_13
  5. Um den Befehl (extrahierte Datei) zugänglich zu machen, speichern Sie ihn in einem Verzeichnis, das in Ihrem PATH-Verzeichnis vorhanden ist.
  6. Öffnen Sie eine Eingabeaufforderung.
  7. Wechseln Sie in das Verzeichnis, in dem Sie die heruntergeladenen Stackinformationen gespeichert haben.
    Beispiel:
    cd c:\StackUpgrade
  8. Um Terraform zu initialisieren, führen Sie den folgenden Befehl aus:
    terraform_<major-version> init

    Beispiel:

    terraform_13 init
  9. Um die Syntax Ihrer Terraform-Konfiguration zu aktualisieren, führen Sie den Befehl für die Terraform-Zielversion aus:
    Ziel-Terraform-Version Befehl
    0,13 terraform_13 13upgrade
    0,14 terraform_14 14upgrade
    1.0 und höher Nicht benötigt. Wenn die vorherigen Upgrades während des Prozesses erfolgreich angewendet wurden, sind keine besonderen Änderungen für das Upgrade der Konfiguration erforderlich.

    Die Ausgabe gibt an, ob das Upgrade erfolgreich war.

    Wenn dies erfolgreich ist, fahren Sie mit dem nächsten Schritt fort.

    Wenn dies nicht erfolgreich ist, nehmen Sie manuelle Änderungen an den Terraform-Konfigurationsdateien vor.

  10. Erstellen Sie ein .zip-Archiv der Terraform-Konfigurationsdateien.

    Beispielarchiv .zip: c:\StackUpgrade\MyConfigUpgraded.zip

    Stellen Sie sicher, dass das Archiv die Terraform-Statusdatei (terraform.tfstate) und das Verzeichnis .terraform auslässt, um die erforderliche Dateistruktur für Terraform-Konfigurationen zu erfüllen.

  11. Wenn ein Quellcodekontrollsystem (wie GitHub) für die Terraform-Konfiguration des Stacks verwendet wird, schreiben Sie die upgegradete Terraform-Konfiguration dort fest.
    Beim Ausführen von Jobs auf dem Stack werden jeweils die zuletzt festgeschriebenen Daten verwendet.
  12. Wenn ein Objektspeicher-Bucket für die Terraform-Konfiguration des Stacks verwendet wird, ändern Sie den Inhalt dieses Buckets so, dass er der upgegradeten Terraform-Konfiguration entspricht.
    Hinweis

    Sichern Sie den aktuellen Bucket, bevor Sie ihn entsprechend der upgegradeten Terraform-Konfiguration ändern. Begrenzen Sie den Bucket auf Dateien, die für die Verwendung mit Terraform bestimmt sind.

    Beim Ausführen von Jobs auf dem Stack werden die neuesten Inhalte des Buckets verwendet.

Wenn die Terraform-Konfiguration erfolgreich auf die Terraform-Zielversion upgegradet wurde, können Sie mit der nächsten Aufgabe zum Upgraden des Stacks fortfahren.

Aufgabe 4: Stack upgraden

Diese Aufgabe verwendet die Konsole. CLI- und API-Anweisungen zum Aktualisieren eines Stacks finden Sie unter Stacks aktualisieren.
  1. Öffnen Sie in der Konsole die Detailseite für den Stack, den Sie upgraden möchten, erneut: Wählen Sie auf der Listenseite Stacks den Stack aus, mit dem Sie arbeiten möchten. Wenn Sie Hilfe bei der Suche nach der Listenseite oder dem Stack benötigen, finden Sie weitere Informationen unter Stacks auflisten.
  2. Wählen Sie im Menü Aktionen (drei Punkte) für den Stack die Option Bearbeiten.
  3. Laden Sie die aktualisierte Terraform-Konfiguration in den Stack hoch.

    Sie können die Datei entweder auf das Steuerelement des Dialogfelds ziehen oder Durchsuchen auswählen und zum Speicherort der Datei oder des Ordners navigieren.

    Beispieldateipfad: c:\StackUpgrade\MyConfigUpgraded.zip

    Das Dialogfeld wird mit Informationen aus der Terraform-Konfiguration aufgefüllt.

    Hinweis

    Überspringen Sie diesen Uploadschritt, wenn die Terraform-Konfiguration des Stacks in einem Quellcodekontrollsystem (wie GitHub) oder in einem Objektspeicher-Bucket gespeichert ist. Anschließend wurde der Stack für die Verwendung der upgegradeten Terraform-Konfiguration in Aufgabe 3: Konfiguration upgraden konfiguriert, wenn Sie die Änderung am Quellcode festgeschrieben oder die Datei in den Bucket hochgeladen haben.)
  4. Geben Sie die Terraform-Zielversion an: Ändern Sie die Terraform-Version.
  5. Wählen Sie Weiter zweimal und dann Änderungen speichern aus.
Der Stack ist jetzt mit der upgegradeten Terraform-Konfiguration und der angegebenen Terraform-Version synchronisiert. Sie können jetzt mit der nächsten Aufgabe zum Importieren der Statusdatei fortfahren.

Aufgabe 5: Status importieren

Diese Aufgabe verwendet die Konsole. CLI- und API-Anweisungen finden Sie unter Importjob erstellen.
  1. Öffnen Sie in der Konsole die Detailseite für den Stack, den Sie upgraden möchten, erneut: Wählen Sie auf der Listenseite Stacks den Stack aus, mit dem Sie arbeiten möchten. Wenn Sie Hilfe bei der Suche nach der Listenseite oder dem Stack benötigen, finden Sie weitere Informationen unter Stacks auflisten.
  2. Gehen Sie zu Weitere Aktionen, und wählen Sie Importstatus aus.
  3. Fügen Sie im Bereich Importieren die heruntergeladene Terraform-Statusdatei hinzu.

    Sie können die Datei entweder auf das Steuerelement des Dialogfelds ziehen oder Durchsuchen auswählen und zum Speicherort der Datei oder des Ordners navigieren.

    Beispieldateipfad: c:\StackUpgrade\terraform.tfstate

  4. Wählen Sie Importieren aus.

    Der Importjob wird erstellt. Der neue Job wird unter Jobs aufgeführt.

    Wenn der Job abgeschlossen ist, wird die Seite Jobdetails geöffnet.

  5. Erfolgreichen Import bestätigen: Wählen Sie Logs aus.

    CLI- und API-Anweisungen finden Sie unter Logs für einen Job abrufen.

Fahren Sie nach einem erfolgreichen Import der Statusdatei mit der nächsten Aufgabe fort, um Probleme zu prüfen.

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.

  1. Wählen Sie auf der Listenseite Stacks den Stack aus, mit dem Sie arbeiten möchten. Wenn Sie Hilfe bei der Suche nach der Listenseite oder dem Stack benötigen, finden Sie weitere Informationen unter Stacks auflisten.
  2. Auf ausstehende Änderungen an der Infrastruktur prüfen:
    1. Wählen Sie Plan aus.

      Wenn die Aktion abgeschlossen ist, wird die Detailseite für den zugehörigen Job geöffnet.

      CLI- und API-Anweisungen finden Sie unter Planjob erstellen.

    2. Um das Log auf die abgeschlossene Planaktion zu prüfen, wählen Sie Logs aus.

      CLI- und API-Anweisungen finden Sie unter Logs für einen Job abrufen.

    3. Prüfen Sie im Protokollinhalt auf Probleme, die unter Troubleshooting Logs During an Upgrade beschrieben sind.

  3. Beheben Sie alle aufgeführten Probleme, indem Sie die Terraform-Konfiguration manuell aktualisieren, wie unter Fehlerbehebung bei Logs während eines Upgrades beschrieben.
  4. Wählen Sie auf der Detailseite für den Stack die Option Bearbeiten aus, und laden Sie die neu aktualisierte Terraform-Konfiguration in den Stack hoch.

    Sie können die Datei entweder auf das Steuerelement des Dialogfelds ziehen oder Durchsuchen auswählen und zum Speicherort der Datei oder des Ordners navigieren.

    Beispieldateipfad: c:\StackUpgrade\MyConfigUpgraded.zip

    Das Dialogfeld wird mit Informationen aus der Terraform-Konfiguration aufgefüllt.

    Hinweis

    Überspringen Sie diesen Uploadschritt, wenn die Terraform-Konfiguration des Stacks in einem Quellcodekontrollsystem (wie GitHub) oder in einem Objektspeicher-Bucket gespeichert ist. Anschließend wurde der Stack für die Verwendung der upgegradeten Terraform-Konfiguration in Aufgabe 3: Konfiguration upgraden konfiguriert, wenn Sie die Änderung am Quellcode festgeschrieben oder die Datei in den Bucket hochgeladen haben.)
  5. Wählen Sie Weiter zweimal und dann Änderungen speichern aus.
  6. Führen Sie die Planaktion erneut aus, um zu bestätigen, dass die Probleme nicht mehr im zugehörigen Loginhalt aufgeführt sind.
    1. Wählen Sie Plan aus.

      Wenn die Aktion abgeschlossen ist, wird die Detailseite für den zugehörigen Job geöffnet.

      CLI- und API-Anweisungen finden Sie unter Planjob erstellen.

    2. Um das Log auf die abgeschlossene Planaktion zu prüfen, wählen Sie Logs aus.

      CLI- und API-Anweisungen finden Sie unter Logs für einen Job abrufen.

Protokolle während eines Upgrades beheben

Im Folgenden werden einige Probleme aufgeführt, die beim Upgrade eines Stacks auf eine neue Terraform-Version möglicherweise in Logs angezeigt werden. Diese Liste ist auf einige Probleme beschränkt, die dem Resource Manager-Serviceteam bekannt sind.

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.