Aggiornamento di uno stack a una versione successiva di Terraform

Eseguire l'upgrade di uno stack in Resource Manager a una versione successiva di Terraform.

Nota

Queste istruzioni non si applicano agli stack di Resource Manager creati tramite Marketplace.

Questi passi vengono completati nella riga di comando e nella console.

Per informazioni sulle versioni Terraform supportate da Resource Manager, vedere Versioni Terraform supportate.

Informazioni preliminari

Per eseguire correttamente l'upgrade dello stack, è necessario disporre dei seguenti requisiti:

  • Un computer MacOS, Linux o Windows per l'esecuzione di strumenti della riga di comando

  • Software per creare e decomprimere archivi .zip, ad esempio 7-ZIP

  • Criteri IAM per gestire stack e job

Upgrade automatico

Per supportare l'obsolescenza delle versioni Terraform precedenti alla versione 1.5.x, Resource Manager tenterà di eseguire un upgrade automatico della versione Terraform. Questo upgrade automatico verrà tentato ogni volta che si esegue un job di applicazione riuscito (lo stato del job è riuscito) in uno stack configurato per una versione Terraform precedente.

Nota

La versione di destinazione per l'upgrade tentato dipende dalla versione Terraform attualmente configurata dello stack. Gli aggiornamenti automatici intermedi spostano lo stack verso 1.5.x in uno o più tentativi di aggiornamento riusciti. L'utilizzo di aggiornamenti intermedi ruota attorno alle differenze nella sintassi HCL, nelle definizioni dei blocchi dei provider e nelle differenze tra i file di stato, come descritto nelle istruzioni di aggiornamento manuale. La versione di destinazione di un aggiornamento è selezionata come indicato di seguito.
  • La versione di destinazione per l'aggiornamento 0.12.x è 0.13.x.
  • La versione di destinazione per l'aggiornamento 0.13.x è 0.14.x.
  • La versione di destinazione per l'aggiornamento 0.14.x, 1.0.x, 1.1.x o 1.2.x è 1.5.x.

Il tentativo di aggiornamento si verifica solo dopo che un job di applicazione ha esito positivo (lo stato del job è riuscito).

  • Se l'upgrade riesce, la versione e il file di stato Terraform dello stack vengono aggiornati alla versione 1.5.x (o alla versione intermedia). Non sono richieste altre azioni.
  • Se l'upgrade non riesce, la versione Terraform dello stack rimane invariata e le risorse non sono interessate. Viene visualizzato un messaggio di errore di aggiornamento nella pagina dei dettagli dello stack. In questa situazione, ottenere i log per il job di applicazione (selezionare Mostra log di aggiornamento di terraform per informazioni sull'errore), quindi aggiornare la configurazione Terraform. Il successivo job di applicazione riuscito eseguito su questo stack attiverà il processo di upgrade automatico da parte di Resource Manager.
    Nota

    Anche se l'aggiornamento non riesce, lo stato del job è comunque riuscito.

Percorsi di aggiornamento

Di seguito sono riportati i percorsi di aggiornamento supportati dalla versione iniziale.

Versione di Terraform iniziale Percorso di aggiornamento
0,12 Eseguire l'aggiornamento in sequenza a tutte le versioni supportate: 0.13, 0.14, 1.0 (consigliato), 1.1, 1.2, 1.5.
0,13 Eseguire l'aggiornamento in sequenza a tutte le versioni supportate: 0.14, 1.0 (consigliato), 1.1, 1.2, 1.5.
0,14 Eseguire l'aggiornamento a ciascuna versione supportata: 1.0 (consigliato), 1.1, 1.2, 1.5.
1 Eseguire l'aggiornamento a ciascuna versione supportata: 1.1, 1.2, 1.5.
1,1 In sequenza, eseguire l'aggiornamento a ciascuna versione supportata: 1.2, 1.5.
1,2 Aggiorna a 1.5.

Consulta le guide ufficiali per l'upgrade di Terraform:

Task 1: Conferma infrastruttura aggiornata

Questo task utilizza la console. Per istruzioni sull'interfaccia CLI e sull'interfaccia API relative a un passo, vedere il collegamento associato.

  1. Nella pagina elenco Stack, selezionare lo stack con cui si desidera lavorare. Se è necessaria assistenza per trovare la pagina della lista o lo stack, vedere Stack lista.
  2. Verificare che la pagina dei dettagli dello stack mostri la versione prevista (versione Terraform).
    Per istruzioni su CLI e API per ottenere i dettagli di uno stack, vedere Ottenere i dettagli di uno stack.
  3. Controllare le modifiche in sospeso all'infrastruttura:
    1. Selezionare Piano.

      Al termine dell'azione, viene visualizzata la pagina dei dettagli per il job correlato.

      Per istruzioni su CLI e API, vedere Creazione di un job piano.

    2. Per esaminare il log dell'azione piano completata, selezionare Log.

      Il contenuto del log indica se lo stack è aggiornato o contiene modifiche in sospeso.

      Per istruzioni sull'interfaccia CLI e sull'API, vedere Come ottenere i log per un job.

      Esempio per uno stack aggiornato (nessuna modifica in sospeso):

      No changes. Infrastructure is up-to-date.

  4. Se il contenuto del log indica modifiche in sospeso, applicare le modifiche in sospeso:
    1. Selezionare Dettagli stack per tornare alla pagina dei dettagli dello stack.

    2. Selezionare Applica.

      Per istruzioni sull'interfaccia CLI e sull'API, vedere Creazione di un job di candidatura.

      Al termine dell'azione, viene visualizzata la pagina dei dettagli per il job correlato.

    3. Confermare che l'azione di applicazione è riuscita: selezionare Log per esaminare il log dell'azione piano completata.

      Per istruzioni sull'interfaccia CLI e sull'API, vedere Come ottenere i log per un job.

Quando l'infrastruttura dello stack è aggiornata, è possibile passare al task successivo per il download dei file di configurazione e stato Terraform.

Task 2: Scarica configurazione e stato

Nota

Se la configurazione Terraform dello stack è memorizzata in un sistema di controllo del codice sorgente, ad esempio GitLab, eseguire il check-out e scaricare la configurazione Terraform da tale sistema.

Se la configurazione Terraform dello stack è memorizzata in un bucket, scaricare la configurazione Terraform da tale posizione.

Questo task utilizza la console. Per istruzioni sull'interfaccia CLI e sull'interfaccia API relative a un passo, vedere il collegamento associato.

  1. In un computer in grado di eseguire gli strumenti della riga di comando, creare una cartella in cui memorizzare la configurazione e lo stato Terraform scaricati.
    Nome cartella di esempio: c:\StackUpgrade
  2. Nella console: nella pagina elenco Stack, selezionare lo stack che si desidera utilizzare. Se è necessaria assistenza per trovare la pagina della lista o lo stack, vedere Elenca stack.
  3. Accanto alla configurazione Terraform, selezionare Scarica.

    Per istruzioni sull'interfaccia CLI e sull'API, vedere Come ottenere la configurazione Terraform di uno stack.

  4. Scaricare il file di stato Terraform:
    1. Nella pagina dei dettagli dello stack selezionare Visualizza stato.
    2. Per scaricare il file di stato dello stack, andare ad Altre azioni e selezionare Scarica stato Terraform.

    Per istruzioni su CLI e API, vedere Ottenere il file di stato di uno stack.

Quando vengono scaricati la configurazione e lo stato Terraform, è possibile passare al task successivo per l'upgrade della configurazione Terraform.

Task 3: aggiornare la configurazione

Questo task fornisce passi personalizzati per l'upgrade di una configurazione Terraform utilizzata con Resource Manager.
  1. Nello stesso computer utilizzato per archiviare i file di configurazione e stato Terraform scaricati, scaricare i file .zip necessari per eseguire l'upgrade della configurazione Terraform:
  2. Estrarre il contenuto di ciascun file .zip.
  3. Aggiornare la configurazione del provider per aggiungere argomenti quali user_ocid, fingerprint e private_key_path. Potresti aver già commentato questi argomenti.
    Esempio di argomenti commentati:
    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. Per seguire esempi di codice nel resto di questa procedura, rinominare il file estratto come terraform_<major-version>.
    Esempio: terraform_13
  5. Per rendere accessibile il comando (file estratto), memorizzarlo in una directory presente nella directory PATH.
  6. Avviare un prompt dei comandi.
  7. Spostarsi nella directory in cui sono state memorizzate le informazioni sullo stack scaricato.
    Ad esempio:
    cd c:\StackUpgrade
  8. Per inizializzare Terraform, eseguire il comando seguente:
    terraform_<major-version> init

    Ad esempio:

    terraform_13 init
  9. Per aggiornare la sintassi della configurazione Terraform, eseguire il comando per la versione Terraform di destinazione:
    Versione di Terraform di destinazione Comando
    0,13 terraform_13 13upgrade
    0,14 terraform_14 14upgrade
    1.0 e versioni successive Nessuna azione necessaria. Se durante il processo sono stati applicati correttamente gli aggiornamenti precedenti, non sono necessarie modifiche speciali per l'aggiornamento della configurazione.

    L'output indica se l'aggiornamento è riuscito.

    In caso di esito positivo, continuare con il passo successivo.

    Se l'operazione non riesce, apportare le modifiche manuali ai file di configurazione Terraform come indicato.

  10. Creare un archivio .zip dei file di configurazione Terraform.

    Esempio di archivio .zip: c:\StackUpgrade\MyConfigUpgraded.zip

    Assicurarsi che l'archivio ometta il file di stato Terraform (terraform.tfstate) e la directory .terraform per soddisfare la struttura di file richiesta per le configurazioni Terraform.

  11. Se per la configurazione Terraform dello stack viene utilizzato un sistema di controllo del codice sorgente, ad esempio GitHub, eseguire il commit della configurazione Terraform aggiornata.
    Il commit più recente viene utilizzato quando si eseguono job nello stack.
  12. Se per la configurazione Terraform dello stack viene utilizzato un bucket di storage degli oggetti, modificare il contenuto di tale bucket in modo che corrisponda alla configurazione Terraform aggiornata.
    Nota

    Eseguire il backup del bucket corrente prima di modificarlo in modo che corrisponda alla configurazione Terraform aggiornata. Limitare il bucket ai file destinati all'uso con Terraform.

    I contenuti più recenti del bucket vengono utilizzati quando si eseguono i job nello stack.

Quando l'upgrade della configurazione Terraform alla versione di Terraform di destinazione riesce, è possibile passare al task successivo per l'upgrade dello stack.

Task 4: Aggiorna lo stack

Questo task utilizza la console. Per istruzioni su CLI e API per l'aggiornamento di uno stack, vedere Aggiornamento di uno stack.
  1. Nella console, riaprire la pagina dei dettagli per lo stack che si sta eseguendo l'upgrade: nella pagina della lista Stack selezionare lo stack con cui si desidera lavorare. Se è necessaria assistenza per trovare la pagina della lista o lo stack, vedere Elenca stack.
  2. Dal menu Azioni (tre punti) per lo stack, selezionare Modifica.
  3. Caricare la configurazione Terraform aggiornata nello stack.

    È possibile trascinare il file nel controllo della finestra di dialogo oppure selezionare Sfoglia e passare alla posizione del file o della cartella.

    Percorso file di esempio: c:\StackUpgrade\MyConfigUpgraded.zip

    La finestra di dialogo viene popolata con le informazioni contenute nella configurazione Terraform.

    Nota

    Saltare questo passo di caricamento se la configurazione Terraform dello stack è memorizzata in un sistema di controllo del codice sorgente (ad esempio GitHub) o in un bucket di storage degli oggetti, lo stack è stato configurato per utilizzare la configurazione Terraform aggiornata in Task 3: Aggiorna configurazione quando è stato eseguito il commit della modifica al codice sorgente o il caricamento del file nel bucket.
  4. Specificare la versione Terraform di destinazione: modificare la versione Terraform.
  5. Selezionare due volte Avanti, quindi selezionare Salva modifiche.
Lo stack è ora sincronizzato con la configurazione Terraform aggiornata e la versione Terraform specificata. Ora è possibile passare al task successivo per l'importazione del file di stato.

Task 5: Importa lo stato

Questo task utilizza la console. Per istruzioni sull'interfaccia CLI e sull'API, vedere Creazione di un job di importazione.
  1. Nella console, riaprire la pagina dei dettagli per lo stack che si sta eseguendo l'upgrade: nella pagina della lista Stack selezionare lo stack con cui si desidera lavorare. Se è necessaria assistenza per trovare la pagina della lista o lo stack, vedere Elenca stack.
  2. Andare ad Altre azioni e selezionare Stato importazione.
  3. Nel pannello Importa aggiungere il file di stato Terraform scaricato.

    È possibile trascinare il file nel controllo della finestra di dialogo oppure selezionare Sfoglia e passare alla posizione del file o della cartella.

    Percorso file di esempio: c:\StackUpgrade\terraform.tfstate

  4. Selezionare Importa.

    Processo di importazione creato. Il nuovo job viene elencato in Job.

    Al termine del job, viene visualizzata la pagina Dettagli job.

  5. Conferma importazione riuscita: selezionare Log.

    Per istruzioni sull'interfaccia CLI e sull'API, vedere Come ottenere i log per un job.

Dopo aver importato correttamente il file di stato, passare al task successivo per verificare la presenza di problemi.

Task 6: Controlla problemi

Questo task utilizza la console. Per istruzioni sull'interfaccia CLI e sull'interfaccia API relative a un passo, vedere il collegamento associato.

  1. Nella pagina elenco Stack, selezionare lo stack con cui si desidera lavorare. Se è necessaria assistenza per trovare la pagina della lista o lo stack, vedere Stack lista.
  2. Controllare le modifiche in sospeso all'infrastruttura:
    1. Selezionare Piano.

      Al termine dell'azione, viene visualizzata la pagina dei dettagli per il job correlato.

      Per istruzioni su CLI e API, vedere Creazione di un job piano.

    2. Per esaminare il log dell'azione piano completata, selezionare Log.

      Per istruzioni sull'interfaccia CLI e sull'API, vedere Come ottenere i log per un job.

    3. Nel contenuto del log verificare la presenza di problemi descritti alla pagina Risoluzione dei problemi relativi ai log durante un aggiornamento.

  3. Risolvere eventuali problemi elencati aggiornando manualmente la configurazione di Terraform, come descritto nella sezione Risoluzione dei problemi relativi ai log durante un upgrade.
  4. Nella pagina dei dettagli dello stack, selezionare Modifica, quindi caricare la configurazione Terraform appena aggiornata nello stack.

    È possibile trascinare il file nel controllo della finestra di dialogo oppure selezionare Sfoglia e passare alla posizione del file o della cartella.

    Percorso file di esempio: c:\StackUpgrade\MyConfigUpgraded.zip

    La finestra di dialogo viene popolata con le informazioni contenute nella configurazione Terraform.

    Nota

    Saltare questo passo di caricamento se la configurazione Terraform dello stack è memorizzata in un sistema di controllo del codice sorgente (ad esempio GitHub) o in un bucket di storage degli oggetti, lo stack è stato configurato per utilizzare la configurazione Terraform aggiornata in Task 3: Aggiorna configurazione quando è stato eseguito il commit della modifica al codice sorgente o il caricamento del file nel bucket.
  5. Selezionare due volte Avanti, quindi selezionare Salva modifiche.
  6. Eseguire di nuovo l'azione del piano per confermare che i problemi non sono più elencati nel contenuto del log associato.
    1. Selezionare Piano.

      Al termine dell'azione, viene visualizzata la pagina dei dettagli per il job correlato.

      Per istruzioni su CLI e API, vedere Creazione di un job piano.

    2. Per esaminare il log dell'azione piano completata, selezionare Log.

      Per istruzioni sull'interfaccia CLI e sull'API, vedere Come ottenere i log per un job.

Risoluzione dei problemi relativi ai log durante un aggiornamento

Di seguito sono riportati alcuni problemi che potrebbero verificarsi nei log durante l'upgrade di uno stack a una nuova versione di Terraform. Questo elenco è limitato ad alcuni problemi che il team del servizio Resource Manager conosce.

Errore: installazione dei provider non riuscita

Il log mostra un messaggio di errore simile al seguente.

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 configurazione non soddisfa i requisiti per la versione Terraform specificata. La versione 0.13.x e successive non utilizza questa sintassi per i provider. Configurazione di esempio che causa questo errore:

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

Aggiungere un blocco required_providers e menzionare esplicitamente le informazioni di origine per il provider. Per ulteriori informazioni, vedere Fornitori obbligatori. Aggiornamento di esempio:

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

Errore: vincoli tipo citato non validi

Il log mostra un messaggio di errore simile al seguente.

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 configurazione non soddisfa i requisiti per la versione Terraform specificata. Le versioni 1.0.x e successive non utilizzano le virgolette per le dichiarazioni di tipo delle variabili. Configurazione di esempio che causa questo errore:

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

Rimuovere le virgolette dalle dichiarazioni di tipo delle variabili. Aggiornamento di esempio:

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

Errore: errore nella chiamata di funzione (mappa)

Il log mostra un messaggio di errore simile al seguente.

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 configurazione non soddisfa i requisiti per la versione Terraform specificata. La versione 1.0.x e successive non utilizza questa sintassi per le mappe. Configurazione di esempio che causa questo errore:

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

Correggere la sintassi della mappa per utilizzare tomap(). Aggiornamento di esempio:

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

Errore: errore nella chiamata di funzione (elenco)

Il log mostra un messaggio di errore simile al seguente.

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 configurazione non soddisfa i requisiti per la versione Terraform specificata. La versione 1.0.x e successive non utilizza questa sintassi per gli elenchi. Configurazione di esempio che causa questo errore:

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

Correggere la sintassi dell'elenco per utilizzare tolist(). Aggiornamento di esempio:

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

Errore: il formato ["*"] del carattere jolly ignore_changes non è più valido

Il log mostra un messaggio di errore simile al seguente.

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 configurazione non soddisfa i requisiti per la versione Terraform specificata. La versione 1.0.x e successive non utilizza questa sintassi per i caratteri jolly ignore_changes. Configurazione di esempio che causa questo errore:

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

Utilizzare ignore_changes = all. Aggiornamento di esempio:

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

Problema: sintassi HCL non più valida

Il log indica l'esistenza di una sintassi HCL non più valida.

La configurazione non soddisfa i requisiti per la versione Terraform specificata.

Aggiornare la configurazione per omettere la sintassi HCL non più valida.