---
name: azion-instancie-uma-funcao-em-um-firewall
description: >-
  Vincule uma função a um firewall pelo Azion Console ou pela Azion API, nomeie a instância e passe os Args dela em JSON.
---

# Instancie uma função em um firewall

Você pode criar uma instância de função em um firewall pelo Azion Console ou pela Azion API. A instância vincula uma função a um firewall e carrega os Args passados para o contexto de execução.

Uma instância sem uma regra do Rules Engine nunca é executada. A regra seleciona a instância com o comportamento **Run Function** e define os critérios que a acionam. Para criar a função, ativar o módulo, instanciá-la e adicionar a regra em uma única passagem, consulte [Execute uma função em um firewall](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/functions-e-runtime/firewall/).

Para criar o mesmo objeto em uma aplicação, consulte [Instancie uma função em uma aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/instanciar-functions/).

---

## Pré-requisitos

- Um firewall com o módulo **Functions** ativado. Para ativar o módulo, consulte [Defina as configurações principais de um firewall](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/firewall-definir-main-settings/).
- Uma função cujo **Initiator Type** seja *Firewall*. Use uma do [Marketplace da Azion](/pt-br/documentacao/plataforma/marketplace/) ou escreva a sua, como no exemplo [Negar uma requisição por país](/pt-br/documentacao/plataforma/functions/deny-request/).
- Um [personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/), para o caminho da API.

> **Atenção**
>
> O tempo de computação e as invocações de funções geram custos relacionados ao uso. Para os valores, consulte [Preços](/pt-br/documentacao/fundamentos/precos/).

---

## Crie a instância de função

Um firewall executa uma função por meio de uma instância, e uma função pode servir várias instâncias. A aba **Functions Instances** aparece apenas quando o módulo **Functions** está ativado. Para criar a instância:

**Console**

Para criar a instância pelo Azion Console:

1. **Abra o firewall**

   Acesse [Azion Console](https://console.azion.com/) > **Firewall** > **seu firewall**.

2. **Vá para a aba Functions Instances**

3. **Selecione + Function Instance**

4. **Nomeie a instância**

   Digite um nome para a instância. Por exemplo: `deny-request instance`.

5. **Selecione a função**

   No campo **Functions**, selecione a função que a instância executa. Apenas funções cujo **Initiator Type** esteja definido como *Firewall* aparecem na lista.

6. **Digite os Args**

   (Opcional) Na aba **Args**, digite os argumentos da instância em JSON.

7. **Selecione Save**

A instância aparece na aba **Functions Instances**. Ela não é executada até que uma regra do Rules Engine a selecione.

**API**

Para criar a instância com a Azion API:

1. **Leia o ID da função**

   Envie uma requisição `GET` para o endpoint de functions, substituindo `[TOKEN VALUE]` pelo seu personal token:

   ```bash
   curl --request GET \
     --url https://api.azion.com/v4/workspace/functions \
     --header 'Accept: application/json' \
     --header 'Authorization: Token [TOKEN VALUE]'
   ```

   A resposta lista as funções da conta. Copie o `id` de uma função cujo `initiator_type` seja `edge_firewall`:

   ```json
   {
     "count": 1,
     "results": [
       {
         "id": 13426,
         "name": "deny-request",
         "language": "javascript",
         "initiator_type": "edge_firewall",
         "active": true,
         "reference_count": 1
       }
     ]
   }
   ```

2. **Crie a instância no firewall**

   Envie uma requisição `POST` para o endpoint de functions do firewall, substituindo `<edge_firewall_id>` pelo ID do firewall e `<function_id>` pelo ID que você copiou:

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

   A resposta retorna a instância que o firewall agora carrega:

   ```json
   {
     "results": {
       "id": 2806,
       "name": "deny-request instance",
       "json_args": {},
       "function": 13426,
       "last_editor": "your-email@example.com",
       "last_modified": "2023-11-22T18:50:11.812819Z"
     },
     "schema_version": 3
   }
   ```

A instância existe no firewall, e a resposta carrega os campos dela:

| Chave       | Descrição                                                                                            |
| ----------- | ---------------------------------------------------------------------------------------------------- |
| `id`        | O ID da instância de função                                                                          |
| `name`      | O nome da instância de função                                                                        |
| `function`  | O ID da função que a instância executa. Ele é diferente de `id`, que é único para cada instância     |
| `json_args` | Os argumentos passados para o contexto de execução da função. Algumas funções não recebem argumentos |

Ela não é executada até que uma regra do Rules Engine a selecione. As alterações levam alguns minutos para propagar.

> **nota**
>
> Para obter o ID de um firewall, envie uma requisição `GET` para `https://api.azion.com/v4/workspace/firewalls`. Para a requisição e a resposta dela, consulte [Defina as configurações principais de um firewall](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/firewall-definir-main-settings/).

> **dica**
>
> Para cada endpoint e seus campos, consulte a [documentação da Azion API](https://api.azion.com/) e a [especificação OpenAPI](https://github.com/aziontech/azionapi-openapi/).

---

## Args da instância

Args é um objeto JSON passado para o contexto de execução da função. O código-fonte de uma função não pode ser alterado pela instância, então Args é como uma função serve vários firewalls com configurações diferentes. Um objeto Args que define duas chaves:

```json
{
  "threshold": 50,
  "action": "block"
}
```

Uma função carrega argumentos padrão, definidos na própria função. A instância sobrescreve as chaves que declara e herda as demais. Uma instância aceita no máximo 100 KB de argumentos.

Para os valores padrão e as regras de substituição, consulte [Como Functions funciona](/pt-br/documentacao/plataforma/functions/como-funciona/). Para os exemplos de configuração e os demais limites, consulte [Functions Instances para Firewall](/pt-br/documentacao/plataforma/firewall/functions-instances/).

---

## Próximos passos

- [Execute uma função em um firewall](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/functions-e-runtime/firewall.md): Crie a função, ative o módulo e adicione a regra do Rules Engine que aciona a instância.
- [Crie uma regra de firewall](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/trabalhar-com-rules-engine.md): A regra que seleciona a instância, pelo Azion Console ou pela Azion API.
- [Functions Instances para Firewall](/pt-br/documentacao/plataforma/firewall/functions-instances.md): A hierarquia de argumentos, os exemplos de configuração e os limites em que uma instância é executada.
- [Instancie uma função em uma aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/instanciar-functions.md): O mesmo objeto em uma aplicação, onde a regra também define a fase de execução.
