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.

Observação

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:

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.

Observação

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.

  1. Na página da lista Pilhas, selecione a pilha com a qual você deseja trabalhar. Se precisar de ajuda para encontrar a página da lista ou a pilha, consulte Listando Pilhas.
  2. Confirme se a página de detalhes da pilha mostra a versão esperada (versão do Terraform).
    Para obter instruções sobre CLI e API para obter detalhes de uma pilha, consulte Obtendo Detalhes de uma Pilha.
  3. Verifique se há alterações pendentes na infraestrutura:
    1. Selecione Plano.

      Quando a ação terminar, a página de detalhes do job relacionado será aberta.

      Para obter instruções sobre CLI e API, consulte Criando um Job de Plano.

    2. Para revisar o log da ação do plano concluída, selecione Logs.

      O conteúdo do log indica se a pilha está atualizada ou se tem alterações pendentes.

      Para obter instruções sobre CLI e API, consulte Obtendo Logs para um Job.

      Exemplo de uma pilha atualizada (sem alterações pendentes):

      No changes. Infrastructure is up-to-date.

  4. Se o conteúdo do log indicar alterações pendentes, aplique as alterações pendentes:
    1. Selecione Detalhes da pilha para voltar à página de detalhes da pilha.

    2. Selecione Aplicar.

      Para obter instruções sobre CLI e API, consulte Criando um Job de Aplicação.

      Quando a ação terminar, a página de detalhes do job relacionado será aberta.

    3. Confirme se a ação de aplicação foi bem-sucedida: Selecione Logs para revisar o log da ação do plano concluída.

      Para obter instruções sobre CLI e API, consulte Obtendo Logs para um Job.

Quando a infraestrutura de pilha estiver atualizada, você poderá prosseguir para a próxima tarefa para fazer download dos arquivos de configuração e estado do Terraform.

Tarefa 2: Fazer Download da Configuração e do Estado

Observação

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.

  1. Em um computador que possa executar ferramentas de linha de comando, crie uma pasta para armazenar a configuração e o estado do Terraform baixados.
    Exemplo de nome de pasta: c:\StackUpgrade
  2. Na Console: Na página da lista Pilhas, selecione a pilha com a qual você deseja trabalhar. Se precisar de ajuda para encontrar a página da lista ou a pilha, consulte Listando Pilhas.
  3. Ao lado de configuração do Terraform, selecione Fazer Download.

    Para obter instruções sobre CLI e API, consulte Obtendo a Configuração do Terraform de uma Pilha.

  4. Faça download do arquivo de estado do Terraform:
    1. Na página de detalhes da pilha, selecione Exibir estado.
    2. Para fazer download do arquivo de estado da pilha, vá para Mais ações e selecione Fazer download do estado do Terraform.

    Para obter instruções sobre CLI e API, consulte Obtendo o Arquivo de Estado de uma Pilha.

Quando a configuração e o estado do Terraform forem baixados, você poderá prosseguir para a próxima tarefa para fazer upgrade da configuração do Terraform.

Tarefa 3: Atualizar a Configuração

Esta tarefa fornece etapas personalizadas para fazer upgrade de uma configuração do Terraform usada com o Resource Manager.
  1. No mesmo computador que você usou para armazenar os arquivos de configuração e estado do Terraform submetidos a download, faça download dos arquivos .zip necessários para fazer upgrade da configuração do Terraform:
  2. Extraia o conteúdo de cada arquivo .zip.
  3. Atualize a configuração do provedor para adicionar argumentos como user_ocid, fingerprint e private_key_path. Você já deve ter comentado esses argumentos antes.
    Exemplo 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 exemplos de código no restante deste procedimento, renomeie o arquivo extraído como terraform_<major-version>.
    Exemplo: terraform_13
  5. Para tornar o comando (arquivo extraído) acessível, armazene-o em um diretório que está presente no diretório PATH.
  6. Abra um prompt de comando.
  7. Altere o diretório para a pasta em que você armazenou as informações da pilha baixada.
    Exemplo:
    cd c:\StackUpgrade
  8. Para inicializar o Terraform, execute o seguinte comando:
    terraform_<major-version> init

    Exemplo:

    terraform_13 init
  9. Para fazer upgrade da sintaxe da configuração do Terraform, execute o comando da versão do Terraform de destino:
    Versão do Terraform de Destino Comando
    0.13 terraform_13 13upgrade
    0.14 terraform_14 14upgrade
    1.0 e mais recente Nenhum necessário. Se os upgrades anteriores tiverem sido aplicados com sucesso durante o processo, nenhuma alteração especial será necessária para fazer upgrade da configuração.

    A saída indica se o upgrade foi bem-sucedido.

    Se bem-sucedido, prossiga com a próxima etapa.

    Se não for bem-sucedido, faça alterações manuais nos arquivos de configuração do Terraform conforme direcionado.

  10. Crie um arquivo compactado .zip dos arquivos de configuração do Terraform.

    Exemplo de arquivo compactado .zip: c:\StackUpgrade\MyConfigUpgraded.zip

    Certifique-se de que o arquivo compactado omita o arquivo de estado do Terraform (terraform.tfstate) e o diretório .terraform para atender à estrutura de arquivo necessária para configurações do Terraform.

  11. Se um sistema de controle de código-fonte (como GitHub) for usado para a configuração do Terraform da pilha, confirme lá a configuração do Terraform atualizada.
    O commit mais recente é usado quando você executa jobs na pilha.
  12. Se um bucket do Object Storage for usado para a configuração do Terraform da pilha, altere o conteúdo desse bucket para corresponder à configuração do Terraform atualizada.
    Observação

    Faça backup do bucket atual antes de alterá-lo para corresponder à configuração do Terraform atualizada. Limite o bucket a arquivos destinados ao uso com o Terraform.

    O conteúdo mais recente do bucket é usado quando você executa jobs na pilha.

Quando o upgrade da configuração do Terraform for bem-sucedido para a versão do Terraform de destino, você poderá prosseguir para a próxima tarefa para fazer upgrade da pilha.

Tarefa 4: Atualizar a Pilha

Esta tarefa usa a Console. Para obter instruções sobre CLI e API para atualizar uma pilha, consulte Atualizando uma Pilha.
  1. Na Console, reabra a página de detalhes da pilha com a qual você está fazendo upgrade: Na página de lista Pilhas, selecione a pilha com a qual você deseja trabalhar. Se precisar de ajuda para encontrar a página da lista ou a pilha, consulte Listando Pilhas.
  2. No menu Ações (três pontos) da pilha, selecione Editar.
  3. Faça upload da configuração do Terraform atualizada para a pilha.

    Você pode arrastar o arquivo para o controle da caixa de diálogo ou selecionar Procurar e navegar até o local do arquivo ou pasta.

    Exemplo de caminho de arquivo: c:\StackUpgrade\MyConfigUpgraded.zip

    A caixa de diálogo é preenchida com informações contidas na configuração do Terraform.

    Observação

    Ignore esta etapa de upload se a configuração do Terraform da pilha estiver armazenada em um sistema de controle de código-fonte (como GitHub) ou em um bucket do Object Storage; em seguida, a pilha foi configurada para usar a configuração do Terraform submetida a upgrade na Tarefa 3: Fazer Upgrade da Configuração quando você fez commit da alteração no código-fonte ou fez upload do arquivo para o bucket.)
  4. Especifique a versão do Terraform de destino: Altere a versão do Terraform.
  5. Selecione Próximo duas vezes e, em seguida, selecione Salvar alterações.
A pilha agora é sincronizada com a configuração do Terraform submetida a upgrade e a versão especificada do Terraform. Agora você pode prosseguir para a próxima tarefa para importar o arquivo de estado.

Tarefa 5: Importar o Estado

Esta tarefa usa a Console. Para obter instruções sobre CLI e API, consulte Criando um Job de Importação.
  1. Na Console, reabra a página de detalhes da pilha com a qual você está fazendo upgrade: Na página de lista Pilhas, selecione a pilha com a qual você deseja trabalhar. Se precisar de ajuda para encontrar a página da lista ou a pilha, consulte Listando Pilhas.
  2. Vá para Mais ações e selecione Estado de importação.
  3. No painel Importar, adicione o arquivo de estado do Terraform submetido a download.

    Você pode arrastar o arquivo para o controle da caixa de diálogo ou selecionar Procurar e navegar até o local do arquivo ou pasta.

    Exemplo de caminho de arquivo: c:\StackUpgrade\terraform.tfstate

  4. Selecione Importar.

    O job de importação foi criado. O novo job é listado em Jobs.

    Quando o job termina, a página Detalhes do job é aberta.

  5. Confirmar importação bem-sucedida: Selecione Logs.

    Para obter instruções sobre CLI e API, consulte Obtendo Logs para um Job.

Após uma importação bem-sucedida do arquivo de estado, prossiga para a próxima tarefa para verificar se há problemas.

Tarefa 6: Verificar Problemas

Esta tarefa usa a Console. Para obter instruções sobre CLI e API para uma etapa, consulte o link associado.

  1. Na página da lista Pilhas, selecione a pilha com a qual você deseja trabalhar. Se precisar de ajuda para encontrar a página da lista ou a pilha, consulte Listando Pilhas.
  2. Verifique se há alterações pendentes na infraestrutura:
    1. Selecione Plano.

      Quando a ação terminar, a página de detalhes do job relacionado será aberta.

      Para obter instruções sobre CLI e API, consulte Criando um Job de Plano.

    2. Para revisar o log da ação do plano concluída, selecione Logs.

      Para obter instruções sobre CLI e API, consulte Obtendo Logs para um Job.

    3. No conteúdo do log, verifique os problemas descritos em Diagnosticando e Solucionando Problemas de Logs Durante um Upgrade.

  3. Resolva os problemas listados atualizando manualmente a configuração do Terraform, conforme descrito em Diagnosticando e Solucionando Problemas de Logs Durante um Upgrade.
  4. Na página de detalhes da pilha, selecione Editar e faça upload da configuração do Terraform recém-atualizada para a pilha.

    Você pode arrastar o arquivo para o controle da caixa de diálogo ou selecionar Procurar e navegar até o local do arquivo ou pasta.

    Exemplo de caminho de arquivo: c:\StackUpgrade\MyConfigUpgraded.zip

    A caixa de diálogo é preenchida com informações contidas na configuração do Terraform.

    Observação

    Ignore esta etapa de upload se a configuração do Terraform da pilha estiver armazenada em um sistema de controle de código-fonte (como GitHub) ou em um bucket do Object Storage; em seguida, a pilha foi configurada para usar a configuração do Terraform submetida a upgrade na Tarefa 3: Fazer Upgrade da Configuração quando você fez commit da alteração no código-fonte ou fez upload do arquivo para o bucket.)
  5. Selecione Próximo duas vezes e, em seguida, selecione Salvar alterações.
  6. Execute a ação do plano novamente para confirmar que os problemas não estão mais listados no conteúdo de log associado.
    1. Selecione Plano.

      Quando a ação terminar, a página de detalhes do job relacionado será aberta.

      Para obter instruções sobre CLI e API, consulte Criando um Job de Plano.

    2. Para revisar o log da ação do plano concluída, selecione Logs.

      Para obter instruções sobre CLI e API, consulte Obtendo Logs para um Job.

Diagnosticando e Solucionando Problemas de Logs Durante um Upgrade

Veja a seguir alguns problemas que você pode ver nos logs ao fazer upgrade de uma pilha para uma nova versão do Terraform. Esta lista é limitada a alguns problemas que a equipe de serviço do Resource Manager conhece.

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.