# Instâncias de função

Uma instância de função vincula uma função a uma aplicação. A instância carrega os **Args**, os argumentos passados para o contexto da execução da função em formato JSON. O código da função não pode ser editado na instanciação: uma instância define os Args e nada mais.

Uma regra em [Rules Engine](/pt-br/documentacao/plataforma/applications/rules-engine/) invoca a instância, não a função. A mesma função pode ser instanciada em mais de uma aplicação, e cada instância carrega os próprios Args. Uma instância que nenhuma regra nomeia nunca é executada.

Um firewall instancia funções da mesma forma. Uma instância em um firewall executa a sua função antes que a requisição chegue à aplicação, então a função pode interromper a requisição ali. Uma instância em uma aplicação executa a sua função como parte de servir a requisição. Consulte [Instâncias de função no Firewall](/pt-br/documentacao/plataforma/firewall/functions-instances/) para conhecer o objeto do firewall, e [Limites de Firewall](/pt-br/documentacao/plataforma/firewall/limites/#regras-e-instancias-de-funcao) para conhecer os limites dele.

---

## Campos da instância

A [API da Azion](https://api.azion.com/) cria uma instância sob a aplicação à qual ela pertence. Estes são os campos que você define:

| Campo        | Tipo                 | Obrigatório | Descrição                                                                                                                              |
| ------------ | -------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `name`       | string               | Sim         | Nome da instância.                                                                                                                     |
| `function`   | integer              | Sim         | ID da função que a instância vincula. Esse ID é diferente do ID da instância.                                                          |
| `args`       | JSON object ou array | Não         | Argumentos passados para o contexto da execução da função. Quando a instância não define args, os `default_args` da função são usados. |
| `azion_form` | JSON object          | Não         | Um JSON Schema que renderiza os args como formulário. Quando nenhum é definido, um objeto vazio é usado.                               |
| `active`     | boolean              | Não         | Se a instância está ativa.                                                                                                             |

A API retorna mais quatro campos: `id`, o ID da instância; `last_editor`, o endereço de e-mail da conta que a alterou pela última vez; `last_modified`, o timestamp dessa alteração; e `created_at`, o timestamp da criação.

Uma requisição `POST` ao recurso `functions` de uma aplicação cria uma instância:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/applications/<application_id>/functions \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "My instance Name",
  "function": <function_id>,
  "active": true
}'
```

A API responde com o objeto criado:

```json
{
  "state": "pending",
  "data": {
    "id": <function_instance_id>,
    "name": "My Function Instance",
    "args": {},
    "azion_form": {},
    "function": 123456,
    "active": true,
    "last_editor": "your-email@example.com",
    "last_modified": "2025-08-14T16:41:56.699896Z",
    "created_at": "2025-08-14T16:41:56.812345Z"
  }
}
```

O valor `"state": "pending"` significa que a alteração leva alguns minutos para propagar antes de entrar em vigor.

Você cria o mesmo objeto na aba **Functions Instances** de uma aplicação em Azion Console. No arquivo `azion.config.js` que [Azion CLI](/pt-br/documentacao/devtools/cli/) lê, uma instância carrega `name`, `args` e `active`, e `ref` nomeia a função por nome ou por ID.

---

## Args

Args são os argumentos que uma instância passa para o contexto da execução da função, escritos como um objeto JSON. O código lê uma chave em tempo de execução e a instância decide o valor dela, então uma mesma função se comporta de forma diferente em cada lugar onde é instanciada. Uma função pode definir Args padrão próprios: os Args de uma instância sobrescrevem as chaves que repetem, e toda chave que a instância deixa de fora mantém o valor padrão.

Um objeto Args que define uma chave:

```json
{
  "value": "hello_world"
}
```

O objeto Args comporta no máximo 100 KB, e um objeto acima desse teto faz a função falhar na instanciação. Para todos os limites de Functions, consulte [Limites](/pt-br/documentacao/plataforma/functions/limites/).

Args são configuração por instância. Valores sensíveis, como chaves de API, credenciais e tokens de acesso, pertencem às [variáveis de ambiente](/pt-br/documentacao/plataforma/functions/environment-variables/).

---

## Comportamento Run Function

**Run Function** é o comportamento de [Rules Engine](/pt-br/documentacao/plataforma/applications/rules-engine/#run-function) que invoca uma instância. A regra nomeia a instância, a fase de execução e os critérios que a acionam. Quando uma requisição atende a esses critérios, a função é executada na infraestrutura distribuída da Azion.

Run Function está disponível na Request Phase e na Response Phase, e exige o módulo [Application Accelerator](/pt-br/documentacao/plataforma/applications/#application-accelerator). Na API da Azion, o comportamento é `run_function` e o atributo `value` dele carrega o ID da instância.

Para as fases de execução, os critérios e a ordem em que os comportamentos são executados, consulte [Como funciona](/pt-br/documentacao/plataforma/functions/como-funciona/).

---

## Recursos relacionados

- [Como funciona](/pt-br/documentacao/plataforma/functions/como-funciona.md): O caminho que uma requisição percorre de uma regra do Rules Engine até o código da sua função.
- [Instancie uma função em uma aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/instanciar-functions.md): Os passos para criar uma instância em Azion Console e pela API da Azion.
- [Utilizar args](/pt-br/documentacao/plataforma/functions/utilizar-args.md): Uma função que lê uma chave dos Args e responde com o valor.
- [Limites](/pt-br/documentacao/plataforma/functions/limites.md): O teto de tamanho dos Args e todos os outros limites de Functions.
