---
name: azion-faca-o-deploy-de-uma-function-com-a-azion-cli
description: >-
  Crie um projeto de function pelo terminal com a Azion CLI, execute-o na sua máquina e faça o deploy dele em um domínio ativo.
---

# Faça o deploy de uma function com a Azion CLI

Neste tutorial, você vai fazer o build e o deploy de uma function pelo terminal com a [Azion CLI](/pt-br/documentacao/devtools/cli/). Você vai salvar um personal token e criar um projeto. Depois, vai escrever o handler, executá-lo na sua máquina e fazer o deploy dele.

Os [Primeiros passos com Functions](/pt-br/documentacao/plataforma/functions/primeiros-passos/) chegam ao mesmo resultado pelo Azion Console. Esta página é o caminho pelo terminal e termina com os mesmos três objetos: uma function, uma instância e a aplicação que a serve.

## Pré-requisitos

- Uma conta Azion. Para criar uma, consulte [Criar uma conta](/pt-br/documentacao/fundamentos/criar-uma-conta/).
- A [Azion CLI](/pt-br/documentacao/devtools/cli/) instalada na sua máquina.
- Um [personal token](/pt-br/documentacao/fundamentos/personal-tokens/).
- Node.js e um gerenciador de pacotes, que a CLI usa para fazer o build do projeto.

## 1. Salve seu personal token

A CLI autoriza cada comando com um personal token armazenado na sua máquina. Para salvá-lo:

```bash
azion -t <your-token>
```

O token fica armazenado localmente, e os comandos seguintes se autorizam com ele. Você não o informa de novo.

## 2. Crie o projeto

O [`azion init`](/pt-br/documentacao/devtools/cli/init/) cria o projeto e a configuração de build dele. Para iniciá-lo:

```bash
azion init
```

O comando pede um nome e sugere um que você pode aceitar:

```bash
? Your application's name:  (affectionate-chaos)
```

Depois, ele pergunta qual preset usar. Selecione **Javascript**, o preset para uma function escrita em JavaScript puro, sem framework:

```bash
? Choose a preset:  [Use arrows to move, type to filter]
> AI Studio
  Angular
  Astro
  ...
  Javascript
```

Depois, ele pergunta de qual template partir. Selecione *Hello World*:

```bash
? Choose a template:  [Use arrows to move, type to filter]
> Hello World
  HTMX Boilerplate
  Simple Javascript Router Node
  Simple Javascript Router
  QStash EdgeFunction Scheduler
  Upstash Geolocation
  Upstash Rate Limit
```

Ele pergunta se deve instalar as dependências do projeto. Responda `Y`:

```bash
🤔 Do you want to install project dependencies? This may be required to generate initial configuration file (Y/n)
```

Ele pergunta se deve iniciar um servidor de desenvolvimento local. Responda `N`, porque a etapa 4 inicia o servidor:

```bash
🤔 Do you want to start a local development server? (y/N)
```

O diretório do projeto agora contém a configuração de build e o entrypoint que o build lê.

## 3. Escreva o handler

Abra o `index.js`, o entrypoint que o build lê por padrão, e substitua o conteúdo dele por um handler ES Modules:

```js
export default {
  async fetch(request, env, ctx) {
    return new Response('Hello World', {
      headers: { 'content-type': 'text/plain' }
    });
  }
};
```

O método `fetch` recebe a requisição, as variáveis de ambiente e o contexto de execução, e retorna a resposta que o cliente recebe. Este é o padrão que a Azion recomenda.

## 4. Execute a function localmente

Antes do deploy, execute o projeto na sua máquina e envie uma requisição a ele. Para iniciar o servidor local com o [`azion dev`](/pt-br/documentacao/devtools/cli/dev-comando/):

```bash
azion dev
```

O comando faz o build do projeto e depois exibe o endereço em que responde:

```bash
[Azion] [Server] › ✔  success   Function running on port 0.0.0.0:3333, url: http://localhost:3333
```

De outro terminal, faça uma requisição a esse endereço:

```bash
curl http://localhost:3333/
```

O handler responde com o corpo da resposta:

```bash
Hello World
```

Pare o servidor com `Ctrl+C` quando a resposta estiver correta.

## 5. Faça o deploy do projeto

Para fazer o deploy do projeto na Azion com o [`azion deploy`](/pt-br/documentacao/devtools/cli/deploy/):

```bash
azion deploy
```

O comando faz o build do projeto e cria a aplicação e a function na sua conta. Ele instancia a function e exibe o domínio que a serve. O domínio tem o formato `xxxxxxxxxx.map.azionedge.net`.

Uma requisição a esse domínio retorna a mesma resposta que você leu localmente:

```bash
curl https://xxxxxxxxxx.map.azionedge.net/
```

```bash
Hello World
```

O primeiro deploy pode levar vários minutos para responder de todas as localidades. Uma requisição imediata pode falhar antes de a configuração estar pronta. Aguarde e tente de novo antes de diagnosticar.

## Próximos passos

- [Desenvolva e teste uma function localmente](/pt-br/documentacao/plataforma/functions/local-development.md): Execute o projeto na sua máquina e forneça variáveis de ambiente de um arquivo local.
- [Como Functions funciona](/pt-br/documentacao/plataforma/functions/como-funciona.md): O que precisa existir antes de uma function ser executada em uma requisição.
- [Exemplos em JavaScript](/pt-br/documentacao/plataforma/functions/javascript-exemplos.md): Handlers para copiar no projeto como ponto de partida.
- [Azion CLI](/pt-br/documentacao/devtools/cli.md): Todos os comandos que a CLI aceita e as flags de cada um.
