Fazendo Upgrade de uma Pilha para uma Versão Posterior do Terraform
Faça upgrade de uma pilha no Resource Manager para uma versão mais recente do Terraform.
Essas instruções não se aplicam a pilhas do Resource Manager criadas por meio do Marketplace.
Essas etapas são concluídas na linha de comando e na Console.
Para obter informações sobre as versões do Terraform suportadas pelo Resource Manager, consulte Versões do Terraform Suportadas.
Antes de Começar
Para fazer upgrade da sua pilha com sucesso, você deve ter os seguintes requisitos:
-
Um computador MacOS, Linux ou Windows para executar ferramentas de linha de comando
-
Software para criar e descompactar arquivos
.zip
, como 7-ZIP
Upgrade Automático
Para suportar a descontinuação de versões mais antigas do Terraform (anteriores à 1.5.x), o Resource Manager tentará um upgrade automático da versão do Terraform. Este upgrade automático será tentado sempre que você executar um job de aplicação bem-sucedido (o estado do job é bem-sucedido) em uma pilha configurada para uma versão mais antiga do Terraform.
A versão de destino da tentativa de upgrade depende da versão do Terraform configurada no momento da pilha. Os upgrades automáticos intermediários movem a pilha para 1.5.x em uma ou mais tentativas de upgrade bem-sucedidas. O uso de atualizações intermediárias funciona em torno de diferenças na sintaxe HCL, definições de bloco do provedor e diferenças de arquivo de estado, conforme discutido nas instruções de atualização manual. A versão de destino de um upgrade é selecionada da seguinte forma:
- A versão de destino para upgrade da versão 0.12.x é a 0.13.x.
- A versão de destino para upgrade da versão 0.13.x é a 0.14.x.
- A versão de destino para atualizar 0.14.x, 1.0.x, 1.1.x ou 1.2.x é 1.5.x.
A tentativa de upgrade só ocorre depois que um job de aplicação é bem-sucedido (o estado do job é bem-sucedido).
- Se o upgrade for bem-sucedido, a versão e o arquivo de estado do Terraform da pilha serão submetidos a upgrade para 1.5.x (ou versão intermediária). Nenhuma outra ação é necessária.
- Se o upgrade falhar, a versão do Terraform da pilha permanecerá inalterada e os recursos não serão afetados. Uma mensagem de falha de upgrade é exibida na página de detalhes da pilha. Nessa situação, obtenha logs para o job de aplicação (selecione Mostrar logs de upgrade do terraform para obter informações sobre a falha) e atualize a configuração do Terraform. O próximo job de aplicação bem-sucedido executado nesta pilha acionará o processo de upgrade automático pelo Resource Manager.Observação
Mesmo que o upgrade falhe, o estado do job ainda será bem-sucedido.
Caminhos de Upgrade
Veja a seguir os caminhos de upgrade suportados pela versão inicial.
Versão Inicial do Terraform | Caminho de upgrade |
---|---|
0.12 | Em sequência, faça upgrade para cada versão suportada: 0.13, 0.14, 1.0 (recomendado), 1.1, 1.2, 1.5. |
0.13 | Em sequência, faça upgrade para cada versão suportada: 0.14, 1.0 (recomendado), 1.1, 1.2, 1.5. |
0.14 | Em sequência, atualize para cada versão suportada: 1.0 (recomendado), 1.1, 1.2, 1.5. |
1 | Em sequência, faça upgrade para cada versão suportada: 1.1, 1.2, 1.5. |
1.1 | Em sequência, faça upgrade para cada versão suportada: 1.2, 1.5. |
1.2 | Fazer Upgrade para 1.5. |
Consulte os guias de upgrade oficiais do Terraform:
Tarefa 1: Confirmar Infraestrutura Atualizada
Esta tarefa usa a Console. Para obter instruções sobre CLI e API para uma etapa, consulte o link associado.
Tarefa 2: Fazer Download da Configuração e do Estado
Se a configuração do Terraform da pilha for armazenada em um sistema de controle de código-fonte, como GitLab, faça check-out e download da configuração do Terraform a partir daí.
Se a configuração do Terraform da pilha for armazenada em um bucket, faça download da configuração do Terraform a partir daí.
Esta tarefa usa a Console. Para obter instruções sobre CLI e API para uma etapa, consulte o link associado.
Tarefa 3: Atualizar a Configuração
Tarefa 4: Atualizar a Pilha
Tarefa 5: Importar o Estado
Tarefa 6: Verificar Problemas
Esta tarefa usa a Console. Para obter instruções sobre CLI e API para uma etapa, consulte o link associado.
Diagnosticando e Solucionando Problemas de Logs Durante um Upgrade
Erro: falha ao instalar provedores
O log mostra uma mensagem de erro semelhante à seguinte.
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 .
A configuração não atende aos requisitos da versão do Terraform especificada. A versão 0.13.x e posterior não usam essa sintaxe para provedores. Exemplo de configuração causando este erro:
provider "gitlab" {
token = "glpat-_abcd"
}
# Add a project owned by the user
resource "gitlab_project" "sample_project" {
name = "example"
}
Adicione um bloco required_providers
e mencione explicitamente as informações de origem do provedor. Para obter mais informações, consulte Requer profissionais de saúde. Exemplo de atualização:
terraform {
required_providers {
oci = {
source = "oracle/oci"
version = "5.46"
}
gitlab = {
source = "gitlabhq/gitlab"
version = "17.8.0"
}
}
}
Erro: Restrições de tipo entre aspas inválidas
O log mostra uma mensagem de erro semelhante à seguinte.
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".
A configuração não atende aos requisitos da versão do Terraform especificada. A versão 1.0.x e posterior não usam aspas para declarações de tipo de variáveis. Exemplo de configuração causando este erro:
variable "vcn_dns_label" {
type = "string"
default = "vcn"
}
Remova as aspas das declarações de tipo de variáveis. Exemplo de atualização:
variable "vcn_dns_label" {
type = string
default = "vcn"
}
Erro: Erro na chamada de função (mapa)
O log mostra uma mensagem de erro semelhante à seguinte.
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.
A configuração não atende aos requisitos da versão do Terraform especificada. A versão 1.0.x e posterior não usam essa sintaxe para mapas. Exemplo de configuração causando este erro:
resource "oci_core_subnet" "this" {
...
...
vcn_id = lookup(map("a", 1, "b", 2), "a", "default")
...
...
}
Corrija a sintaxe para o mapa usar tomap()
. Exemplo de atualização:
resource "oci_core_subnet" "this" {
...
...
vcn_id = lookup(tomap({"a" = 1, "b" = 2}), "a", "default")
...
...
}
Erro: Erro na chamada de função (lista)
O log mostra uma mensagem de erro semelhante à seguinte.
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.
A configuração não atende aos requisitos da versão do Terraform especificada. A versão 1.0.x e posterior não usam essa sintaxe para listas. Exemplo de configuração causando este erro:
resource "oci_core_subnet" "this" {
count = length(list("phx-ad-1", "phx-ad-2"))
...
...
}
Corrija a sintaxe da lista para usar tolist()
. Exemplo de atualização:
resource "oci_core_subnet" "this" {
count = length(tolist(["phx-ad-1", "phx-ad-2"]))
...
...
}
Erro: A forma ["*"] do curinga ignore_changes está obsoleta
O log mostra uma mensagem de erro semelhante à seguinte.
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.
A configuração não atende aos requisitos da versão do Terraform especificada. A versão 1.0.x e posterior não usam essa sintaxe para curingas ignore_changes
. Exemplo de configuração causando este erro:
resource "oci_core_subnet" "this" {
...
...
lifecycle {
ignore_changes = ["*"]
}
}
Use ignore_changes = all
. Exemplo de atualização:
resource "oci_core_subnet" "this" {
...
...
lifecycle {
ignore_changes = all
}
}
Problema: Sintaxe HCL obsoleta
O log indica a existência de sintaxe HCL obsoleta.
A configuração não atende aos requisitos da versão do Terraform especificada.
Atualize a configuração para omitir sintaxe HCL obsoleta.