# Recursos de Applications

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

Uma aplicação reúne a lógica de entrega de conteúdo da Azion Platform: as suas [configurações de cache](/pt-br/documentacao/plataforma/applications/cache/cache-settings/), as regras do [Rules Engine](/pt-br/documentacao/plataforma/applications/rules-engine/) que processam cada requisição, os seus [device groups](/pt-br/documentacao/plataforma/applications/device-groups/) e as [instâncias de function](/pt-br/documentacao/plataforma/applications/functions-instances/) que ela executa. O Azion Terraform Provider gerencia [Applications](/pt-br/documentacao/plataforma/applications/) com cinco recursos e lê aplicações com nove data sources. Para migrar uma configuração v1.x para esses recursos, consulte [Migre do provider v1.x para o v2.0](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4/).

---

## Recursos de aplicação

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

`azion_application_main_setting` exige `name`, uma string que contém o nome da aplicação. Uma configuração de cache, uma regra do Rules Engine e uma instância de function pertencem a uma aplicação, então cada um desses recursos recebe o ID dessa aplicação em `application_id`. Configurações de cache e regras também recebem um `name`, e uma regra recebe a `phase` em que ela é executada. `azion_application_functions_instance` recebe `function_id`, o ID de uma function que o recurso `azion_function` gerencia. A página de cada recurso no Terraform Registry lista todos os argumentos.

---

## Data sources

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

---

## Exemplo

Esta configuração fixa o provider na versão 2.0.0, cria uma aplicação, adiciona uma configuração de cache e uma regra do Rules Engine na fase `request`, instancia uma function na aplicação e retorna o ID da aplicação em um output. Ela 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. A instância de function lê `function_id` de um recurso `azion_function` chamado `my_function`, que esta configuração não declara. Para encontrar esse recurso, consulte [Recursos e data sources](/pt-br/documentacao/devtools/terraform/examples/#functions).

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

provider "azion" {
  api_token = var.api_token
}

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

# Configure cache
resource "azion_application_cache_setting" "my_cache" {
  application_id = azion_application_main_setting.my_app.id
  name           = "static-cache"

  # Cache configuration
}

# Create rule in Rules Engine
resource "azion_application_rule_engine" "my_rule" {
  application_id = azion_application_main_setting.my_app.id
  name           = "redirect-rule"
  phase          = "request"

  # Criteria and behaviors
}

# Instantiate a function
resource "azion_application_functions_instance" "my_function" {
  application_id = azion_application_main_setting.my_app.id
  function_id    = azion_function.my_function.id

  # Instance configuration
}

output "application_id" {
  value = azion_application_main_setting.my_app.id
}
```

---

## Recursos relacionados

- [Recursos e data sources](/pt-br/documentacao/devtools/terraform/examples.md): Todos os recursos e data sources do provider, incluindo o recurso de Functions que uma instância de function referencia.
- [Recursos de Workloads](/pt-br/documentacao/devtools/terraform/workloads.md): Os recursos que criam workloads e fazem o deploy deles.
- [Recursos de Connectors](/pt-br/documentacao/devtools/terraform/connectors.md): O recurso que gerencia connectors para origens.
- [Migre do provider v1.x para o v2.0](/pt-br/documentacao/devtools/terraform/migration-v3-to-v4.md): Os passos que movem uma configuração v1.x de recursos de aplicação para o provider v2.0.
