# Azion CLI config

Os comandos `config` da Azion CLI gerenciam recursos da Azion a partir de arquivos de manifesto: `init` cria um arquivo `azion.json` vazio, `apply` cria ou atualiza os recursos que um arquivo [azion.config](/pt-br/documentacao/devtools/cli/azion-config-js/) declara, e `delete` exclui os recursos que o `azion.json` lista. As opções que todo comando aceita, como `--format`, `--out` e `-y`, estão em [Opções globais da Azion CLI](/pt-br/documentacao/devtools/cli/globals/).

---

## Uso

`azion config` agrupa os subcomandos `init`, `apply` e `delete`:

```bash
azion config [flags]
```

O comando não tem flags próprias. Execute-o com um subcomando.

Por padrão, os subcomandos `config` leem e gravam o `azion.json` no diretório atual. Os comandos `azion init`, `azion link` e `azion deploy` mantêm o mesmo arquivo na pasta `azion`. Para apontar um subcomando `config` para outra pasta, use `--config-dir`.

---

## Init

`azion config init` cria um arquivo `azion.json` para guardar o estado da sua aplicação:

```bash
azion config init [flags]
```

| Flag           | Curta | Tipo   | Padrão | Descrição                                            |
| -------------- | ----- | ------ | ------ | ---------------------------------------------------- |
| `--config-dir` | —     | string | `"."`  | Caminho da pasta onde o comando cria o `azion.json`. |
| `--force`      | —     | —      | —      | Sobrescreve um arquivo `azion.json` que já existe.   |

Este comando cria o arquivo em uma pasta vazia:

```bash
azion config init
```

O comando imprime o caminho do arquivo que criou:

```text
Creating azion.json file
Configuration file created successfully: <project-dir>/azion.json
For more information on azion.config, visit: https://github.com/aziontech/lib?tab=readme-ov-file#config/
```

O novo `azion.json` traz todas as chaves com um valor vazio:

```json
{
  "name": "",
  "bucket": "",
  "preset": "",
  "env": "",
  "prefix": "",
  "function": null,
  "application": {
    "id": 0,
    "name": ""
  },
  "domain": {
    "id": 0,
    "name": "",
    "domain_name": "",
    "url": ""
  },
  "rt-purge": {
    "purge_on_publish": false
  },
  "origin": null,
  "rules-engine": {
    "created": false,
    "rules": null
  },
  "cache-settings": null,
  "workloads": {
    "id": 0,
    "name": "",
    "domains": null,
    "url": "",
    "deployment_id": null
  },
  "connectors": null
}
```

Quando a pasta já tem um arquivo `azion.json`, o comando mantém o arquivo e para com `Error: Configuration file already exists`. Para substituir o arquivo, adicione `--force`.

---

## Apply

`azion config apply` lê o arquivo `azion.config` da pasta e cria ou atualiza na sua conta os recursos que ele declara:

```bash
azion config apply [flags]
```

| Flag            | Curta | Tipo   | Padrão | Descrição                                                                                                                                                                                                                                                                                                                                                               |
| --------------- | ----- | ------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--config-dir`  | —     | string | `"."`  | Caminho da pasta que contém o `azion.json` e o arquivo `azion.config`.                                                                                                                                                                                                                                                                                                  |
| `--config-file` | —     | string | —      | Caminho para o arquivo `azion.config` a aplicar, como `azion.staging.config.cjs`. Enquanto `--config-dir` indica uma pasta, a que contém o `azion.json` e o arquivo `azion.config`, `--config-file` indica o próprio arquivo de configuração. Um caminho relativo é resolvido a partir do diretório atual. Um caminho para um arquivo inexistente faz o comando falhar. |

Este arquivo `azion.config.mjs` declara uma aplicação com uma configuração de cache e uma regra de requisição, e um workload que faz o deploy da aplicação:

```javascript
export default {
  applications: [
    {
      name: 'my-app',
      active: true,
      cache: [
        {
          name: 'my-app-cache',
          browser: { maxAgeSeconds: 600 },
          edge: { maxAgeSeconds: 600 }
        }
      ],
      rules: {
        request: [
          {
            name: 'Set cache policy',
            active: true,
            criteria: [[{ variable: '${uri}', conditional: 'if', operator: 'starts_with', argument: '/' }]],
            behaviors: [{ type: 'set_cache_policy', attributes: { value: 'my-app-cache' } }]
          }
        ]
      }
    }
  ],
  workloads: [
    {
      name: 'my-app',
      active: true,
      infrastructure: 1,
      deployments: [
        {
          name: 'my-app',
          current: true,
          active: true,
          strategy: { type: 'default', attributes: { application: 'my-app' } }
        }
      ]
    }
  ]
}
```

Este comando aplica o arquivo a partir da pasta que o contém e que contém o arquivo `azion.json` criado pelo `config init`:

```bash
azion config apply
```

O comando gera o `.edge/manifest.json` a partir do arquivo e depois imprime uma linha por recurso que cria:

```text
…
[Azion] [IaC] › ✔  success   Manifest generated successfully at <project-dir>/.edge/manifest.json
Reading manifest.json file
Edge Application my-app with id 1234567894 successfully created
Cache Setting my-app-cache with id 123469 successfully created
Rule Engine Set cache policy with id 123462 successfully created
Rules Engine of Application with id 1234567894 successfully ordered (request phase)
Workload my-app with id 1234567904 successfully created
Workload Deployment my-app with id 123474 successfully created
Configuration applied successfully: 3 resource(s) applied
```

O comando registra o ID de cada recurso no `azion.json`. Uma segunda execução com o mesmo arquivo atualiza os mesmos recursos pelo ID, em vez de criar recursos novos:

```bash
azion config apply
```

O comando imprime uma linha por recurso que atualiza:

```text
…
[Azion] [IaC] › ✔  success   Manifest generated successfully at <project-dir>/.edge/manifest.json
Reading manifest.json file
Edge Application my-app with id 1234567894 successfully updated
Cache Setting my-app-cache with id 123469 successfully updated
Rule Engine Set cache policy with id 123462 successfully updated
Rules Engine of Application with id 1234567894 successfully ordered (request phase)
Workload my-app with id 1234567904 successfully updated
Workload Deployment my-app with id 123474 successfully updated
Configuration applied successfully: 3 resource(s) applied
```

---

## Delete

`azion config delete` exclui todos os recursos que o `azion.json` lista e depois redefine o `azion.json` para o arquivo vazio que o `config init` cria:

```bash
azion config delete [flags]
```

| Flag           | Curta | Tipo   | Padrão | Descrição                                                        |
| -------------- | ----- | ------ | ------ | ---------------------------------------------------------------- |
| `--config-dir` | —     | string | `"."`  | Caminho relativo da pasta que contém o seu arquivo `azion.json`. |
| `--force`      | —     | —      | —      | Exclui os recursos sem pedir confirmação.                        |

Sem `--force`, o comando pergunta `This will delete all resources defined in azion.json. Continue? (y/N)` antes de excluir qualquer coisa.

---

## Recursos relacionados

- [Opções globais da Azion CLI](/pt-br/documentacao/devtools/cli/globals.md): As opções que todo comando aceita, como `--format`, `--out` e `-y`.
- [azion.config.js](/pt-br/documentacao/devtools/cli/azion-config-js.md): As chaves que um arquivo `azion.config` declara, que o `config apply` transforma em recursos.
- [Azion CLI deploy](/pt-br/documentacao/devtools/cli/deploy.md): Como um projeto passa pelo build e pelo deploy, com os IDs que ele grava em `azion/azion.json`.
- [Workloads](/pt-br/documentacao/plataforma/workloads.md): O que um workload e o seu deployment fazem com a aplicação que o `config apply` cria.
