# Functions

import DocButton from '~/components/webkit/DocButton.vue';

**Functions** da Azion permite que você crie aplicações orientadas a eventos e serverless mais perto dos usuários.

Com o Functions para **Applications**, você pode:

- Implementar a lógica necessária.
- Reutilizar uma functions em diferentes applications.
- Manter e acessar suas variáveis de ambiente pré-configuradas.
- Acessar bancos de dados.
- Escrever seu código em JavaScript.
- Implantar funções facilmente.
- Fazer uso da programação em pares com a integração com o Chat GPT.
- Visualizar o resultado da função em tempo real com o *preview deployment*.
- Executar agentes de IA diretamente na infraestrutura distribuída da Azion com latência ultra-baixa.
- Construir ecossistemas de IA completos.

---

## Implementação

| Escopo | Guia |
| - | - |
| API Builder| [Como construir uma API com Functions e ChatGPT](/pt-br/documentacao/produtos/guias/edge-functions/api-builder/) 
| Exemplos de functions em JavaScript| [Exemplos](/pt-br/documentacao/devtools/javascript-exemplos/)|
| GitHub | [Repositório de samples da Azion](https://github.com/aziontech/azion-samples/tree/dev/samples) |

---

## Azion Runtime

Ao usar JavaScript em Functions, você pode executar códigos mais próximos do usuário final, aprimorando o desempenho e habilitando a lógica personalizada para lidar com solicitações e respostas.

Ao usar o [Azion Runtime](/pt-br/documentacao/runtime/visao-geral/) para desenvolver suas functions, você tem um conjunto de ferramentas que o ajudam a implementar sua lógica.

<DocButton href="/pt-br/documentacao/runtime/visao-geral/" label="saiba mais sobre o Azion Runtime" kind="secondary" target="_blank" size="medium" />

<br /><DocButton href="/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade-frameworks/" label="saiba mais sobre os Web frameworks suportados" kind="secondary" target="_blank" size="medium" />
<br /><DocButton href="/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/" label="saiba mais sobre o suporte ao Node.js" kind="secondary" target="_blank" size="medium" />
<br /><DocButton href="/pt-br/documentacao/runtime-apis/javascript/" label="saiba mais sobre as Web APIs suportadas" kind="secondary" target="blank" size="medium" />

---

## Como frameworks se integram com Functions

Quando você faz o deploy de um projeto com um web framework na Azion, a plataforma transforma o código do seu framework em Functions que rodam no Azion Runtime. Esse processo é realizado pelo [Azion Bundler](https://github.com/aziontech/bundler), um adaptador de frameworks open source construído especificamente para a arquitetura distribuída da Azion.

### Fluxo da arquitetura

```
Código do Framework (Next.js, Astro, Vue, etc.)
                    ↓
            Azion Bundler
                    ↓
        Function (JavaScript/Wasm)
                    ↓
            Azion Runtime
                    ↓
        Pontos de Presença Globais
```

### Como funciona

1. **Detecção do framework**: Quando você inicializa um projeto com o [Azion CLI](/pt-br/documentacao/produtos/azion-cli/visao-geral/), o bundler identifica seu framework e aplica o adaptador apropriado.

2. **Transformação do código**: O bundler converte a lógica server-side do seu framework, rotas de API e middleware em Functions compatíveis com o Azion Runtime.

3. **Geração de Functions**: Cada rota, endpoint de API ou componente de servidor se torna uma Function que pode ser executada independentemente no edge.

4. **Deploy**: As Functions são distribuídas pela rede global da Azion, executando mais próximas dos usuários sem cold starts.

### Benefícios da transformação framework-to-Function

| Aspecto | Hospedagem tradicional | Functions na Azion |
|--------|---------------------|------------------|
| **Latência** | Round-trip para origem centralizada | Execução em pontos de presença globais |
| **Cold starts** | Comuns em plataformas serverless | Eliminados pela arquitetura do Azion Runtime |
| **Escalabilidade** | Configuração manual ou auto-scale demorado | Escala instantânea de zero a pico |
| **Recursos do framework** | Limitados pelo provedor de hospedagem | Capacidades completas do framework preservadas |

### Frameworks suportados

Para a lista completa de frameworks suportados e informações detalhadas de compatibilidade, consulte [Compatibilidade de frameworks](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade-frameworks/).

### Implicações práticas

Ao fazer o deploy de um projeto com framework, considere:

- **Custos de compute**: Deploys de frameworks geram Functions, que incorrem em cobranças de tempo de compute e invocações. Consulte [Preços](/pt-br/documentacao/produtos/precos/) para detalhes.
- **Debugging**: Use [Preview Deployment](/pt-br/documentacao/produtos/applications/functions/runtime-api/preview-deployment/), [Data Stream](/pt-br/documentacao/produtos/guias/debugging-functions-data-stream/) ou [GraphQL API](/pt-br/documentacao/produtos/guias/debugging-functions-graphql/) para depurar Functions geradas por frameworks.
- **Variáveis de ambiente**: Acesse variáveis de ambiente no código do seu framework usando a [API de variáveis de ambiente da Azion](/pt-br/documentacao/produtos/applications/functions/runtime/api-reference/environment-variables/).

<DocButton href="/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade-frameworks/" label="Ver todos os frameworks suportados" kind="secondary" target="_blank" size="medium" />
<br /><DocButton href="https://github.com/aziontech/bundler" label="Explore o Azion Bundler no GitHub" kind="secondary" target="_blank" size="medium" />

---

## Suporte a frameworks de AI

As Functions oferecem suporte para fluxos de trabalho de AI avançados, permitindo que você:

- Execute agentes de AI diretamente na infraestrutura distribuída da Azion com latência ultra-baixa, construindo soluções de nível empresarial que operam no edge com confiabilidade e escalabilidade.
- Crie fluxos de trabalho de AI sofisticados usando integrações com **LangGraph** e **LangChain**, incluindo capacidades avançadas de recuperação que combinam busca vetorial e busca de texto completo para casos de uso complexos.
- Aproveite a integração nativa do [SQL Database](/pt-br/documentacao/produtos/store/sql-database/) para implementações de RAG e armazenamento vetorial, juntamente com Servidores MCP que permitem a colaboração entre agentes usando o protocolo Agent2Agent (A2A) do Google.
- Acesse modelos de ponta como Mistral, Florence, Qwen e outros, que seguem o padrão de API da OpenAI, tudo isso reduzindo a complexidade com uma infraestrutura de AI completamente integrada e executada no edge da rede.

O **AI Inference** da Azion permite que você execute modelos de AI no Azion Runtime, e pode ser usado junto com as Functions para criar aplicações complexas impulsionadas por AI.

<DocButton href="/pt-br/documentacao/produtos/ai/ai-inference/" label="Saiba mais sobre AI Inference" kind="secondary" target="_blank" size="medium" />

---

## Frameworks JavaScript

### Next.js

Next.js é um framework JavaScript construído sobre o React que permite a renderização do lado do servidor (SSR) e a geração de sites estáticos para a criação de aplicações **Jamstack**.

**Jamstack**

Jamstack significa JavaScript, APIs e Markup, e promove o desacoplamento do front-end do back-end, pré-renderizando o conteúdo e servindo-o como arquivos estáticos.

**SSR**

O SSR permite renderizar componentes do React no servidor antes de enviá-los ao cliente, aumentando o tempo de carregamento inicial e melhorando o SEO.

**Site estático**

A geração estática de sites gera arquivos HTML estáticos em tempo de compilação, que podem ser armazenados em cache e entregues rapidamente aos usuários, reduzindo a necessidade de processamento do lado do servidor.

---

## WebAssembly

O WebAssembly (Wasm) é um formato de instrução binária que permite a execução de código de alto desempenho na web. Ele permite a execução de aplicações em velocidade quase nativa, preenchendo a lacuna entre diferentes linguagens e plataformas de programação.

Functions aproveita o poder do WebAssembly para fornecer computação serverless no edge, permitindo que os desenvolvedores façam o deploy da lógica personalizada e otimizem aplicações com a latência reduzida e desempenho aprimorado.

Esta combinação de WebAssembly e Functions da Azion abre novas possibilidades para a criação de experiências mais rápidas, eficientes e escaláveis.

Veja [Como criar uma functions usando WebAssembly na Azion Web Platform](/pt-br/documentacao/produtos/guias/webassembly-na-plataforma-azion/).

---

## Instanciação de função

O módulo **Functions Instances** permite instanciar funções em suas applications, bem como configurar condições para sua execução.

Uma vez que sua application executa uma functions, ela responde a eventos mais próximos do usuário final, garantindo maior escalabilidade e disponibilidade.

Saiba mais sobre [Functions Instances](/pt-br/documentacao/produtos/build/applications/functions-instances/).

---

## Rules Engine

O **Rules Engine** lida com a execução condicional de comportamentos por meio de operadores lógicos. Ao usar o Rules Engine, você pode criar uma arquitetura que forneça melhor desempenho aos seus usuários e, ao mesmo tempo, consuma menos recursos processando na origem.

Saiba mais sobre [Rules Engine](/pt-br/documentacao/produtos/build/applications/rules-engine/).

---

## Editor de código

O editor de código para **Functions** é a melhor maneira de começar a desenvolver suas functions na plataforma Azion. É um editor de código baseado na web que torna mais fácil e intuitivo desenvolver no edge. É habilitado pelo Editor de Código Mônaco, usado no VS Code.

Alguns de seus principais recursos são:

- Syntax Highlighting
- IntelliSense
- Debugging

Saiba mais sobre o [Functions Code Editor](/pt-br/documentacao/produtos/applications/functions/runtime-api/code-editor/).

---

## Assistente IA

A IA generativa pode ser usada em quase todas as tarefas que envolvem a compreensão ou geração de linguagem ou código natural. No ambiente de desenvolvimento, é uma ferramenta usada para aumentar a produtividade dos desenvolvedores, ajudando-os a:


- Depurar o código.
- Refatorar o código.
- Gerar código com base em prompts.

Saiba mais sobre o [Assistente de IA](/pt-br/documentacao/produtos/applications/functions/runtime-api/ai-integration/).

---

## Preview

Você pode verificar se a saída é a esperada com o Preview Deployment, fazendo uso da função `PreviewProvider`, que emula uma requisição.

Saiba mais sobre o [Preview Deployment](/pt-br/documentacao/produtos/applications/functions/runtime-api/preview-deployment/).

---

## Debug

Você pode depurar suas functions em tempo real usando a ferramenta de `inspeção` dentro do [Preview Deployment](/pt-br/documentacao/produtos/applications/functions/runtime-api/preview-deployment/).

Você também pode depurar usando:

- [Data Stream](/pt-br/documentacao/produtos/guias/debugging-functions-data-stream/)
- [GraphQL API](/pt-br/documentacao/produtos/guias/debugging-functions-graphql/)

---

## Variáveis de ambiente

As variáveis de ambiente são um aspecto crucial no desenvolvimento e implantação de software. Elas são usadas para armazenar informações confidenciais ou definições de configuração que não devem ser codificadas na base de código.

Saiba mais sobre a interface de [Variáveis de Ambiente](/pt-br/documentacao/produtos/applications/functions/runtime/api-reference/environment-variables/).

---

## JSON Args

Ao adicionar JSON args, você pode ter comportamentos diferentes em sua function sem ter que alterar o código. Depois de definir seus JSON args, você pode recuperá-los chamando `event.args ("desiredArg")`.

---

## Gerenciamento de functions

Existem diferentes maneiras de gerenciar suas functions. Você pode fazer isso através [do Azion Console](https://console.azion.com), [Azion CLI](/pt-br/documentacao/produtos/azion-cli/visao-geral/), [Azion API](https://api.azion.com/) e [Terraform](/pt-br/documentacao/produtos/terraform-provider/).

### Azion Console

Você pode criar e gerenciar functions através do [Azion Console](https://console.azion.com), no **Products menu**, no canto superior esquerdo. abaixo de **Edge Libraries**.

### CLI

A CLI da Azion permite que você gerencie suas functions para applications através do terminal.

Saiba mais sobre o [Comando functions e seus subcomandos](/pt-br/documentacao/devtools/cli/create/#edge-functions).

### API

A API da Azion, acessada através do Postman, oferece os métodos e chamadas necessários para gerenciar suas applications.

Acesse a [Azion API collection](https://api.azion.com/) e teste as requisições.

### Terraform

O [Azion Terraform Provider](/pt-br/documentacao/produtos/terraform-provider/) permite o gerenciamento de functions na plataforma da Azion. Ele possibilita tratar sua infraestrutura como código.

Saiba mais sobre o gerenciamento de functions através do [Azion Terraform Provider](https://registry.terraform.io/providers/aziontech/azion/latest/docs/resources/edge_function).

## Limites

:::tip
**Aumentar limites** <br></br>
Você pode solicitar o aumento dos limites com base no seu plano. Entre em contato com a [equipe de suporte técnico](/pt-br/documentacao/servicos/suporte/) para solicitar.
:::

Estes são os **limites default**:

| Escopo | Limite | Descrição |
| ----- | ----- | ----------- |
| Argumentos | 100 KB | Tamanho máximo do objeto JSON args passado para uma instância de function. Exceder esse limite causa falha na instanciação da function. |
| Memória por Isolate | 512 MB | Memória máxima disponível para um único contexto de execução de function (V8 isolate). Inclui heap, stack e todas as alocações em runtime. |
| Limite de código (UI) | 6 MB | Tamanho máximo do código-fonte da function ao criar ou editar pelo Azion Console. |
| Limite de código (API) | 20 MB | Tamanho máximo do código-fonte da function ao fazer deploy via Azion API. |
| Tamanho da variável de ambiente | 32 KB | Tamanho total máximo de todas as variáveis de ambiente combinadas para uma única function. |
| Sub-Requests | 50 Sub-Req | Número máximo de chamadas `fetch()` de saída que uma function pode realizar durante uma única invocação. |
| Max CPU Execution Time | 2s | Tempo máximo de CPU que uma function pode consumir por invocação. Mede o tempo de computação ativa, não o tempo de relógio. Functions que excedem esse limite são encerradas. |
| Max Execution Time | 5 min | Tempo máximo de relógio (tempo total decorrido) permitido para uma invocação de function, incluindo espera de I/O, chamadas `fetch()` e operações assíncronas. |
| Max Cold Start | 2s | Tempo máximo permitido para uma function inicializar antes de processar sua primeira requisição. O Azion Runtime é projetado para minimizar cold starts na rede global. |
| Tamanho da URL | 16 KB | Tamanho máximo da URL de requisição que uma function pode processar, incluindo o path e a query string. |
| Tamanho do Header | 64 KB | Tamanho total máximo de todos os headers HTTP de requisição combinados que uma function pode ler ou escrever. |
| Tamanho do Body | 100 MB (plano Developer)<br />200 MB (plano Business)<br />500 MB (planos Enterprise e Mission Critical) | Tamanho máximo do body de requisição ou resposta HTTP que uma function pode processar. Os limites variam conforme o plano de serviço. |