# Como instanciar functions em sua aplicação

import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

Instancie [funções serverless](/pt-br/documentacao/produtos/build/applications/functions-instances/) diretamente dentro de sua application.

Este guia descreve como você pode instanciar a função *Azion - Hello World*, pré-configurada em sua conta. Você pode repetir este processo usando qualquer função já disponível no [Azion Marketplace](/pt-br/documentacao/produtos/marketplace/) ou [desenvolver sua própria função](/pt-br/documentacao/produtos/guias/edge-functions/api-builder/).

:::caution[Atenção]
Você deve ativar o módulo [Functions](/pt-br/documentacao/produtos/build/applications/functions/) para implementar funções em sua aplicação. Se **Functions** estiver ativado, o tempo de computação e as invocações podem gerar custos relacionados ao uso. Consulte a [página de preços](/pt-br/documentacao/produtos/precos/) para mais informações.
:::

---

<Tabs client:visible>
    <Fragment slot="tab.console">Console</Fragment>
    <Fragment slot="tab.api">API</Fragment>

<Fragment slot="panel.console">
1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Applications**.
2. Clique na application que você deseja configurar. 
3. Ative o módulo **Functions** para habilitar funções.
4. Clique no botão **Save**.
5. Vá para a aba **Functions Instances**.
6. Clique em **+ Function Instance**.
7. Nomeie sua instância de função. Por exemplo: `Hello World function`.
8. Selecione a função **Azion - Hello World**.
9. Clique no botão **Save**.

A página de funções agora lista a nova instância criada. No entanto, esta nova função ainda não está ativa em sua aplicação. Você precisa definir o que acionará a função em sua aplicação. Para invocar a função instanciada no URI `xxxxxxxxxx.map.azionedge.net/hello-world`:

10. Ainda na página do **Applications**, navegue até a aba **Rules Engine**.
11. Clique no botão **+ Rule**.
12. Dê um nome para sua regra.
13. Selecione **Request Phase**.
14. Na seção **Criteria**, selecione a variável `${uri}`.

:::note
A variável `${uri}` pode já estar selecionada por padrão se você não ativou o módulo [Application Accelerator](/pt-br/documentacao/produtos/build/applications/application-accelerator/).
:::

15. Como operador de comparação, selecione **is equal**.
16. Como argumento, adicione `/hello-world`.
17. Na seção **Behaviors**, selecione **Run Function** da lista de comportamentos.
18. Selecione a função **Hello World**.
19. Clique no botão **Save**.

Para ver sua função em execução, acesse sua aplicação [usando seu domínio](/pt-br/documentacao/produtos/guias/configurar-dominio/) e o URI definido na regra, que está no formato `xxxxxxxxx.map.azionedge.net/hello-world`.
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `PATCH` em seu terminal, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e a variável `<application_id>` por [seu ID de application](/pt-br/documentacao/produtos/guias/build/definir-configuracoes-principais/) para ativar o módulo [Functions](/pt-br/documentacao/produtos/build/applications/functions/):

<Code lang="bash" code={` 
curl --request PATCH \
  --url https://api.azion.com/v4/edge_application/applications/<application_id> \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "modules": {
    "edge_functions": {
      "enabled": true
    }
  }
}'
`} />

2. Você receberá uma resposta com o valor atualizado.
3. Execute a seguinte requisição `GET` para recuperar o `edge_function_id` da função *Hello World*:

<Code lang="bash" code={` 
curl --request GET \
  --url https://api.azion.com/v4/edge_functions/functions \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]'
`} />

4. Você receberá uma resposta semelhante a esta:

<Code lang="json" code={` 
{
  "count": 1,
  "results": [
    {
      "id": <function_id>,
      "name": "Minha Função",
      "last_editor": "your-email@example.com",
      "last_modified": "2025-08-14T16:37:54.966088Z",
      "product_version": "2.0",
      "active": true,
      "runtime": "azion_js",
      "execution_environment": "application",
      "code": "",
      "default_args": {},
      "reference_count": 0,
      "version": "-",
      "vendor": null
    }
  ]
}
`} />

5. Copie o valor `<function_id>`.
6. Execute a seguinte requisição `POST`, substituindo o valor do ID da function pelo valor que você recebeu na resposta anterior:

<Code lang="bash" code={` 
curl --request POST \
  --url https://api.azion.com/v4/edge_application/applications/<application_id>/functions \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Nome da Minha Instância",
  "edge_function": <function_id>,
  "active": true
}'
`} />

7. Você receberá uma resposta semelhante a esta:

<Code lang="json" code={`{
  "state": "pending",
  "data": {
    "id": <edge_function_instance_id>,
    "name": "Minha Instância de Função",
    "args": {},
    "edge_function": 123456,
    "active": true,
    "last_editor": "your-email@example.com",
    "last_modified": "2025-08-14T16:41:56.699896Z"
  }
`} />


| Chave | Descrição |
| --- | --- |
| `edge_function` | O ID da function. Este não é o mesmo que o ID da função instanciada, que é único para cada instância de função da aplicação. |
| `name` | Nome da função instanciada. |
| `args` | Definição dos argumentos necessários para a função. Algumas funções não necessitam de argumentos. |
| `id` | ID da função instanciada. |

8. Execute a seguinte requisição `POST` em seu terminal, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), a variável `<application_id>` por [seu ID de application](/pt-br/documentacao/produtos/guias/build/definir-configuracoes-principais/), e a variável `<edge_function_instance_id>` pelo ID da instância da função recebida na resposta anterior:

<Code lang="bash" code={` 
curl --request POST \
  --url https://api.azion.com/v4/edge_application/applications/<application_id>/request_rules \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Executar Hello World",
  "active": true,
  "criteria": [
    [
      {
        "conditional": "if",
        "variable": "\${uri}",
        "operator": "is_equal",
        "argument": "/hello-world"
      }
    ]
  ],
  "behaviors": [
    {
      "type": "run_function",
      "attributes": { "value": <edge_function_instance_id> }
    }
  ],
  "description": "Executar função em /hello-world"
}'
`} />

:::note
Para mais informações sobre o endpoint de regras, veja o guia [sobre como trabalhar com regras](/pt-br/documentacao/produtos/guias/build/trabalhar-com-rules-engine/).
:::

9. Você receberá uma resposta semelhante a esta, confirmando que sua função foi criada com sucesso:

<Code lang="json" code={` 
{
  "state": "pending",
  "data": {
    "id": <rule_id>,
    "name": "Executar Hello World",
    "active": true,
    "criteria": [
      [
        {
          "conditional": "if",
          "variable": "\${uri}",
          "operator": "is_equal",
          "argument": "/hello-world"
        }
      ]
    ],
    "behaviors": [
      {
        "type": "run_function",
        "attributes": {
          "value": <edge_function_instance_id> 
        }
      }
    ],
    "description": "Executar função em /hello-world",
    "order": 0,
    "last_editor": "your-email@example.com",
    "last_modified": "2025-08-14T17:04:44.222534Z"
  }
}
`} />

10. Aguarde alguns minutos para que as alterações se propaguem.

Para ver sua função sendo executada, acesse sua aplicação [usando seu domínio](/pt-br/documentacao/produtos/guias/configurar-dominio/) e o URI definido na regra, que está no formato `xxxxxxxxx.map.azionedge.net/hello-world`.

:::tip
Confira a [documentação da API da Azion](https://api.azion.com/) e a [especificação OpenAPI](https://github.com/aziontech/azionapi-openapi/) para saber mais sobre o que a API Azion pode oferecer.
:::

</Fragment>
</Tabs>