Actualización de una pila a una versión de Terraform posterior

Cambie la versión de una pila en Resource Manager a una versión posterior de Terraform.

Nota

Estas instrucciones no se aplican a las pilas de Resource Manager creadas a través de Marketplace.

Estos pasos se realizan en la línea de comandos y en la consola.

Para obtener información sobre las versiones de Terraform soportadas por Resource Manager, consulte Versiones de Terraform soportadas.

Antes de empezar

Para actualizar correctamente la pila, debe tener los siguientes requisitos:

Actualización automática

Para soportar el desuso de versiones anteriores de Terraform (anteriores a la versión 1.5.x), Resource Manager intentará una actualización automática de la versión de Terraform. Este cambio de versión automático se intentará siempre que ejecute un trabajo de aplicación correcto (el estado del trabajo se realiza correctamente) en una pila configurada para una versión anterior de Terraform.

Nota

La versión de destino del intento de cambio de versión depende de la versión de Terraform configurada actualmente de la pila. Las actualizaciones automáticas intermediarias mueven la pila hacia 1.5.x en uno o más intentos de actualización correctos. El uso de actualizaciones intermedias resuelve las diferencias en la sintaxis de HCL, las definiciones de bloques de proveedores y las diferencias en los archivos de estado, como se explica en las instrucciones de actualización manual. La versión de destino para una actualización se selecciona de la siguiente manera:
  • La versión de destino para actualizar 0.12.x es 0.13.x.
  • La versión de destino para actualizar 0.13.x es 0.14.x.
  • La versión de destino para actualizar 0.14.x, 1.0.x, 1.1.x o 1.2.x es 1.5.x.

El intento de actualización sólo se produce después de que un trabajo de aplicación se realiza correctamente (el estado del trabajo se realiza correctamente).

  • Si la actualización se realiza correctamente, la versión y el archivo de estado de Terraform de la pila se actualizan a 1.5.x (o versión intermedia). No es necesario realizar ninguna acción.
  • Si el cambio de versión falla, la versión de Terraform de la pila no cambia y los recursos no se ven afectados. Aparece un mensaje de fallo de cambio de versión en la página de detalles de la pila. En esta situación, obtenga logs para el trabajo de aplicación (seleccione Mostrar logs de cambio de versión de terraform para obtener información sobre el fallo) y, a continuación, actualice la configuración de Terraform. El siguiente trabajo de aplicación correcto que ejecute en esta pila disparará el proceso de actualización automática por Resource Manager.
    Nota

    Incluso si el cambio de versión falla, el estado del trabajo sigue siendo correcto.

Rutas de Actualización

A continuación, se muestran las rutas de actualización admitidas por versión inicial.

Versión inicial de Terraform Ruta de Actualización de Actualización
0,12 En secuencia, actualice a cada versión admitida: 0.13, 0.14, 1.0 (recomendado), 1.1, 1.2, 1.5.
0,13 En secuencia, actualice a cada versión admitida: 0.14, 1.0 (recomendado), 1.1, 1.2, 1.5.
0,14 En secuencia, actualice a cada versión admitida: 1.0 (recomendado), 1.1, 1.2, 1.5.
1 En secuencia, actualice a cada versión admitida: 1.1, 1.2, 1.5.
1,1 En secuencia, actualice a cada versión admitida: 1.2, 1.5.
1,2 Actualizar a 1.5.

Consulte las guías oficiales de actualización de Terraform:

Tarea 1: Confirmar Infraestructura Actualizada

Esta tarea utiliza la consola. Para obtener instrucciones de la CLI y la API para un paso, consulte el enlace asociado.

  1. En la página de lista Pilas, seleccione la pila con la que desea trabajar. Si necesita ayuda para buscar la página de lista o la pila, consulte Listado de pilas.
  2. Confirme que la página de detalles de la pila muestra la versión esperada (versión de Terraform).
    Para obtener instrucciones de la CLI y la API para obtener los detalles de una pila, consulte Obtención de detalles de una pila.
  3. Compruebe si hay cambios pendientes en la infraestructura:
    1. Seleccione Plan.

      Cuando finaliza la acción, se abre la página de detalles del trabajo relacionado.

      Para obtener instrucciones sobre la CLI y la API, consulte Creación de un trabajo de plan.

    2. Para revisar el log de la acción de plan completada, seleccione Logs.

      El contenido del log indica si la pila está actualizada o tiene cambios pendientes.

      Para obtener instrucciones sobre la CLI y la API, consulte Obtención de logs para un trabajo.

      Ejemplo para una pila que está actualizada (sin cambios pendientes):

      No changes. Infrastructure is up-to-date.

  4. Si el contenido del log indica cambios pendientes, aplique los cambios pendientes:
    1. Seleccione Detalles de pila para volver a la página de detalles de la pila.

    2. Seleccione Aplicar.

      Para obtener instrucciones sobre la CLI y la API, consulte Creación de un trabajo de aplicación.

      Cuando finaliza la acción, se abre la página de detalles del trabajo relacionado.

    3. Confirme que la acción de aplicación se ha realizado correctamente: seleccione Logs para revisar el log de la acción de plan finalizada.

      Para obtener instrucciones sobre la CLI y la API, consulte Obtención de logs para un trabajo.

Cuando la infraestructura de pila esté actualizada, puede continuar con la siguiente tarea para descargar los archivos de estado y configuración de Terraform.

Tarea 2: Descarga de la configuración y el estado

Nota

Si la configuración de Terraform de la pila se almacena en un sistema de control de código fuente, como GitLab, desproteja y descargue la configuración de Terraform desde allí.

Si la configuración de Terraform de la pila se almacena en un cubo, descargue la configuración de Terraform desde allí.

Esta tarea utiliza la consola. Para obtener instrucciones de la CLI y la API para un paso, consulte el enlace asociado.

  1. En una computadora que pueda ejecutar herramientas de línea de comandos, cree una carpeta para almacenar la configuración y el estado de Terraform descargados.
    Nombre de carpeta de ejemplo: c:\StackUpgrade
  2. En la consola: en la página de lista Pilas, seleccione la pila con la que desea trabajar. Si necesita ayuda para buscar la página de lista o la pila, consulte Listado de pilas.
  3. Junto a Configuración de Terraform, seleccione Descargar.

    Para obtener instrucciones sobre la CLI y la API, consulte Obtención de la configuración de Terraform de una pila.

  4. Descargue el archivo de estado de Terraform:
    1. En la página de detalles de la pila, seleccione Ver estado.
    2. Para descargar el archivo de estado de la pila, vaya a Más acciones y seleccione Descargar estado de Terraform.

    Para obtener instrucciones de la CLI y la API, consulte Getting a Stack's State File.

Cuando se descargue el estado y la configuración de Terraform, puede continuar con la siguiente tarea para actualizar la configuración de Terraform.

Tarea 3: Actualización de la configuración

Esta tarea proporciona pasos personalizados para actualizar una configuración de Terraform que se utiliza con Resource Manager.
  1. En la misma computadora que utilizó para almacenar los archivos de estado y configuración de Terraform descargados, descargue los archivos .zip necesarios para actualizar la configuración de Terraform:
  2. Extraiga el contenido de cada archivo .zip.
  3. Actualice la configuración del proveedor para agregar argumentos como user_ocid, fingerprint y private_key_path. Puede que haya comentado estos argumentos antes.
    Ejemplo de argumentos comentados:
    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. Para seguir ejemplos de código en el resto de este procedimiento, cambie el nombre del archivo extraído por terraform_<major-version>.
    Ejemplo: terraform_13
  5. Para que el comando (archivo extraído) sea accesible, almacénelo en un directorio que esté presente en el directorio PATH.
  6. Abra un símbolo del sistema.
  7. Cambie el directorio a la carpeta en la que ha almacenado la información de pila descargada.
    Ejemplo:
    cd c:\StackUpgrade
  8. Para inicializar Terraform, ejecute el siguiente comando:
    terraform_<major-version> init

    Ejemplo:

    terraform_13 init
  9. Para actualizar la sintaxis de la configuración de Terraform, ejecute el comando para la versión de Terraform de destino:
    Versión de Terraform de destino Comando
    0,13 terraform_13 13upgrade
    0,14 terraform_14 14upgrade
    1.0 y posterior No es necesario realizar ninguna acción. Si las actualizaciones anteriores se aplicaron correctamente durante el proceso, no se necesitan cambios especiales para actualizar la configuración.

    La salida indica si la actualización se realizó correctamente.

    Si se realiza correctamente, continúe con el siguiente paso.

    Si no se realiza correctamente, realice cambios manuales en los archivos de configuración de Terraform según se le indique.

  10. Cree un archivo .zip de los archivos de configuración de Terraform.

    Ejemplo de archivo .zip: c:\StackUpgrade\MyConfigUpgraded.zip

    Asegúrese de que el archivo omite el archivo de estado de Terraform (terraform.tfstate) y el directorio .terraform para cumplir con la estructura de archivos necesaria para las configuraciones de Terraform.

  11. Si se utiliza un sistema de control de código fuente (como GitHub) para la configuración de Terraform de la pila, confirme la configuración de Terraform actualizada allí.
    La confirmación más reciente se utiliza al ejecutar trabajos en la pila.
  12. Si se utiliza un cubo de Object Storage para la configuración de Terraform de la pila, cambie el contenido de ese cubo para que se corresponda con la configuración de Terraform actualizada.
    Nota

    Realice una copia de seguridad del cubo actual antes de cambiarlo para que se corresponda con la configuración de Terraform actualizada. Limite el cubo a archivos destinados a su uso con Terraform.

    El contenido más reciente del cubo se utiliza al ejecutar trabajos en la pila.

Cuando la configuración de Terraform se haya actualizado correctamente a la versión de Terraform de destino, puede continuar con la siguiente tarea para actualizar la pila.

Tarea 4: Actualización de la pila

Esta tarea utiliza la consola. Para obtener instrucciones de la CLI y la API para actualizar una pila, consulte Updating a Stack.
  1. En la consola, vuelva a abrir la página de detalles de la pila que está actualizando: en la página de lista Pilas, seleccione la pila con la que desea trabajar. Si necesita ayuda para buscar la página de lista o la pila, consulte Listado de pilas.
  2. En el menú Acciones (tres puntos) de la pila, seleccione Editar.
  3. Cargue la configuración de Terraform actualizada en la pila.

    Puede arrastrar el archivo al control del cuadro de diálogo o seleccionar Examinar y navegar a la ubicación del archivo o carpeta.

    Ruta de archivo de ejemplo: c:\StackUpgrade\MyConfigUpgraded.zip

    El cuadro de diálogo se rellena con la información que incluye la configuración de Terraform.

    Nota

    Omita este paso de carga si la configuración de Terraform de la pila se almacena en un sistema de control de código fuente (como GitHub) o en un cubo de Object Storage, la pila se ha configurado para utilizar la configuración de Terraform actualizada en la tarea 3: cambio de versión de la configuración al confirmar el cambio en el código fuente o cargar el archivo en el cubo).
  4. Especifique la versión de Terraform de destino: cambie la versión de Terraform.
  5. Seleccione Siguiente dos veces y, a continuación, seleccione Guardar cambios.
La pila ahora está sincronizada con la configuración de Terraform actualizada y la versión de Terraform especificada. Ahora puede continuar con la siguiente tarea para importar el archivo de estado.

Tarea 5: Importar el estado

Esta tarea utiliza la consola. Para obtener instrucciones sobre la CLI y la API, consulte Creación de un trabajo de importación.
  1. En la consola, vuelva a abrir la página de detalles de la pila que está actualizando: en la página de lista Pilas, seleccione la pila con la que desea trabajar. Si necesita ayuda para buscar la página de lista o la pila, consulte Listado de pilas.
  2. Vaya a Más acciones y seleccione Estado de importación.
  3. En el panel Importar, agregue el archivo de estado de Terraform descargado.

    Puede arrastrar el archivo al control del cuadro de diálogo o seleccionar Examinar y navegar a la ubicación del archivo o carpeta.

    Ruta de archivo de ejemplo: c:\StackUpgrade\terraform.tfstate

  4. Seleccione Importar.

    Se crea el trabajo de importación. El nuevo trabajo se muestra en Trabajos.

    Cuando finaliza el trabajo, se abre la página Detalles del trabajo.

  5. Confirmar importación correcta: seleccione Logs.

    Para obtener instrucciones sobre la CLI y la API, consulte Obtención de logs para un trabajo.

Después de una importación correcta del archivo de estado, continúe con la siguiente tarea para comprobar si hay problemas.

Tarea 6: Comprobación de incidencias

Esta tarea utiliza la consola. Para obtener instrucciones de la CLI y la API para un paso, consulte el enlace asociado.

  1. En la página de lista Pilas, seleccione la pila con la que desea trabajar. Si necesita ayuda para buscar la página de lista o la pila, consulte Listado de pilas.
  2. Compruebe si hay cambios pendientes en la infraestructura:
    1. Seleccione Plan.

      Cuando finaliza la acción, se abre la página de detalles del trabajo relacionado.

      Para obtener instrucciones sobre la CLI y la API, consulte Creación de un trabajo de plan.

    2. Para revisar el log de la acción de plan completada, seleccione Logs.

      Para obtener instrucciones sobre la CLI y la API, consulte Obtención de logs para un trabajo.

    3. En el contenido del log, compruebe si hay problemas descritos en Troubleshooting Logs During an Upgrade.

  3. Resuelva los problemas mostrados actualizando manualmente la configuración de Terraform, como se describe en Solución de problemas de logs durante una actualización.
  4. En la página de detalles de la pila, seleccione Editar y, a continuación, cargue la configuración de Terraform recién actualizada en la pila.

    Puede arrastrar el archivo al control del cuadro de diálogo o seleccionar Examinar y navegar a la ubicación del archivo o carpeta.

    Ruta de archivo de ejemplo: c:\StackUpgrade\MyConfigUpgraded.zip

    El cuadro de diálogo se rellena con la información que incluye la configuración de Terraform.

    Nota

    Omita este paso de carga si la configuración de Terraform de la pila se almacena en un sistema de control de código fuente (como GitHub) o en un cubo de Object Storage, la pila se ha configurado para utilizar la configuración de Terraform actualizada en la tarea 3: cambio de versión de la configuración al confirmar el cambio en el código fuente o cargar el archivo en el cubo).
  5. Seleccione Siguiente dos veces y, a continuación, seleccione Guardar cambios.
  6. Vuelva a ejecutar la acción de plan para confirmar que los problemas ya no aparecen en el contenido del log asociado.
    1. Seleccione Plan.

      Cuando finaliza la acción, se abre la página de detalles del trabajo relacionado.

      Para obtener instrucciones sobre la CLI y la API, consulte Creación de un trabajo de plan.

    2. Para revisar el log de la acción de plan completada, seleccione Logs.

      Para obtener instrucciones sobre la CLI y la API, consulte Obtención de logs para un trabajo.

Resolución de problemas de logs durante una actualización

A continuación, se muestran algunos problemas que puede ver en los logs al actualizar una pila a una nueva versión de Terraform. Esta lista se limita a algunos problemas que el equipo de servicio de Resource Manager conoce.

Error: fallo al instalar proveedores

El log muestra un mensaje de error similar al siguiente.

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 configuración no cumple los requisitos para la versión de Terraform especificada. La versión 0.13.x y posteriores no utilizan esta sintaxis para los proveedores. Ejemplo de configuración que causa este error:

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

Agregue un bloque required_providers y mencione explícitamente la información de origen del proveedor. Para obtener más información, consulte Requerimiento de proveedores. Ejemplo de actualización:

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

Error: restricciones de tipo entre comillas no válidas

El log muestra un mensaje de error similar al siguiente.

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 configuración no cumple los requisitos para la versión de Terraform especificada. La versión 1.0.x y posteriores no utilizan comillas para las declaraciones de tipo de variables. Ejemplo de configuración que causa este error:

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

Elimine las comillas de las declaraciones de tipo de variables. Ejemplo de actualización:

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

Error: Error en llamada de función (mapa)

El log muestra un mensaje de error similar al siguiente.

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 configuración no cumple los requisitos para la versión de Terraform especificada. La versión 1.0.x y posteriores no utilizan esta sintaxis para los mapas. Ejemplo de configuración que causa este error:

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

Corrija la sintaxis de la asignación para utilizar tomap(). Ejemplo de actualización:

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

Error: error en la llamada de función (lista)

El log muestra un mensaje de error similar al siguiente.

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 configuración no cumple los requisitos para la versión de Terraform especificada. La versión 1.0.x y posteriores no utilizan esta sintaxis para las listas. Ejemplo de configuración que causa este error:

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

Corrija la sintaxis de la lista para utilizar tolist(). Ejemplo de actualización:

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

Error: el formato ["*"] del comodín ignore_changes está en desuso

El log muestra un mensaje de error similar al siguiente.

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 configuración no cumple los requisitos para la versión de Terraform especificada. La versión 1.0.x y posteriores no utilizan esta sintaxis para los comodines ignore_changes. Ejemplo de configuración que causa este error:

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

En su lugar, utilice ignore_changes = all. Ejemplo de actualización:

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

Problema: sintaxis de HCL en desuso

El log indica la existencia de una sintaxis de HCL en desuso.

La configuración no cumple los requisitos para la versión de Terraform especificada.

Actualice la configuración para omitir la sintaxis de HCL en desuso.