# Primeiros passos com o Azion Terraform Provider

Este guia orienta você na sua primeira infraestrutura como código com o Azion Terraform Provider.

- Crie um projeto Terraform que exige o provider.
- Forneça o seu personal token ao provider.
- Declare quatro recursos e crie-os com `terraform apply`.
- Verifique os recursos no state do Terraform.

A configuração declara quatro recursos independentes, e nenhum recurso faz referência a outro:

1. `azion_workload` cria um [workload](/pt-br/documentacao/plataforma/workloads/).
2. `azion_connector` cria um [connector](/pt-br/documentacao/plataforma/connectors/).
3. `azion_application_main_setting` cria uma [aplicação](/pt-br/documentacao/plataforma/applications/).
4. `azion_intelligent_dns_zone` cria uma zona ativa no [Edge DNS](/pt-br/documentacao/plataforma/edge-dns/).

Para mais informações sobre o provider, consulte [Azion Terraform Provider](/pt-br/documentacao/devtools/terraform/).

---

## Pré-requisitos

- [Terraform](https://developer.hashicorp.com/terraform/downloads) 1.0 ou posterior.
- Uma conta Azion. Para criar uma, consulte [Criar uma conta](/pt-br/documentacao/fundamentos/criar-uma-conta/).
- Um personal token com as permissões que os seus recursos exigem. Para mais informações, consulte [Tokens pessoais](/pt-br/documentacao/fundamentos/personal-tokens/).

---

## Instale o Terraform

O Azion Terraform Provider precisa do Terraform Core na sua máquina. Se o Terraform não estiver instalado, instale-o pela página [Terraform downloads](https://developer.hashicorp.com/terraform/downloads).

Verifique a versão instalada:

```bash
terraform version
```

O comando exibe a versão do Terraform Core. O provider precisa da versão 1.0 ou posterior.

---

## Crie o projeto e declare o provider

Crie um diretório para o projeto e acesse-o:

```bash
mkdir azion-terraform
cd azion-terraform
```

No diretório `azion-terraform`, crie um arquivo `main.tf` com o conteúdo a seguir. O bloco `required_providers` define a origem do provider como `aziontech/azion` e fixa a versão `2.0.0`:

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

provider "azion" {
  # Recommended: use AZION_API_TOKEN environment variable
  # api_token = var.api_token
}
```

O projeto declara o Azion Terraform Provider em uma versão fixa.

---

## Informe o seu personal token

O provider lê o seu personal token da variável de ambiente `AZION_API_TOKEN`, que é o método recomendado. No terminal que executa o Terraform, defina a variável. Substitua `[TOKEN VALUE]` pelo seu personal token:

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

O bloco `provider "azion"` em `main.tf` permanece vazio, e nenhum arquivo do projeto guarda o token.

Para manter o token em uma variável do Terraform, o provider o recebe no argumento `api_token`. Crie um arquivo `variables.tf` que declara `api_token` como uma variável sensível:

```hcl
variable "api_token" {
  type        = string
  description = "Azion Personal Token"
  sensitive   = true
}
```

Crie um arquivo `terraform.tfvars` que define a variável. Esse arquivo guarda o token, então adicione `terraform.tfvars` ao seu arquivo `.gitignore`:

```hcl
api_token = "[TOKEN VALUE]"
```

Em `main.tf`, substitua o bloco `provider "azion"` por um bloco que passa a variável ao provider:

```hcl
provider "azion" {
  api_token = var.api_token
}
```

O provider recebe o seu personal token, do ambiente ou da variável `api_token`.

---

## Declare os recursos

No diretório `azion-terraform`, crie um arquivo `resources.tf`. Ele declara um workload, um connector, uma aplicação e uma zona DNS:

```hcl
# Create a workload
resource "azion_workload" "my_workload" {
  name = "my-first-workload"
}

# Create a connector
resource "azion_connector" "my_connector" {
  name = "my-connector"
}

# Create an application
resource "azion_application_main_setting" "my_app" {
  name = "my-application"
}

# Create a DNS zone
resource "azion_intelligent_dns_zone" "my_zone" {
  name   = "example.com"
  active = true
}
```

Substitua `example.com` pelo domínio da sua zona. O projeto declara quatro recursos que ainda não existem na sua conta.

---

## Crie os recursos

No diretório `azion-terraform`, inicialize o projeto Terraform:

```bash
terraform init
```

Revise o plano das mudanças antes de aplicá-las:

```bash
terraform plan
```

Aplique a configuração:

```bash
terraform apply
```

Na pergunta de confirmação, digite `yes`. O Terraform cria os quatro recursos na sua conta Azion.

Se um comando retornar um erro, consulte [Solucionar problemas do Terraform Provider](/pt-br/documentacao/devtools/terraform/solucao-de-problemas/).

---

## Verifique os recursos

Liste os recursos no state do Terraform e, em seguida, exiba os detalhes do workload:

```bash
# List all resources
terraform state list

# View details of a specific resource
terraform state show azion_workload.my_workload
```

O state guarda os quatro recursos, e `terraform state show` exibe os atributos que o Terraform armazena para o workload.

---

## Exemplo completo

A configuração a seguir, para a versão `2.0.0` do provider, reúne o provider e três recursos em um único arquivo. Ela declara o próprio provider, então use-a em um diretório vazio, e não ao lado de outro arquivo que declara o provider. Ela lê o token da variável `api_token`, então precisa de um arquivo `variables.tf` que declara `api_token` e de um arquivo `terraform.tfvars` que define o valor dela. Cada bloco de recurso marca onde ficam os seus outros argumentos:

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

provider "azion" {
  api_token = var.api_token
}

# Create a workload
resource "azion_workload" "example" {
  name = "my-workload"
  # Additional configuration...
}

# Create a connector
resource "azion_connector" "example" {
  name = "my-connector"
  # Additional configuration...
}

# Create an application
resource "azion_application_main_setting" "example" {
  name = "my-application"
  # Additional configuration...
}
```

---

## Próximos passos

- [Recursos de Workloads](/pt-br/documentacao/devtools/terraform/workloads.md): Crie workloads e os seus deployments e leia-os com data sources.
- [Recursos de Applications](/pt-br/documentacao/devtools/terraform/applications.md): Configure aplicações com configurações de cache, regras, function instances e device groups.
- [Recursos de segurança](/pt-br/documentacao/devtools/terraform/security.md): Gerencie firewalls, as suas function instances, conjuntos de regras do WAF e network lists.
- [Boas práticas do Terraform Provider](/pt-br/documentacao/devtools/terraform/best-practices.md): Organize arquivos, armazene o state remotamente, mantenha segredos fora do controle de versão e fixe as versões do provider.
