# Solucionar problemas do Terraform Provider

Cada seção desta página parte de um erro que o Terraform exibe enquanto trabalha com o [Azion Terraform Provider](/pt-br/documentacao/devtools/terraform/) e indica a causa e a correção. Os erros sobre o personal token e a versão do provider vêm primeiro. Em seguida vêm os erros de uma migração para o provider v2.0: tipos de recurso removidos, o state e imports.

---

## O Terraform falha com personal token is required

Um comando do Terraform para antes que o provider chame a Azion API, com este erro:

```text
Error: error configuring Terraform Azion Provider: personal token is required
```

O provider não encontrou nenhum personal token. Ele lê o token da variável de ambiente `AZION_API_TOKEN` ou do argumento `api_token`.

- **Defina a variável de ambiente**: exporte `AZION_API_TOKEN` no terminal que executa o Terraform e deixe o bloco `provider "azion"` vazio.
- **Passe o token no argumento api\_token**: declare uma variável sensível `api_token`, defina-a em `terraform.tfvars` e passe `var.api_token` ao provider. Para os arquivos, consulte [Informe o seu personal token](/pt-br/documentacao/devtools/terraform/getting-started/#informe-o-seu-personal-token).
- **Crie um personal token**: o token precisa das permissões que os seus recursos exigem. Para mais informações, consulte [Tokens pessoais](/pt-br/documentacao/fundamentos/personal-tokens/).

Para definir a variável, substitua `[TOKEN VALUE]` pelo seu personal token e execute este comando no terminal que executa o Terraform:

```bash
export AZION_API_TOKEN="[TOKEN VALUE]"
```

O provider lê o token, e o comando não para mais na configuração do provider.

---

## O Terraform falha com no compatible versions

O Terraform não encontra nenhuma versão do provider da Azion que possa usar e para com este erro:

```text
Error: provider registry.terraform.io/aziontech/azion: no compatible versions
```

O Azion Terraform Provider precisa do Terraform 1.0 ou posterior. A versão do Terraform Core na sua máquina é a primeira coisa a verificar.

- **Verifique a versão do Terraform**: `terraform version` exibe a versão do Terraform Core.
- **Instale uma versão posterior do Terraform**: quando a versão for anterior à 1.0, instale uma posterior. Para a instalação, consulte [Instale o Terraform](/pt-br/documentacao/devtools/terraform/getting-started/#instale-o-terraform).

Para exibir a versão do Terraform Core:

```bash
terraform version
```

`terraform version` informa a versão 1.0 ou posterior, que o provider precisa.

---

## O Terraform falha com Failed to query available provider packages

O Terraform não consegue listar as versões do provider da Azion e para com este erro:

```text
Error: Failed to query available provider packages
Could not retrieve the list of available versions for provider aziontech/azion
```

O Terraform localiza o provider pela source e pela versão do bloco `required_providers`. A source do Azion Terraform Provider é `aziontech/azion`.

- **Verifique a source e a versão**: defina `source` como `aziontech/azion` e `version` como a versão do provider que você usa, como `2.0.0`.
- **Atualize o provider instalado**: `terraform init -upgrade` baixa a versão que o bloco define. Para a atualização completa para a v2.0, consulte [Atualize o provider para a v2.0](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4/).

Este bloco `required_providers` define a source e fixa a versão `2.0.0` do provider:

```hcl
terraform {
  required_providers {
    azion = {
      source  = "aziontech/azion"
      version = "2.0.0"
    }
  }
}
```

Para baixar a versão do provider que o bloco define, execute este comando no diretório do projeto:

```bash
terraform init -upgrade
```

O Terraform instala no projeto a versão do provider que o bloco define, como `2.0.0`.

---

## O Terraform falha com resource not found

Um comando do Terraform falha em um recurso da configuração com este erro:

```text
Error: resource not found
```

A configuração faz referência a um recurso que a Azion API v4 não tem. O provider v2.0 funciona apenas com a API v4, e a API v4 removeu ou renomeou alguns recursos da API v3.

- **Verifique o recurso na sua conta**: procure o recurso no [Azion Console](https://console.azion.com/). A [referência da Azion API](https://api.azion.com/) lista os recursos que a API v4 oferece.
- **Renomeie os recursos da v1.x**: um tipo de recurso do provider v1.x pode ter outro nome na v2.0 ou não ter correspondente. Para cada nome da v1.x e o seu substituto, consulte [Mudanças de recursos na v2.0](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4/).
- **Mantenha o provider v1.x em uma conta da API v3**: uma conta na API v3 usa o provider v1.x. Para mais informações, consulte [Azion Terraform Provider v1.x (API v3)](/pt-br/documentacao/devtools/terraform/terraform-provider-v3/).

A configuração nomeia apenas recursos que existem na API v4, e o erro não aparece mais.

---

## O Terraform informa Invalid resource type para azion\_domain

Uma configuração escrita para o provider v1.x falha no provider v2.0 com este erro:

```text
Error: Invalid resource type
on main.tf line 10:
10: resource "azion_domain" "example" {
The provider aziontech/azion does not support resource type "azion_domain".
```

O provider v2.0 removeu o recurso `azion_domain`. Um workload e o seu deployment assumem o papel dele.

- **Substitua o domínio por um workload**: reescreva o bloco como um recurso `azion_workload` e um recurso `azion_workload_deployment`. Para o bloco da v1.x e os blocos que o substituem, consulte [Substitua um domínio por um workload](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4/).
- **Consulte os tipos de recurso do provider**: o [Terraform Registry](https://registry.terraform.io/providers/aziontech/azion/latest/docs) documenta todos os tipos de recurso e argumentos que o provider aceita.

A configuração usa apenas tipos de recurso que o provider v2.0 aceita.

---

## O Terraform falha com Error refreshing state

Durante uma migração para o provider v2.0, o Terraform para no recurso de origin da v1.x com este erro:

```text
Error: Error refreshing state: azion_edge_application_origin.example:
resource not found
```

O state ainda lista um recurso que o provider não encontra mais. O provider v2.0 substitui o recurso de origin da v1.x por `azion_connector`.

- **Remova o recurso do state**: `terraform state rm` tira o recurso do state e mantém o objeto na sua conta. Para os comandos que removem os recursos de domínio, origin e function da v1.x, consulte [Remova os recursos da v1.x do state](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4/).
- **Gerencie a origin como um connector**: declare um recurso `azion_connector` para a origin. Para o bloco da v1.x e o bloco que o substitui, consulte [Substitua uma origin por um connector](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4/).

O state não lista mais o recurso de origin da v1.x, e o Terraform atualiza o state sem o erro.

---

## terraform import falha com Cannot import non-existent remote object

`terraform import` para com este erro:

```text
Error: Cannot import non-existent remote object
```

Não existe na Azion API v4 nenhum objeto com o ID que você passou. Um recurso da API v3 pode ter outro ID na API v4.

- **Consulte o ID da API v4**: encontre o ID do recurso no [Azion Console](https://console.azion.com/).
- **Importe com o ID da API v4**: execute `terraform import <type>.<name> <id>` com o ID do Azion Console. Para o import de um workload, de um connector e de uma function, consulte [Importe os recursos com os tipos da v2.0](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4/).

O state lista o recurso importado com o tipo da v2.0.

---

## Recursos relacionados

- [Primeiros passos com o Azion Terraform Provider](/pt-br/documentacao/devtools/terraform/getting-started.md): O token, a versão fixada e os comandos de que uma primeira configuração precisa.
- [Migre do provider v1.x para o v2.0](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4.md): As mudanças de recursos, as remoções do state e os imports para os quais os erros de migração apontam.
- [Como o Terraform Provider funciona](/pt-br/documentacao/devtools/terraform/como-funciona.md): Como state, plan e apply se encaixam, e o que terraform state rm e terraform import alteram.
- [Boas práticas do Terraform Provider](/pt-br/documentacao/devtools/terraform/best-practices.md): Fixe a versão do provider e passe o token por uma variável de ambiente.
