# Applications - Terraform Resources

import DocButton from '~/components/webkit/DocButton.vue';

<DocButton href="https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_main_setting" label="View in Terraform Registry" kind="secondary" size="medium" />

Applications are the core of content delivery on the Azion Platform. They allow you to configure cache, processing rules, and integrate functions.

---

The Applications resources allow you to manage all aspects of your applications through Terraform.

### Available Resources

| Resource | Description |
|---------|-------------|
| [`azion_application_main_setting`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_main_setting) | Application main settings |
| [`azion_application_cache_setting`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_cache_setting) | Cache settings |
| [`azion_application_rule_engine`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_rule_engine) | Rules Engine |
| [`azion_application_functions_instance`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_functions_instance) | Function instances |
| [`azion_application_device_group`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_device_group) | Device groups |

### Available Data Sources

| Data Source | Description |
|--------------|-------------|
| [`azion_application_main_settings`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_main_settings) | Query main settings |
| [`azion_application_cache_settings`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_cache_settings) | Query cache settings |
| [`azion_application_rules_engine`](https://registry.terraform.io/providers/aziontech/azion/latest/docs/data-sources/application_rules_engine) | Query rules |

---

## azion_application_main_setting

### Basic Example

```hcl
resource "azion_application_main_setting" "example" {
  name = "my-application"
  
  # Main configuration
}
```

### Main Arguments

| Argument | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | Application name |

For the complete list of arguments, see the [Terraform Registry](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/application_main_setting).

---

## azion_application_cache_setting

### Basic Example

```hcl
resource "azion_application_cache_setting" "example" {
  application_id = azion_application_main_setting.example.id
  name                = "my-cache-config"
  
  # Cache configuration
}
```

---

## azion_application_rule_engine

### Basic Example

```hcl
resource "azion_application_rule_engine" "example" {
  application_id = azion_application_main_setting.example.id
  name                = "my-rule"
  phase               = "request"
  
  # Criteria and behaviors
}
```

---

## Complete Example

```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
}
```

---

## Related Resources

- [Workloads](/en/documentation/products/terraform-provider/resources/workloads/) - Manage workloads
- [Connectors](/en/documentation/products/terraform-provider/resources/connectors/) - Manage connectors
- [Migration Guide](/en/documentation/products/terraform-provider/terraform-migration-v3-to-v4/) - Migrate from v1.x to v2.0