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.
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:
-
Un equipo MacOS, Linux o Windows para ejecutar herramientas de línea de comandos
-
Software para crear y desempaquetar archivos
.zip
, como 7-ZIP
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.
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.
Tarea 2: Descarga de la configuración y el estado
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.
Tarea 3: Actualización de la configuración
Tarea 4: Actualización de la pila
Tarea 5: Importar el estado
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.
Resolución de problemas de logs durante una actualización
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.