---
name: azion-migre-do-provider-v1-x-para-o-v2-0
description: >-
  Mova uma configuração Terraform e o state dela do Azion Terraform Provider v1.x, na API v3, para o v2.0, na API v4.
---

# Migre do provider v1.x para o v2.0

Você pode mover uma configuração Terraform e o state dela do [Azion Terraform Provider](/pt-br/documentacao/devtools/terraform/) v1.x, que chama a Azion API v3, para o v2.0, que chama a Azion API v4. Para manter uma configuração na v1.x, consulte [Azion Terraform Provider v1.x (API v3)](/pt-br/documentacao/devtools/terraform/terraform-provider-v3/).

O provider v2.0 é uma versão major. Ele adiciona recursos e remove os descontinuados para corresponder à Azion API v4, então uma configuração v1.x não roda na v2.0 sem mudanças.

---

## Pré-requisitos

- Terraform 1.0 ou posterior.
- Uma conta Azion com acesso à Azion API v4.
- Um [personal token](/pt-br/documentacao/fundamentos/personal-tokens/) com as permissões de que a sua configuração precisa.
- Uma lista dos recursos que a sua configuração gerencia, com os que a v2.0 remove ou renomeia marcados. As tabelas em Mudanças de recursos na v2.0, nesta página, indicam esses recursos.

---

## Faça backup da configuração e do state

A migração remove recursos do state do Terraform e os importa novamente com outros tipos. Guarde uma cópia dos arquivos de configuração e do state para poder voltar à configuração da v1.x.

Para fazer backup do projeto e do state:

```bash
# Create a backup directory
mkdir -p ~/terraform-backup

# Copy your configuration files
cp -r ./your-terraform-project ~/terraform-backup/

# Back up the state file (if using local state)
cp terraform.tfstate ~/terraform-backup/
cp terraform.tfstate.backup ~/terraform-backup/ 2>/dev/null || true

# If using remote state, download a local copy
terraform state pull > ~/terraform-backup/terraform.tfstate
```

O diretório `~/terraform-backup` contém os arquivos de configuração e uma cópia do state.

---

## Fixe o provider na v1.x

Cada linha de versões do provider chama uma versão da Azion API:

| Versão do provider  | Versão da API | Status        |
| ------------------- | ------------- | ------------- |
| 1.41.0 e anteriores | API v3        | Descontinuado |
| 2.0.0 e posteriores | API v4        | Atual         |

A versão 1.41.0 é a última versão v1.x. Para continuar usando a v1.x enquanto prepara a migração, fixe o provider nessa versão:

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

O próximo `terraform init` mantém o provider na versão 1.41.0.

> **Atenção**
>
> O provider 1.41.0 e as versões anteriores não recebem atualizações nem correções de bugs. Planeje a migração para a v2.0.

---

## Mudanças de recursos na v2.0

O provider v2.0 remove, renomeia e adiciona recursos. As quatro tabelas abaixo listam cada recurso e data source da v1.x com a contraparte dele na v2.0. Para todos os argumentos de um recurso da v2.0, consulte [Terraform Registry](https://registry.terraform.io/providers/aziontech/azion/latest/docs).

### Recursos removidos

O provider v2.0 não tem recurso nem data source com estes nomes da v1.x:

| Nome na v1.x (API v3)                           | Substituto na v2.0                             |
| ----------------------------------------------- | ---------------------------------------------- |
| `azion_domain`                                  | `azion_workload` e `azion_workload_deployment` |
| `azion_domains` (data source)                   | `azion_workloads` (data source)                |
| `azion_edge_application_origin`                 | `azion_connector`                              |
| `azion_edge_applications_origins` (data source) | `azion_connectors` (data source)               |

### Recursos renomeados

Estes recursos da v1.x mantêm a mesma função na v2.0 com outro nome. Os nomes da v2.0 seguem os nomes atuais dos produtos:

| Nome na v1.x (API v3)                            | Nome na v2.0                           |
| ------------------------------------------------ | -------------------------------------- |
| `azion_edge_function`                            | `azion_function`                       |
| `azion_edge_functions` (data source)             | `azion_functions` (data source)        |
| `azion_edge_application_main_setting`            | `azion_application_main_setting`       |
| `azion_edge_application_cache_setting`           | `azion_application_cache_setting`      |
| `azion_edge_application_rule_engine`             | `azion_application_rule_engine`        |
| `azion_edge_application_edge_functions_instance` | `azion_application_functions_instance` |
| `azion_edge_firewall_main_setting`               | `azion_firewall_main_setting`          |
| `azion_edge_firewall_edge_functions_instance`    | `azion_firewall_functions_instance`    |

### Recursos adicionados na v2.0

O provider v2.0 adiciona quatro recursos:

| Recurso                     | O que gerencia                                                                   |
| --------------------------- | -------------------------------------------------------------------------------- |
| `azion_workload`            | Workloads. Substitui `azion_domain` em conjunto com `azion_workload_deployment`. |
| `azion_workload_deployment` | Deployments de workloads.                                                        |
| `azion_connector`           | Connectors. Substitui `azion_edge_application_origin`.                           |
| `azion_custom_page`         | Custom pages. O provider v1.x não tem recurso para elas.                         |

### Recursos inalterados

Estes recursos mantêm os nomes da v1.x na v2.0:

| Recurso                        | O que gerencia             |
| ------------------------------ | -------------------------- |
| `azion_intelligent_dns_zone`   | Zonas DNS                  |
| `azion_intelligent_dns_record` | Registros DNS              |
| `azion_intelligent_dns_dnssec` | Configurações de DNSSEC    |
| `azion_network_list`           | Network lists              |
| `azion_waf_rule_set`           | Conjuntos de regras do WAF |
| `azion_digital_certificate`    | Certificados digitais      |
| `azion_environment_variable`   | Variáveis de ambiente      |

---

## Atualize o provider para a v2.0

A atualização exige duas mudanças: a restrição de versão na configuração e o provider instalado no projeto.

Para mudar a restrição de versão, defina `version` como `2.0.0` no bloco `required_providers`:

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

Para baixar o provider 2.0.0, execute:

```bash
terraform init -upgrade
```

O Terraform instala o provider 2.0.0 no projeto.

---

## Remova os recursos da v1.x do state

Remova os recursos descontinuados da v1.x do state do Terraform antes de importá-los com os tipos da v2.0.

Para remover as entradas de domínio, origin e function do state do Terraform:

```bash
# Remove domain resources
terraform state rm azion_domain.example

# Remove origin resources
terraform state rm azion_edge_application_origin.example

# Remove function resources (will be recreated as azion_function)
terraform state rm azion_edge_function.example
```

Substitua `example` pelo nome que cada recurso tem na sua configuração. O state deixa de listar esses recursos, que continuam na sua conta Azion.

---

## Atualize os arquivos de configuração

Reescreva cada recurso removido ou renomeado nos seus arquivos `.tf` com o tipo da v2.0. Os pares abaixo mostram um bloco da v1.x e o bloco da v2.0 que o substitui.

### Substitua um domínio por um workload

Na v1.x, um recurso `azion_domain` gerenciava todo o ciclo de vida do domínio. Na v2.0, `azion_workload` contém a definição e `azion_workload_deployment` contém o deployment. Para todos os argumentos dos dois recursos, consulte [Recursos de Workloads](/pt-br/documentacao/devtools/terraform/workloads/).

A configuração da v1.x:

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

provider "azion" {
  api_token = var.api_token
}

# Domain resource (v1.x)
resource "azion_domain" "example" {
  name                = "my-domain"
  cname_access_only   = false
  digital_certificate = 1234
  edge_application    = 5678
  is_active           = true

  # Domain name binding
  domain_name = "example.com"
}
```

A configuração da v2.0:

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

provider "azion" {
  api_token = var.api_token
}

# Workload resource (v2.0)
resource "azion_workload" "example" {
  name = "my-workload"

  # Workload configuration options
  # Refer to the Terraform Registry documentation for the complete options
}

# Workload deployment (v2.0)
resource "azion_workload_deployment" "example" {
  workload_id = azion_workload.example.id

  # Deployment configuration
  # Refer to the Terraform Registry documentation for the complete options
}
```

### Substitua uma origin por um connector

Na v1.x, uma origin pertencia a uma aplicação e recebia o `edge_application_id` dela. Na v2.0, um connector é um recurso independente. Para todos os argumentos de `azion_connector`, consulte [Recursos de Connectors](/pt-br/documentacao/devtools/terraform/connectors/).

A configuração da v1.x:

```hcl
# Origin (v1.x)
resource "azion_edge_application_origin" "example" {
  edge_application_id = azion_edge_application_main_setting.example.id

  name               = "my-origin"
  origin_type        = "single_origin"
  origin_address     = "origin.example.com"
  origin_protocol    = "https"
  origin_path        = "/api"
  host_header        = "origin.example.com"

  # Connection settings
  connection_timeout = 30
  read_timeout       = 60
}
```

A configuração da v2.0:

```hcl
# Connector (v2.0)
resource "azion_connector" "example" {
  name = "my-connector"

  # Connector configuration
  # Refer to the Terraform Registry documentation for the complete options

  # Example configuration
  origin = {
    address  = "origin.example.com"
    protocol = "https"
    path     = "/api"
  }

  # Connection settings
  connection_timeout = 30
  read_timeout       = 60
}
```

### Renomeie um recurso de function

O recurso de function mantém os mesmos argumentos na v2.0: `name`, `active`, `code` e `json_args`. Só o tipo do recurso muda, de `azion_edge_function` para `azion_function`.

A configuração da v1.x:

```hcl
# Function (v1.x)
resource "azion_edge_function" "example" {
  name    = "my-function"
  active  = true
  code    = file("${path.module}/function.js")

  # Function arguments
  json_args = jsonencode({
    key = "value"
  })
}
```

A configuração da v2.0:

```hcl
# Function (v2.0)
resource "azion_function" "example" {
  name   = "my-function"
  active = true
  code   = file("${path.module}/function.js")

  # Function arguments
  json_args = jsonencode({
    key = "value"
  })
}
```

### Migre uma configuração completa

Uma configuração com uma aplicação, uma origin, um domínio e uma function muda em quatro pontos: o main setting da aplicação recebe o nome da v2.0, um connector substitui a origin, um workload e um deployment substituem o domínio e a function recebe o tipo da v2.0. Para os recursos de aplicação, consulte [Recursos de Applications](/pt-br/documentacao/devtools/terraform/applications/).

A configuração da v1.x:

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

provider "azion" {
  api_token = var.api_token
}

# Application (v1.x)
resource "azion_edge_application_main_setting" "app" {
  name = "my-application"
}

# Origin
resource "azion_edge_application_origin" "origin" {
  edge_application_id = azion_edge_application_main_setting.app.id
  name                = "my-origin"
  origin_type         = "single_origin"
  origin_address      = "origin.example.com"
}

# Domain
resource "azion_domain" "domain" {
  name             = "my-domain"
  edge_application = azion_edge_application_main_setting.app.id
  domain_name      = "example.com"
}

# Function (v1.x)
resource "azion_edge_function" "func" {
  name   = "my-function"
  active = true
  code   = file("${path.module}/function.js")
}
```

A configuração da v2.0:

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

provider "azion" {
  api_token = var.api_token
}

# Application
resource "azion_application_main_setting" "app" {
  name = "my-application"
}

# Connector (replaces origin)
resource "azion_connector" "connector" {
  name = "my-connector"
  # Connector configuration
}

# Workload (replaces domain)
resource "azion_workload" "workload" {
  name = "my-workload"
}

# Workload deployment
resource "azion_workload_deployment" "deployment" {
  workload_id = azion_workload.workload.id
  # Deployment configuration
}

# Function (renamed)
resource "azion_function" "func" {
  name   = "my-function"
  active = true
  code   = file("${path.module}/function.js")
}
```

---

## Importe os recursos com os tipos da v2.0

Os recursos que você removeu do state continuam na sua conta Azion. Importe cada um com o tipo de recurso da v2.0 usando `terraform import <type>.<name> <id>`.

Para importar o workload, o connector e a function:

```bash
# Import workloads
terraform import azion_workload.example <workload_id>

# Import connectors
terraform import azion_connector.example <connector_id>

# Import functions
terraform import azion_function.example <function_id>
```

Substitua cada ID pelo ID do recurso na Azion API v4. Um recurso da API v3 pode ter outro ID na API v4, então consulte os IDs no [Azion Console](https://console.azion.com/). O state lista os recursos importados com os tipos da v2.0.

---

## Revise e aplique o plano

Um plano mostra o que o Terraform muda antes que qualquer mudança aconteça na sua conta.

Para visualizar as mudanças, execute:

```bash
terraform plan
```

Na saída do plano, confirme três pontos:

- Nenhum recurso que você espera manter é destruído.
- Os recursos que você espera criar aparecem no plano.
- Os atributos correspondem aos argumentos da v2.0 que você definiu na configuração.

Para aplicar as mudanças, execute o comando primeiro em um ambiente de teste:

```bash
terraform apply
```

O Terraform gerencia os recursos pelo provider 2.0.0 e pela Azion API v4. Para erros durante a migração, consulte [Solucionar problemas do Terraform Provider](/pt-br/documentacao/devtools/terraform/solucao-de-problemas/).

---

## Faça a limpeza após a migração

Depois do apply, conclua a migração no seu projeto:

- Confirme que os recursos migrados funcionam na sua conta Azion.
- Atualize os pipelines de CI/CD que executam o Terraform.
- Remova o código da v1.x que a configuração não usa mais.
- Atualize a documentação do projeto e informe a sua equipe sobre a mudança.
- Arquive os backups quando a migração estiver confirmada.

O projeto roda no provider v2.0, sem nenhum recurso da v1.x na configuração ou no state.

---

## Próximos passos

- [Solucionar problemas do Terraform Provider](/pt-br/documentacao/devtools/terraform/solucao-de-problemas.md): Corrija erros de versão, de tipo de recurso, de state e de importação.
- [Recursos de Workloads](/pt-br/documentacao/devtools/terraform/workloads.md): Defina todos os argumentos de um workload e dos deployments dele.
- [Recursos de Connectors](/pt-br/documentacao/devtools/terraform/connectors.md): Configure o connector que substitui uma origin.
- [Recursos de Applications](/pt-br/documentacao/devtools/terraform/applications.md): Gerencie os recursos de aplicação que a v2.0 renomeou.
