# Azion CLI function

Os comandos `function` da Azion CLI criam, listam, descrevem, atualizam e excluem [Functions](/pt-br/documentacao/plataforma/functions/) na biblioteca de functions da sua conta. Cada function guarda seu código, seus argumentos padrão e o ambiente em que roda, uma aplicação ou um firewall. Uma aplicação executa uma function por meio de uma instância de function, que os [comandos function-instance](/pt-br/documentacao/devtools/cli/recursos/function-instance/) gerenciam. 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/).

---

## Criar

`azion create function` adiciona uma function à biblioteca de functions a partir de um arquivo de código e das configurações que você passa:

```bash
azion create function [flags]
```

| Flag                      | Curta | Tipo   | Padrão | Descrição                                                                                                                                                             |
| ------------------------- | ----- | ------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--active`                | —     | string | —      | **Obrigatório**, a menos que `--file` esteja definida. Ativa (`true`) ou desativa (`false`) a function. Sem ela, o comando pede que você selecione `true` ou `false`. |
| `--args`                  | —     | string | —      | Caminho de um arquivo JSON com os argumentos da function. O comando armazena o conteúdo do arquivo como `default_args`.                                               |
| `--code`                  | —     | string | —      | **Obrigatório**, a menos que `--file` esteja definida. Caminho do arquivo com o código da function. Sem ela, o comando pede o caminho.                                |
| `--execution-environment` | —     | string | —      | Onde a function roda: `application` ou `firewall`.                                                                                                                    |
| `--file`                  | —     | string | —      | Caminho de um arquivo JSON com os atributos da function. Use `-` para ler o JSON da entrada padrão.                                                                   |
| `--name`                  | —     | string | —      | Nome da function.                                                                                                                                                     |

`--execution-environment` aceita somente `application` ou `firewall`. Qualquer outro valor, como `edge_application`, é recusado com este erro:

```text
Error: Failed to create function: ["\"edge_application\" is not a valid choice."]. Check your settings and try again. If the error persists, contact Azion support
```

Este arquivo, `./code/function.js`, guarda o código da function. Ele responde a toda requisição com o texto `my-function`:

```javascript
async function handleRequest(request) {
  return new Response("my-function", { status: 200 });
}
addEventListener("fetch", (event) => {
  event.respondWith(handleRequest(event.request));
});
```

Este comando cria uma function ativa chamada `my-function` a partir desse arquivo, com os argumentos de `./code/args.json`, para rodar em uma aplicação:

```bash
azion create function --name my-function --code ./code/function.js --args ./code/args.json --active true --execution-environment application
```

O comando imprime o ID da function:

```text
Created function with ID 12359
```

---

## Listar

`azion list function` lista as functions da sua conta, 50 por página:

```bash
azion list function [flags]
```

| Flag          | Curta | Tipo   | Padrão | Descrição                                                                                                          |
| ------------- | ----- | ------ | ------ | ------------------------------------------------------------------------------------------------------------------ |
| `--details`   | —     | —      | —      | Adiciona as colunas `LAST EDITOR`, `REFERENCE COUNT` e `EXECUTION ENVIRONMENT` às colunas `ID`, `NAME` e `ACTIVE`. |
| `--filter`    | —     | string | —      | Nome pelo qual a lista é filtrada.                                                                                 |
| `--order-by`  | —     | string | —      | Campo pelo qual a lista é ordenada.                                                                                |
| `--page`      | —     | int    | `1`    | Número da página a retornar.                                                                                       |
| `--page-size` | —     | int    | `50`   | Número de functions em cada página.                                                                                |

Este comando retorna a primeira página de uma lista dividida em páginas de duas functions:

```bash
azion list function --page 1 --page-size 2
```

O comando imprime uma linha por function:

```text
ID     NAME                                    ACTIVE
12357  my-bot-filter                           true
12358  my-api                                  true
```

---

## Descrever

`azion describe function` imprime as configurações de uma function:

```bash
azion describe function [flags]
```

| Flag            | Curta | Tipo | Padrão | Descrição                                                                                                              |
| --------------- | ----- | ---- | ------ | ---------------------------------------------------------------------------------------------------------------------- |
| `--function-id` | —     | int  | —      | ID da function a descrever.                                                                                            |
| `--with-code`   | —     | —    | —      | Imprime os mesmos campos que o comando sem ela. O código da function está no campo `code` da saída de `--format json`. |

Este comando descreve a function com ID `12359`:

```bash
azion describe function --function-id 12359
```

O comando imprime o ID, o nome, o último editor, o estado e a contagem de referências da function:

```text
ID:                12359
Name:              my-function
Last Editor:       you@example.com
Active:            true
Reference Count:   0
```

Com `--format json`, o comando imprime o objeto completo: `active`, `azion_form`, `code`, `default_args`, `execution_environment`, `id`, `is_versioned`, `last_editor`, `last_modified`, `name`, `product_version`, `reference_count`, `resource_version`, `runtime`, `vendor`, `version`, `version_id` e `version_state`. O campo `code` guarda o código-fonte da function, e `default_args` guarda o conteúdo do arquivo de `--args`.

Com um ID que não existe, o comando falha com este erro:

```text
Error: Failed to get the Edge Function: The given ID or API's endpoint doesn't exist or isn't available. Check that the identifying information is correct. Check your settings and try again. If the error persists, contact Azion support
```

---

## Atualizar

`azion update function` altera o nome, o estado, o código, os argumentos ou o ambiente de uma function:

```bash
azion update function [flags]
```

| Flag                      | Curta | Tipo   | Padrão | Descrição                                                                                                                                    |
| ------------------------- | ----- | ------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `--active`                | —     | string | —      | Ativa (`true`) ou desativa (`false`) a function.                                                                                             |
| `--args`                  | —     | string | —      | Caminho de um arquivo JSON com os novos argumentos da function. Seu conteúdo substitui `default_args`.                                       |
| `--code`                  | —     | string | —      | Caminho do arquivo com o novo código da function.                                                                                            |
| `--execution-environment` | —     | string | —      | Onde a function roda: `application` ou `firewall`.                                                                                           |
| `--file`                  | —     | string | —      | Caminho de um arquivo JSON com os atributos a alterar. Use `-` para ler o JSON da entrada padrão.                                            |
| `--function-id`           | —     | int    | —      | **Obrigatório**, também com `--file`. ID da function a atualizar. Sem ela, o comando pede o ID, mesmo quando o JSON de `--file` traz `"id"`. |
| `--name`                  | —     | string | —      | Novo nome da function.                                                                                                                       |

Este comando renomeia a function com ID `12359` para `my-function-renamed` e a desativa:

```bash
azion update function --function-id 12359 --name my-function-renamed --active false
```

O comando imprime o ID da function atualizada:

```text
Updated function with ID 12359
```

Com `--code` e `--args`, o mesmo comando substitui o código e os argumentos armazenados da function. O campo `default_args` passa então a guardar o conteúdo do novo arquivo de `--args`.

---

## Excluir

`azion delete function` exclui uma function da biblioteca de functions:

```bash
azion delete function [flags]
```

| Flag            | Curta | Tipo | Padrão | Descrição                 |
| --------------- | ----- | ---- | ------ | ------------------------- |
| `--function-id` | —     | int  | —      | ID da function a excluir. |

Este comando exclui a function com ID `12370`:

```bash
azion delete function --function-id 12370 -y
```

O comando confirma a exclusão:

```text
Function 12370 was successfully deleted
```

---

## Usar um arquivo JSON

`azion create function` e `azion update function` leem os atributos da function de um arquivo JSON com `--file`.

Este arquivo cria uma function ativa chamada `my-firewall-function`, que roda em um firewall. Ele traz o código inline, no campo `code`:

```json
{
  "name": "my-firewall-function",
  "code": "addEventListener('firewall', (event) => { event.continue(); });",
  "active": true,
  "runtime": "azion_js",
  "execution_environment": "firewall",
  "default_args": {}
}
```

Passe o arquivo para o comando de criação:

```bash
azion create function --file fn-create.json
```

O comando imprime o ID da function:

```text
Created function with ID 12370
```

Na atualização, o comando não lê `"id"` do arquivo, então passe `--function-id` na linha de comando. Este arquivo renomeia a function com ID `12370`:

```json
{
  "id": 12370,
  "name": "my-firewall-function-updated"
}
```

Passe o arquivo e o ID para o comando de atualização:

```bash
azion update function --function-id 12370 --file fn-update.json
```

O comando imprime o ID da function atualizada:

```text
Updated function with ID 12370
```

A function mantém os campos que o arquivo deixa de fora. Neste exemplo, ela continua ativa.

---

## 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`.
- [Functions](/pt-br/documentacao/plataforma/functions.md): O que é uma function e como uma requisição chega ao seu código.
- [Azion CLI function-instance](/pt-br/documentacao/devtools/cli/recursos/function-instance.md): Os comandos que adicionam uma function a uma aplicação.
- [Azion CLI firewall-instance](/pt-br/documentacao/devtools/cli/recursos/firewall-instance.md): Os comandos que adicionam uma function a um firewall.
