Introdução

Funções sem servidor são pedaços de código do lado do servidor executados em servidores em nuvem sem a necessidade de um back-end real como parte da computação sem servidor arquitetura . Essas funções são executadas sob demanda e requerem a ajuda de plataformas de nuvem como AWS, Azure ou Vercel para ajudar a gerenciar as complexidades de orquestrar e manter servidores dedicados.

As funções sem servidor (também conhecidas como funções de nuvem ou funções como serviço (FaaS)) podem ser usadas para enviar e-mails, realizar consultas de banco de dados, lidar com autenticação de usuário, gerenciar envios de formulários e muito mais. Para desenvolvedores de front-end, há muitos benefícios e compensações em deixar de usar o servidor .

Para executar com sucesso uma função sem servidor, é necessário trabalhar dentro dos limites técnicos da plataforma em nuvem que será usada para implantação. Para este tutorial, vamos nos concentrar no Vercel. As funções sem servidor do Vercel são escritas com idiomas de back-end compatíveis , como Node.js , em frameworks front-end compatíveis , como React . Essas funções recebem uma solicitação HTTP, atuam sobre ela e fornecem uma resposta dentro de um tempo limite estipulado, dependendo do plano do projeto.

Por que implantar sua função sem servidor no Vercel?

Vercel é uma plataforma em nuvem para front-ends estáticos e funções sem servidor. Com ele, você pode hospedar sites e aplicativos da web que são implantados instantaneamente e escalonados automaticamente.

O tratamento de funções sem servidor da Vercel é top de linha por muitos motivos, o primeiro deles sendo a facilidade de uso. Há uma linha de base padrão familiar e sensata para suas funções que torna a curva de aprendizado mínima. Vercel também usa um package.json para governar todos eles. Você pode usar um único package.json para seu aplicativo e o Vercel encontrará e aplicará automaticamente os pacotes usados ​​com base na importação.

O Vercel também permite que você personalize coisas como versões de tempo de execução, memória e execução e monitore suas funções e solicitações nos logs de monitoramento que vêm com o painel do Vercel. Caso um tempo de execução não seja compatível, o Vercel permite que você use tempos de execução da comunidade ou crie um você mesmo .

Finalmente, o Vercel CLI replica o ambiente de produção para você localmente, para que você possa trabalhar com suas funções sem servidor sem a necessidade de reimplante cada vez que uma mudança for feita.

Implementando suas funções sem servidor no Vercel

Sem qualquer configuração, implantar suas funções sem servidor no Vercel é tão fácil quanto criar um diretório /api na raiz do seu projeto que hospeda suas funções como arquivos com extensões correspondentes como .js e .ts . Com esta configuração, o Vercel irá verificar automaticamente o diretório /api e executar suas funções de acordo.

Uma função Node.js sem servidor básica pode ser semelhante a:

//`/api/hello.js`
exportar função padrão hello (req, res) { res.statusCode=200; res.json ({mensagem:'Funciona'});
}

Digamos que você criou um arquivo /api/hello.js na raiz do diretório do seu projeto com a exportação de função padrão acima. A partir daqui, o Vercel irá executar a função como uma função sem servidor e expô-la como um endpoint HTTP por trás do subdiretório /api (por exemplo, baseURL/api/function-name ).

Aqui estão mais alguns exemplos de como seu arquivo e endpoint HTTP gerado ficarão, assumindo que sua baseURL seja http://localhost: 3000 :

Acessando suas funções sem servidor por meio de segmentos de caminho

Neste ponto, você já pode acessar funções sem servidor por nome de arquivo. Se você tinha um arquivo /api/user/id.js , um endpoint /api/user/id é gerado automaticamente.

Para tornar as coisas ainda mais simples, as funções sem servidor podem ser nomeadas dinamicamente e acessadas por meio de segmentos de caminho . Isso é feito envolvendo o nome do arquivo entre colchetes, como em /api/user/[id].js ; o id é o caminho dinâmico e acessível no objeto req.query .

//`/api/user/[id].js
exportar função padrão fetchUser (req, res) { res.statusCode=200; const {id}=req.query; res.send (`Obter perfil do usuário: $ {id}`);
}

Os argumentos request e response de sua função sem servidor são instâncias de http.incomingMessage e http.ServerResponse , respectivamente. Ambos têm vários auxiliares Node.js disponíveis como propriedades e métodos com os quais você pode trabalhar, incluindo request.body , request.query , response.json () e response.send () .

Para obter uma explicação completa de todos os auxiliares disponíveis, verifique a documentação de auxiliares do Node.js .

Desenvolvimento local com Vercel CLI

Normalmente, você precisa implantar suas funções sem servidor no Vercel cada vez que uma alteração é feita. O Vercel atende às suas necessidades de desenvolvimento local, replicando o ambiente de produção no Vercel com seu host local usando a CLI do Vercel.

Para instalar o Vercel CLI, execute o comando:

//npm
npm i-g vercel //fio
yarn global add vercel

O Vercel CLI expõe uma lista de comandos , incluindo vercel dev para replicar o Vercel ambiente de produção localmente, vercel login para fazer login em sua conta Vercel e vercel env add para adicionar variáveis ​​ambientais aos seus projetos.

Frameworks como Next.js têm suporte nativo para funções sem servidor, então você não precisa usar o comando vercel dev -na verdade, a documentação recomenda não usá-lo. No entanto, embora você possa não precisar do vercel dev , pode querer usar o vercel env pull se precisar baixar as variáveis ​​ambientais do seu projeto localmente.

Além disso, a execução de seu aplicativo Next.js escuta automaticamente suas funções sem servidor. Para fazer isso manualmente, use a opção --listen no comando vercel dev . Por exemplo, vercel dev--listen 3000 para escutar na porta 3000.

Desenvolvimento local com Next.js

Como você deve saber, Next.js tem um sistema de roteamento baseado em arquivo , o que significa que cada novo diretório e/ou arquivo no diretório pages se torna uma nova rota (exceto para diretórios e/ou arquivos no diretório pages/api , que se tornam Rotas de API ).

Embora tenhamos mencionado anteriormente que os diretórios /api devem ser criados na raiz do seu projeto, ao usar Next.js, o diretório /api que hospeda suas funções sem servidor deve ser criado em seu diretório pages . Depois de fazer isso, você pode criar funções normalmente.

Desenvolvimento local com outras estruturas de front-end estáticas compatíveis

Para estruturas que não incluem suporte nativo, incluindo Gatsby e Vue, vercel dev pode ser útil. Observe, entretanto, que antes de executar o vercel dev , você precisa ter uma conta Vercel e deve estar logado via CLI com o comando vercel login .

Para começar, crie um diretório api e execute o comando vercel dev na raiz do seu projeto. Em seguida, siga as instruções e responda às perguntas fornecidas (observe que esses comandos podem variar de acordo com o seu status de autenticação):

  • Configurar e desenvolver
  • Qual escopo deve conter seu projeto?
  • Link para projeto existente?
  • Qual é o nome do seu projeto?
  • Em qual diretório seu código está localizado?
  • Deseja substituir as configurações?

Quando você concluir o processo com sucesso, Vercel fará algumas coisas automaticamente, incluindo:

  • Crie e implante um novo projeto que você pode visualizar no painel do Vercel
  • Adicione uma pasta .vercel ao seu projeto para sua leitura. Este conterá um arquivo README explicando basicamente porque a pasta .vercel existe
  • Detecta automaticamente a estrutura e a executa de acordo com os scripts npm nos package.json
  • Execute o aplicativo e forneça um URL de acesso

Para obter uma lista de aplicativos de exemplo de funções sem servidor que você pode implantar no Vercel, verifique este repositório GitHub .

Configuração de variáveis ​​ambientais

Você pode configurar variáveis ​​ambientais diretamente das configurações do seu projeto no painel do Vercel por meio de uma GUI ou por meio da CLI do Vercel.

Fazer isso por meio de uma GUI é bastante simples:

Configurando variáveis ​​ambientais Vercel Dashboard
Seção de variáveis ​​de ambiente no painel do Vercel

Com Vercel CLI, você pode usar o comando vercel env add para adicionar variáveis ​​ambientais e vercel env pull para baixá-las localmente em seu projeto, que cria ou acrescenta novos variáveis ​​no arquivo .env na raiz do seu projeto.

Independentemente do caminho que você decidir seguir, a adição de variáveis ​​ambientais se resume a três recursos básicos: o tipo de variável ambiental (texto simples, secreto, fornecido pelo sistema); o nome e o valor da variável ambiental; e os ambientes nos quais você deseja disponibilizar a variável (produção, visualização, desenvolvimento ou todos os anteriores).

Consulte a documentação de variáveis ​​ambientais para uma explicação completa.

Advertências e detalhes técnicos

As funções sem servidor são executadas na nuvem com a ajuda de plataformas em nuvem. Embora seguir a sintaxe estabelecida de uma função sem servidor seja uma necessidade absoluta, também existem outras advertências e detalhes técnicos que você precisa saber. E embora o Vercel forneça um bom ponto de partida e padrões razoáveis ​​para suas funções sem servidor, é sempre bom saber como fazer o ajuste fino de acordo com suas necessidades.

Idiomas suportados

Oficialmente, o Vercel oferece suporte a quatro idiomas de back-end ou tempos de execução oficiais:

  • Node.js, com a extensão de arquivo .js ou .ts
  • Go, com a extensão de arquivo .go
  • Python, com a extensão de arquivo .py
  • Ruby, com a extensão de arquivo .rb

Também há suporte para tempos de execução da comunidade como Deno , PHP e Ferrugem , etc. Como alternativa, você também pode desenvolver seu próprio tempo de execução .

Tempo limite de execução

As funções sem servidor têm um tempo limite de execução padrão dentro do qual devem responder a uma solicitação HTTP de entrada. Para funções sem servidor de longa execução que não respondem à solicitação HTTP dentro do tempo limite de execução padrão, um código de status de erro de resposta HTTP 502 (Gateway inválido) é retornado com o código de erro NO_RESPONSE_FROM_FUNCTION .

Variáveis ​​ambientais reservadas

Alguns nomes de variáveis ​​de ambiente são reservados para que você não possa reutilizá-los. Veja a lista completa na documentação de variáveis ​​ambientais reservadas .

Limites

Existe uma lista finita de limites a serem considerados. Isso inclui o limite de tamanho de carga útil de função sem servidor, que concede o tamanho máximo de carga útil de 5 MB para a solicitação HTTP ou corpo de resposta e a implantação de funções sem servidor em várias regiões , que é limitado com base no seu plano.

Cabeçalhos CORS

Rotas de API são rotas geradas para funções sem servidor. Eles são mesma origem por padrão porque não especificam cabeçalhosCORS . Existem várias maneiras de ativar o CORS no Vercel .

Envio de e-mails com Nodemailer e Mailtrap

Diana Lepilkina tem uma postagem fantástica sobre como enviar e-mails com Nodemailer. Nodemailer é um módulo que permite enviar e-mails de Node.js. Instale-o com o comando npm install nodemailer ou yarn add nodemailer .

Em vez de replicar a explicação de Lepilkina, esta seção explica como você pode obter os mesmos resultados com funções sem servidor. Para manter as coisas simples e diretas, o exemplo usa Next.js.

Os pré-requisitos para continuar são ter uma conta MailTrap e um aplicativo Next.js com Nodemailer instalado. MailTrap é um serviço sandbox de e-mail que intercepta seu e-mail e permite que você inspecione e depure suas amostras de e-mail antes de enviá-las formalmente.

Supondo que você já tenha um aplicativo Next.js criado, crie um arquivo de função sem servidor /api/send-email.js em seu aplicativo Next.js com o seguinte código:

//1. Importe o módulo `nodemailer`
importar nodemailer de'nodemailer'; //2. Crie um transportador `nodemailer`-conecte o Nodemailer ao MailTrap (transportador)
const transporter=nodemailer.createTransport ({ host: process.env.MAIL_HOST, porta: 25, auth: { usuário: process.env.MAIL_USER, passar: process.env.MAIL_PASS, },
});

O método Nodemailer createTransport é usado para conectar o Nodemailer a um transportador como MailTrap ou Postmark . As opções passadas- host , porta e auth -pertencem ao MailTrap. Você precisará buscá-los em sua caixa de entrada do MailTrap .

MailTrap-Inbox-Options-Visual
Projetos MailTrap e caixas de entrada

Você pode reutilizar as caixas de entrada ou adicionar uma nova com “Adicionar caixa de entrada”. Em seguida, selecione Nodemailer em “Integrações” e copie as opções do transportador.

Adicionar integrações reutilizáveis ​​do Nodemailer da caixa de entrada

Salve as opções de host, usuário e senha como variáveis ​​ambientais: MAIL_HOST , MAIL_USER , MAIL_PASS .

Anexe a função sendEmail a /api/send-email.js .

 função assíncrona sendEmail ({nome, email}) { const emailOptions={ de:'Vercel Serverless Functions Demo ', para: `$ {name}-$ {email}`, assunto:'E-mail de demonstração', html: `

E-mail enviado de uma função sem servidor

`, }; //3. Isso enviará o e-mail com `emailOptions` acima. return transporter.sendMail (emailOptions); }

A função de exportação padrão, handler , lida com a solicitação de entrada, tenta sendEmail e responde apropriadamente:

 exportar manipulador de função assíncrona padrão (req, res) { if (req.method==='POST') { const emailRes=espera sendEmail (req.body); if (emailRes.messageId) { return res.status (200).json ({mensagem: `Email enviado com sucesso`}); } return res.status (400).json ({mensagem:'Erro ao enviar e-mail'}); } return res.status (400).json ({mensagem: `Método incorreto: $ {req.method}. Você quis dizer POST?`});
}

Se desejar, você pode testar usando o Postman, como na imagem abaixo. Veja como você pode usar uma única função para responder com base no método HTTP?

Postman de método HTTP de resposta única de função
Teste da função sem servidor no Postman

Você também pode obter o link para uma demonstração simples em Next.js conectado a um formulário.

Link de demonstração simples Nextjs
Aplicativo de demonstração com função Next.js sem servidor para enviar e-mail

Nesse ponto, sua caixa de entrada MailTrap deve começar a receber e-mails.

MailTrap Caixa de entrada Recebendo e-mail
Caixa de entrada MailTrap mostrando alguns e-mails

Conclusão

Quando integradas com plataformas de computação em nuvem, as funções sem servidor eliminam a necessidade de trabalhar no back-end, mesmo ao resolver tarefas tradicionalmente orientadas para o backend. Com o Vercel, implantar suas funções sem servidor ou trabalhar localmente por meio da CLI do Vercel pode ajudá-lo a implantar suas funções sem servidor com mais rapidez e devolver o tempo.

Para recursos adicionais, verifique esta lista de guias úteis e documentação.

A postagem Serverless deployments via Vercel usando Node.js apareceu primeiro no LogRocket Blog .

Source link