Este guia fornece instruções detalhadas para migrar do Azion Terraform Provider v1.x (API v3) para v2.0 (API v4). Siga os passos abaixo para garantir uma transição suave.


Visão Geral da Migração

O Terraform Provider v2.0 representa uma versão principal que migra para a API v4 da Azion. Esta versão introduz novos recursos e remove os descontinuados para se alinhar com a nova arquitetura da API.

Mudanças Principais

Aspectov1.x (API v3)v2.0 (API v4)
Versão da APIAzion API v3Azion API v4
Gerenciamento de Domíniosrecurso azion_domainrecursos azion_workload e azion_workload_deployment
Gerenciamento de Originsrecurso azion_edge_application_originrecurso azion_connector
Functionsrecurso azion_edge_functionrecurso azion_function
Páginas PersonalizadasNão disponívelrecurso azion_custom_page

Compatibilidade de Versões

Versão do Terraform ProviderVersão da APIStatus
1.41.0 e anterioresAPI v3Descontinuado
2.0.0 e posterioresAPI v4Atual

Antes de Começar

Antes de iniciar o processo de migração, certifique-se de ter concluído as seguintes preparações.

Pré-requisitos

  • Terraform: Versão 1.0 ou posterior instalada
  • Conta Azion: Conta válida com acesso à API v4
  • Token Pessoal: Um token pessoal válido com permissões apropriadas
  • Backup: Um backup completo do seu estado Terraform atual e configurações

Backup da Configuração

Crie um backup da sua configuração Terraform atual e dos arquivos de estado antes de fazer qualquer alteração:

Terminal window
# Criar um diretório de backup
mkdir -p ~/terraform-backup
# Copiar seus arquivos de configuração
cp -r ./seu-projeto-terraform ~/terraform-backup/
# Fazer backup do arquivo de estado (se usando estado local)
cp terraform.tfstate ~/terraform-backup/
cp terraform.tfstate.backup ~/terraform-backup/ 2>/dev/null || true
# Se usando estado remoto, baixar uma cópia local
terraform state pull > ~/terraform-backup/terraform.tfstate

Fixar Sua Versão

Se você precisar permanecer na v1.x temporariamente, fixar a versão do provider:

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

A versão 1.41.0 e anteriores não recebem mais atualizações ou correções de bugs. Planeje sua migração para v2.0 o mais breve possível.


Breaking Changes

Esta seção detalha as breaking changes entre v1.x e v2.0.

Recursos Removidos

Os seguintes recursos e data sources foram removidos na v2.0:

RecursoStatusSubstituto
azion_domainRemovidoUse azion_workload e azion_workload_deployment
azion_domains (data source)RemovidoUse data source azion_workloads
azion_edge_application_originRemovidoUse azion_connector
azion_edge_applications_origins (data source)RemovidoUse data source azion_connectors

Recursos Renomeados

Recurso v1.xRecurso v2.0Observações
azion_edge_functionazion_functionRecurso renomeado para se alinhar com a nova nomenclatura do produto

Novos Recursos na v2.0

RecursoDescrição
azion_workloadGerenciar workloads da Azion (substitui o gerenciamento de domínios)
azion_workload_deploymentGerenciar deployments de workload
azion_connectorGerenciar connectors da Azion (substitui o gerenciamento de origins)
azion_custom_pageGerenciar páginas personalizadas

Recursos Inalterados

Os seguintes recursos permanecem disponíveis com seus nomes originais:

RecursoDescrição
azion_edge_application_main_settingConfigurações principais da aplicação
azion_edge_application_cache_settingConfigurações de cache
azion_edge_application_rule_engineRules Engine
azion_edge_application_edge_functions_instanceInstâncias de função para aplicações
azion_edge_firewall_main_settingConfigurações principais do firewall
azion_edge_firewall_edge_functions_instanceInstâncias de função para firewall
azion_intelligent_dns_zoneZonas DNS
azion_intelligent_dns_recordRegistros DNS
azion_intelligent_dns_dnssecConfigurações DNSSEC
azion_network_listNetwork Lists
azion_waf_rule_setConjuntos de regras WAF
azion_digital_certificateCertificados digitais
azion_environment_variableVariáveis de ambiente

Mapeamento de Recursos

Esta seção fornece o mapeamento detalhado entre os recursos v1.x e v2.0.

Mapeamento de Domínio para Workload

O gerenciamento de domínios na v1.x foi substituído por um modelo de dois recursos na v2.0:

v1.x (Domain)v2.0 (Workload)
azion_domainazion_workload + azion_workload_deployment
azion_domains (data source)azion_workloads

Diferenças Principais:

  • v1.x: Um único recurso azion_domain gerenciava todo o ciclo de vida do domínio
  • v2.0: Separação de responsabilidades com azion_workload (definição) e azion_workload_deployment (deployment)

Mapeamento de Origin para Connector

O gerenciamento de origins foi substituído por connectors:

v1.x (Origin)v2.0 (Connector)
azion_edge_application_originazion_connector
azion_edge_applications_origins (data source)azion_connectors

Diferenças Principais:

  • v1.x: Origins eram definidos dentro do contexto de Edge Applications
  • v2.0: Connectors são recursos independentes que fornecem opções de integração mais flexíveis

Mapeamento de Edge Function para Function

v1.xv2.0
azion_edge_functionazion_function
azion_edge_functions (data source)data source azion_functions

Exemplos de Migração

Esta seção fornece exemplos de configuração lado a lado para migrar seus recursos Terraform.

Migração de Domínio para Workload

Configuração v1.x

terraform {
required_providers {
azion = {
source = "aziontech/azion"
version = "1.41.0"
}
}
}
provider "azion" {
api_token = var.api_token
}
# Recurso Domain (v1.x)
resource "azion_domain" "example" {
name = "meu-dominio"
cname_access_only = false
digital_certificate = 1234
edge_application = 5678
is_active = true
# Vinculação do nome do domínio
domain_name = "exemplo.com"
}

Configuração v2.0

terraform {
required_providers {
azion = {
source = "aziontech/azion"
version = "2.0.0"
}
}
}
provider "azion" {
api_token = var.api_token
}
# Recurso Workload (v2.0)
resource "azion_workload" "example" {
name = "meu-workload"
# Opções de configuração do workload
# Consulte a documentação do Terraform Registry para opções completas
}
# Deployment do workload (v2.0)
resource "azion_workload_deployment" "example" {
workload_id = azion_workload.example.id
# Configuração do deployment
# Consulte a documentação do Terraform Registry para opções completas
}

Migração de Origin para Connector

Configuração v1.x

# Edge Application Origin (v1.x)
resource "azion_edge_application_origin" "example" {
edge_application_id = azion_edge_application_main_setting.example.id
name = "minha-origin"
origin_type = "single_origin"
origin_address = "origin.exemplo.com"
origin_protocol = "https"
origin_path = "/api"
host_header = "origin.exemplo.com"
# Configurações de conexão
connection_timeout = 30
read_timeout = 60
}

Configuração v2.0

# Connector (v2.0)
resource "azion_connector" "example" {
name = "meu-connector"
# Configuração do connector
# Consulte a documentação do Terraform Registry para opções completas
# Exemplo de configuração
origin = {
address = "origin.exemplo.com"
protocol = "https"
path = "/api"
}
# Configurações de conexão
connection_timeout = 30
read_timeout = 60
}

Migração de Edge Function

Configuração v1.x

# Edge Function (v1.x)
resource "azion_edge_function" "example" {
name = "minha-funcao"
active = true
code = file("${path.module}/function.js")
# Argumentos da função
json_args = jsonencode({
key = "valor"
})
}

Configuração v2.0

# Function (v2.0)
resource "azion_function" "example" {
name = "minha-funcao"
active = true
code = file("${path.module}/function.js")
# Argumentos da função
json_args = jsonencode({
key = "valor"
})
}

Exemplo Completo: Aplicação com Workload

Configuração v1.x

terraform {
required_providers {
azion = {
source = "aziontech/azion"
version = "1.41.0"
}
}
}
provider "azion" {
api_token = var.api_token
}
# Edge Application
resource "azion_edge_application_main_setting" "app" {
name = "minha-aplicacao"
}
# Origin
resource "azion_edge_application_origin" "origin" {
edge_application_id = azion_edge_application_main_setting.app.id
name = "minha-origin"
origin_type = "single_origin"
origin_address = "origin.exemplo.com"
}
# Domain
resource "azion_domain" "domain" {
name = "meu-dominio"
edge_application = azion_edge_application_main_setting.app.id
domain_name = "exemplo.com"
}
# Edge Function
resource "azion_edge_function" "func" {
name = "minha-funcao"
active = true
code = file("${path.module}/function.js")
}

Configuração v2.0

terraform {
required_providers {
azion = {
source = "aziontech/azion"
version = "2.0.0"
}
}
}
provider "azion" {
api_token = var.api_token
}
# Edge Application (inalterada)
resource "azion_edge_application_main_setting" "app" {
name = "minha-aplicacao"
}
# Connector (substitui origin)
resource "azion_connector" "connector" {
name = "meu-connector"
# Configuração do connector
}
# Workload (substitui domain)
resource "azion_workload" "workload" {
name = "meu-workload"
}
# Workload deployment
resource "azion_workload_deployment" "deployment" {
workload_id = azion_workload.workload.id
# Configuração do deployment
}
# Function (renomeada)
resource "azion_function" "func" {
name = "minha-funcao"
active = true
code = file("${path.module}/function.js")
}

Passos de Migração de Estado

Siga estes passos para migrar seu estado Terraform de v1.x para v2.0.

Passo 1: Atualizar a Versão do Provider

Atualize sua configuração Terraform para usar o Provider v2.0:

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

Passo 2: Inicializar o Novo Provider

Execute Terraform init para baixar o novo provider:

Terminal window
terraform init -upgrade

Passo 3: Remover Recursos Descontinuados do Estado

Remova os recursos descontinuados do seu estado Terraform:

Terminal window
# Remover recursos de domínio
terraform state rm azion_domain.example
# Remover recursos de origin
terraform state rm azion_edge_application_origin.example
# Remover recursos de edge function (serão recriados como azion_function)
terraform state rm azion_edge_function.example

Passo 4: Atualizar Arquivos de Configuração

Atualize seus arquivos .tf com as novas configurações de recursos seguindo os exemplos na seção Exemplos de Migração.

Passo 5: Importar Novos Recursos

Importe seus recursos existentes para os novos tipos de recursos:

Terminal window
# Importar workloads
terraform import azion_workload.example <workload_id>
# Importar connectors
terraform import azion_connector.example <connector_id>
# Importar functions
terraform import azion_function.example <function_id>

Passo 6: Verificar o Plano

Execute um plan para verificar as mudanças esperadas:

Terminal window
terraform plan

Revise a saída cuidadosamente para garantir:

  • Nenhum recurso será destruído inesperadamente
  • Novos recursos serão criados corretamente
  • Atributos dos recursos estão mapeados corretamente

Passo 7: Aplicar as Mudanças

Aplique as mudanças:

Terminal window
terraform apply

Solução de Problemas

Esta seção aborda problemas comuns encontrados durante a migração.

Erros Comuns e Soluções

Erro: Conflito de Versão do Provider

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

Solução: Certifique-se de especificar a fonte e versão corretas. Execute:

Terminal window
terraform init -upgrade

Erro: Tipo de Recurso Não Encontrado

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".

Solução: Este recurso foi removido na v2.0. Substitua pelos recursos azion_workload e azion_workload_deployment.

Erro: Falha na Migração de Estado

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

Solução: O recurso já foi removido ou não existe. Remova-o do estado:

Terminal window
terraform state rm azion_edge_application_origin.example

Erro: Importação Não Encontrada

Error: Cannot import non-existent remote object

Solução: Certifique-se de que o ID do recurso que você está importando existe na API v4. Alguns recursos da API v3 podem ter IDs diferentes na API v4. Verifique o Console da Azion para encontrar os IDs de recursos corretos.

Recursos Adicionais

Obtendo Ajuda

Se você encontrar problemas durante a migração:

  1. Revise a seção Solução de Problemas
  2. Consulte a documentação do Terraform Registry
  3. Entre em contato com o Suporte Azion através do Portal de Suporte
  4. Visite a Comunidade Azion para recursos adicionais