# Recursos e data sources

[Ver no Terraform Registry](https://registry.terraform.io/providers/aziontech/azion/latest/docs)

O Azion Terraform Provider v2.0 configura a Azion Platform com dois tipos de bloco. Um recurso cria, atualiza e exclui um objeto na Azion, e um data source consulta informações sobre objetos que já existem. Um nome no singular, como `azion_workload`, costuma ser ao mesmo tempo um recurso e o data source que lê um objeto, e o seu plural, `azion_workloads`, é o data source que lista esses objetos.

Cada seção abaixo cobre um produto: os seus recursos, os seus data sources e um bloco de configuração que os usa. Cada nome leva à sua página no Terraform Registry.

---

## Workloads

Estes recursos e data sources gerenciam workloads e os seus deployments. Para mais informações, consulte [Recursos de Workloads](/pt-br/documentacao/devtools/terraform/workloads/).

| Recurso                                                                                                                          | Descrição                                  |
| -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
| [`azion_workload`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/workload)                       | Cria e gerencia um workload.               |
| [`azion_workload_deployment`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/workload_deployment) | Cria e gerencia um deployment de workload. |

| Data source                                                                                                                           | Descrição                      |
| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
| [`azion_workloads`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/workloads)                       | Lista workloads.               |
| [`azion_workload`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/workload)                         | Lê um workload.                |
| [`azion_workload_deployments`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/workload_deployments) | Lista deployments de workload. |
| [`azion_workload_deployment`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/workload_deployment)   | Lê um deployment.              |

Este bloco cria um workload e um deployment dele e, em seguida, consulta os workloads existentes:

```hcl
# Create a workload
resource "azion_workload" "example" {
  name = "my-workload"
  
  application_id = azion_application_main_setting.app.id
  
  active = true
}

# Create a deployment
resource "azion_workload_deployment" "example" {
  workload_id = azion_workload.example.id
  
  active = true
}

# Query existing workloads
data "azion_workloads" "all" {}
```

---

## Connectors

Estes recursos e data sources gerenciam connectors, que ligam uma aplicação a uma origem externa. Para mais informações, consulte [Recursos de Connectors](/pt-br/documentacao/devtools/terraform/connectors/).

| Recurso                                                                                                      | Descrição                     |
| ------------------------------------------------------------------------------------------------------------ | ----------------------------- |
| [`azion_connector`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/connector) | Cria e gerencia um connector. |

| Data source                                                                                                       | Descrição         |
| ----------------------------------------------------------------------------------------------------------------- | ----------------- |
| [`azion_connectors`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/connectors) | Lista connectors. |
| [`azion_connector`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/connector)   | Lê um connector.  |

Este bloco cria um connector para uma origem HTTPS e, em seguida, consulta os connectors existentes:

```hcl
# Create a connector
resource "azion_connector" "example" {
  name = "my-connector"
  
  origin = {
    address = "origin.example.com"
    protocol = "https"
  }
}

# Query existing connectors
data "azion_connectors" "all" {}
```

---

## Applications

Estes recursos e data sources gerenciam aplicações e as suas configurações: configurações de cache, device groups, regras do Rules Engine e instâncias de function. Para mais informações, consulte [Recursos de Applications](/pt-br/documentacao/devtools/terraform/applications/).

| Recurso                                                                                                                                                | Descrição                                                     |
| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- |
| [`azion_application_main_setting`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_main_setting)             | Cria e gerencia as configurações principais de uma aplicação. |
| [`azion_application_cache_setting`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_cache_setting)           | Cria e gerencia uma configuração de cache.                    |
| [`azion_application_device_group`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_device_group)             | Cria e gerencia um device group.                              |
| [`azion_application_rule_engine`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_rule_engine)               | Cria e gerencia uma regra do Rules Engine.                    |
| [`azion_application_functions_instance`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_functions_instance) | Cria e gerencia uma instância de function em uma aplicação.   |

| Data source                                                                                                                                                | Descrição                                           |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| [`azion_application_main_settings`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_main_settings)            | Consulta as configurações principais de aplicações. |
| [`azion_application_cache_settings`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_cache_settings)          | Lista configurações de cache.                       |
| [`azion_application_cache_setting`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_cache_setting)            | Lê uma configuração de cache.                       |
| [`azion_application_device_groups`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_device_groups)            | Lista device groups.                                |
| [`azion_application_device_group`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_device_group)              | Lê um device group.                                 |
| [`azion_application_rules_engine`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_rules_engine)              | Lista regras do Rules Engine.                       |
| [`azion_application_rule_engine`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_rule_engine)                | Lê uma regra do Rules Engine.                       |
| [`azion_application_functions_instances`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_functions_instance) | Lista instâncias de function.                       |
| [`azion_application_functions_instance`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_functions_instance)  | Lê uma instância de function.                       |

Este bloco cria uma aplicação e uma configuração de cache que respeita a política de cache da origem:

```hcl
# Create an Application
resource "azion_application_main_setting" "app" {
  name = "my-application"
  
  active = true
}

# Configure cache
resource "azion_application_cache_setting" "cache" {
  application_id = azion_application_main_setting.app.id
  name = "cache-default"
  
  browser_cache_settings = "honor"
  cdn_cache_settings = "honor"
}
```

---

## Edge DNS

Estes recursos e data sources gerenciam zonas, registros e DNSSEC do [Edge DNS](/pt-br/documentacao/plataforma/edge-dns/). Os nomes mantêm a forma `intelligent_dns` que o provider usa. Para mais informações, consulte [Recursos de Edge DNS](/pt-br/documentacao/devtools/terraform/dns/).

| Recurso                                                                                                                                | Descrição                                        |
| -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| [`azion_intelligent_dns_zone`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/intelligent_dns_zone)     | Cria e gerencia uma zona DNS.                    |
| [`azion_intelligent_dns_record`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/intelligent_dns_record) | Cria e gerencia um registro DNS.                 |
| [`azion_intelligent_dns_dnssec`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/intelligent_dns_dnssec) | Gerencia as configurações de DNSSEC de uma zona. |

| Data source                                                                                                                                 | Descrição                                  |
| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
| [`azion_intelligent_dns_zones`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/intelligent_dns_zones)     | Lista zonas DNS.                           |
| [`azion_intelligent_dns_zone`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/intelligent_dns_zone)       | Lê uma zona DNS.                           |
| [`azion_intelligent_dns_records`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/intelligent_dns_records) | Lista registros DNS.                       |
| [`azion_intelligent_dns_dnssec`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/intelligent_dns_dnssec)   | Lê as configurações de DNSSEC de uma zona. |

Este bloco cria uma zona e um registro `A` nela e, em seguida, consulta as zonas existentes:

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

# Create a DNS record
resource "azion_intelligent_dns_record" "www" {
  zone_id = azion_intelligent_dns_zone.zone.id
  name = "www"
  type = "A"
  ttl = 3600
  
  value = "192.0.2.1"
}

# Query existing DNS zones
data "azion_intelligent_dns_zones" "all" {}
```

---

## Segurança

Estes recursos e data sources gerenciam firewalls, as suas regras do Rules Engine e instâncias de function, as configurações do Web Application Firewall (WAF) e network lists. Para mais informações, consulte [Recursos de segurança](/pt-br/documentacao/devtools/terraform/security/).

| Recurso                                                                                                                                          | Descrição                                                   |
| ------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------- |
| [`azion_firewall_main_setting`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/firewall_main_setting)             | Cria e gerencia as configurações principais de um firewall. |
| [`azion_firewall_rule_engine`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/firewall_rule_engine)               | Cria e gerencia uma regra do Rules Engine de um firewall.   |
| [`azion_firewall_functions_instance`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/firewall_functions_instance) | Cria e gerencia uma instância de function em um firewall.   |
| [`azion_network_list`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/network_list)                               | Cria e gerencia uma network list.                           |
| [`azion_waf`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/waf)                                                 | Cria e gerencia um WAF.                                     |
| [`azion_waf_rule_set`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/waf_rule_set)                               | Cria e gerencia um rule set do WAF.                         |

| Data source                                                                                                                                         | Descrição                                     |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- |
| [`azion_firewall_main_settings`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/firewall_main_settings)           | Lista firewalls.                              |
| [`azion_firewall_main_setting`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/firewall_main_setting)             | Lê um firewall.                               |
| [`azion_firewall_rules_engine`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/firewall_rules_engine)             | Lista as regras do Rules Engine de firewalls. |
| [`azion_firewall_rule_engine`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/firewall_rule_engine)               | Lê uma regra do Rules Engine de um firewall.  |
| [`azion_firewall_function_instances`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/firewall_functions_instance) | Lista as instâncias de function de firewalls. |
| [`azion_firewall_functions_instance`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/firewall_functions_instance) | Lê uma instância de function de um firewall.  |
| [`azion_network_lists`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/network_lists)                             | Lista network lists.                          |
| [`azion_network_list`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/network_list)                               | Lê uma network list.                          |
| [`azion_wafs`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/wafs)                                               | Lista WAFs.                                   |
| [`azion_waf`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/waf)                                                 | Lê um WAF.                                    |
| [`azion_waf_rule_sets`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/waf_rule_sets)                             | Lista rule sets do WAF.                       |
| [`azion_waf_rule_set`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/waf_rule_set)                               | Lê um rule set do WAF.                        |

Este bloco cria um firewall no modo `waf` e uma network list com dois intervalos de IP:

```hcl
# Create a Firewall
resource "azion_firewall_main_setting" "firewall" {
  name = "my-firewall"
  
  active = true
  mode = "waf"
}

# Create a Network List
resource "azion_network_list" "allowlist" {
  name = "allowlist-ips"
  list_type = "ip_cidr"
  
  items = [
    "192.0.2.0/24",
    "10.0.0.0/8"
  ]
}
```

---

## Certificados

Estes recursos e data sources gerenciam certificados digitais. Para mais informações, consulte [Recursos de certificados](/pt-br/documentacao/devtools/terraform/certificates/).

| Recurso                                                                                                                          | Descrição                               |
| -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- |
| [`azion_digital_certificate`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/digital_certificate) | Cria e gerencia um certificado digital. |

| Data source                                                                                                                           | Descrição                    |
| ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |
| [`azion_digital_certificates`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/digital_certificates) | Lista certificados digitais. |
| [`azion_digital_certificate`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/digital_certificate)   | Lê um certificado digital.   |

Este bloco cria um certificado a partir de um arquivo de certificado e de um arquivo de chave privada na pasta do módulo Terraform e, em seguida, consulta os certificados existentes:

```hcl
# Create a certificate
resource "azion_digital_certificate" "cert" {
  name = "my-certificate"
  
  certificate = file("${path.module}/cert.pem")
  private_key = file("${path.module}/key.pem")
}

# Query existing certificates
data "azion_digital_certificates" "all" {}
```

---

## Functions

Este recurso e estes data sources gerenciam [Functions](/pt-br/documentacao/plataforma/functions/). Nenhuma página de referência do provider cobre esses nomes.

| Recurso                                                                                                    | Descrição                     |
| ---------------------------------------------------------------------------------------------------------- | ----------------------------- |
| [`azion_function`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/function) | Cria e gerencia uma function. |

| Data source                                                                                                     | Descrição        |
| --------------------------------------------------------------------------------------------------------------- | ---------------- |
| [`azion_functions`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/functions) | Lista functions. |
| [`azion_function`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/function)   | Lê uma function. |

---

## Custom pages

Este recurso e estes data sources gerenciam custom pages. Nenhuma página de referência do provider cobre esses nomes.

| Recurso                                                                                                          | Descrição                        |
| ---------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| [`azion_custom_page`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/custom_page) | Cria e gerencia uma custom page. |

| Data source                                                                                                           | Descrição           |
| --------------------------------------------------------------------------------------------------------------------- | ------------------- |
| [`azion_custom_pages`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/custom_pages) | Lista custom pages. |
| [`azion_custom_page`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/custom_page)   | Lê uma custom page. |

---

## Exemplo completo

Esta configuração fixa o provider na versão 2.0.0 e cria uma aplicação com uma configuração de cache, um connector, um workload com um deployment e um firewall. Ela retorna como outputs os IDs da aplicação, do workload e do connector, e lê o seu personal token da variável `api_token` que [Primeiros passos com o Azion Terraform Provider](/pt-br/documentacao/devtools/terraform/getting-started/) declara.

```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"
  active = true
}

# Cache Setting
resource "azion_application_cache_setting" "cache" {
  application_id = azion_application_main_setting.app.id
  name = "cache-default"
  browser_cache_settings = "honor"
  cdn_cache_settings = "honor"
}

# Connector
resource "azion_connector" "origin" {
  name = "my-origin"
  origin = {
    address = "origin.example.com"
    protocol = "https"
  }
}

# Workload
resource "azion_workload" "main" {
  name = "my-workload"
  application_id = azion_application_main_setting.app.id
  active = true
}

# Workload Deployment
resource "azion_workload_deployment" "main" {
  workload_id = azion_workload.main.id
  active = true
}

# Firewall
resource "azion_firewall_main_setting" "firewall" {
  name = "my-firewall"
  active = true
  mode = "waf"
}

# Outputs
output "application_id" {
  value = azion_application_main_setting.app.id
}

output "workload_id" {
  value = azion_workload.main.id
}

output "connector_id" {
  value = azion_connector.origin.id
}
```

---

## Recursos relacionados

- [Azion Terraform Provider](/pt-br/documentacao/devtools/terraform.md): O que o provider gerencia e como ele chega à Azion API.
- [Primeiros passos com o Azion Terraform Provider](/pt-br/documentacao/devtools/terraform/getting-started.md): Instale o Terraform, configure o provider e o seu token e aplique uma primeira configuração.
- [Boas práticas do Terraform Provider](/pt-br/documentacao/devtools/terraform/best-practices.md): Como organizar o código, armazenar o state, proteger segredos e fixar as versões do provider.
- [Migre do provider v1.x para o v2.0](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4.md): Os recursos que a v2.0 remove, renomeia e adiciona, e como levar uma configuração v1.x para ela.
