Como reutilizar pacotes Node.js com funções AWS Lambda usando camadas Amplify e Lambda

Neste artigo, você aprenderá como injetar pacotes personalizados no AWS Lambda Functions 'Runtime usando AWS Lambda Layers. Você também usará o Amplify para desenvolver, implantar e distribuir seus aplicativos.

Os aplicativos sem servidor são ótimos para quem não quer pagar por máquinas ociosas ou até mesmo gerenciar infraestruturas em nuvem. Este post vai se concentrar em uma introdução suave ao Quadro Amplify usando Node.js .Você instalará um pacote Node.js personalizado uma vez e o injetará em todas as suas funções usando o AWS Lambda Layers .

Ao final desta postagem, você terá aprendido como implantar funções sem servidor na AWS:

  • Criação de uma API da Web Node.js usando Express.js como uma função sem servidor usando o Amplify Framework
  • Injetar um pacote personalizado no tempo de execução de funções do AWS Lambda usando AWS Lambda Layers para monitorar e estender as solicitações HTTP.

Requisitos

Nas próximas etapas, você criará um aplicativo real e o publicará na infraestrutura AWS. Antes de começar a codificar, certifique-se de ter os seguintes requisitos configurados em seu ambiente:

  • Uma conta AWS Active
  • AWS CLI
  • Node.js v14

Introdução

Uma das minhas plataformas de nuvem favoritas que fornece infraestrutura sem servidor é o Amazon Web Services. Há muito tempo eles desenvolvem e distribuem plataformas que capacitam as empresas a lançar software mais rápido do que se tivessem que configurar e lidar com configurações repetitivas.

Se você está familiarizado com aplicativos sem servidor, talvez já tenha ouvido falar sobre o Serverless Framework. É uma estrutura de várias nuvens para gerenciar arquiteturas sem servidor usando arquivos de configuração, implantando e executando aplicativos usando um único comando.

Mesmo assim, os desenvolvedores ainda precisam instalar plug-ins e gerenciar os arquivos de configuração por conta própria e pode demorar um pouco para construir um fluxo de trabalho complexo.

Então, de que tipo de CLI você mais gosta? Uma CLI que perguntará sobre o que você deseja, como conexões externas (banco de dados, armazenamento, fila, etc.), fluxo de autenticação, permissões externas e assim por diante? Sim, meu amigo, bem-vindo ao AWS Amplify.

AWS Amplify

AWS Amplify é um ecossistema que ajuda desenvolvedores de back-end, front-end e integração. Se você der uma olhada em seus documentos oficiais, verá a enorme lista de bibliotecas e exemplos possíveis para trabalhar tanto no back-end quanto no front e nos aplicativos.

Quando você tiver seu AWS CLI configurado e seu ambiente definido, execute o seguinte comando para instalar o AWS Amplify globalmente em sua máquina:

npm install -g amplify-cli

A seguir, vamos inicializar um diretório de trabalho criando uma pasta:

mkdir app && cd app

Agora, você inicializará um projeto amplificar executando o comando abaixo. Para fazer isso, você precisará verificar algumas opções no assistente CLI. Observe que, quando solicitado, você pode pressionar Enter no teclado para escolher os valores padrão.

amplify init

Escolha as opções de acordo com o texto em negritoabaixo:

  • Insira um nome para o aplicativo do projeto
  • Insira um nome para o ambiente dev
  • Escolha seu editor padrão: Código do Visual Studio
  • Escolha o tipo de aplicativo que você está construindo javascript

Por favor, conte-nos sobre seu projeto

  • O quadro javascript você está usando nenhum
  • Caminho do diretório de origem:   src
  • Caminho do diretório de distribuição: dist
  • Comando de compilação:   npm run-script build
  • Comando de inicialização : npm run-script start

Inicializando o projeto compartilhado

Nas próximas etapas, você criará uma função. Esta função será usada para armazenar dependências que serão injetadas posteriormente nas funções em torno do ecossistema de Funções do AWS Lambda.

Executar o comando abaixo irá guiá-lo nas etapas de criação de sua camada Lambda:

amplify function add

Escolha as opções de acordo com o texto em negritoopções abaixo. Observe que para os tempos de execução compatíveis, você precisará apertar a tecla de espaço do teclado para selecionar o tempo de execução.

  • Selecione qual recurso você deseja adicionar: camada Lambda (código compartilhado e recurso usado nas funções)
  • Forneça um nome para sua camada Lambda: apmAgentLayer
  • Selecione até 2 tempos de execução compatíveis: NodeJS
  • A conta atual da AWS sempre terá acesso a essa camada.
  • Opcionalmente, configure quem mais pode acessar esta camada. (Clique para pular) Público

✅ Pastas de camada lambda e arquivos criados: amplificar / backend / função / apmAgentLayer

Instalando módulos personalizados

Indo ao caminho da camada amplify / backend / function / apmAgentLayer, você pode ter visto algumas pastas criadas pelo Amplify. Como estamos trabalhando em um projeto Node.js, todos os módulos de nó devem ser instalados em lib / nodejs .

Criei um exemplo de Monitor de desempenho de aplicativo para mostrar como usar o recurso de ganchos de desempenho do Node.js para medir a duração entre as solicitações e alterar os leitores de resposta HTTP. Isso ajudará a mostrar outras possibilidades para implementar código compartilhado e estender o comportamento do Node.js.

A primeira etapa aqui é instalar as dependências compartilhadas e carregá-las no AWS. Vá para o caminho gerado pelo CLI amplify / backend / function / apmAgentLayer / lib / nodejs e instale o pacote usando os seguintes comandos:

cd amplify/backend/function/apmAgentLayer/lib/nodejs npm i @erickwendel/ew-agent

Implantando

Depois de instalar seu pacote, você pode simplesmente implantá-lo e inspecioná-lo posteriormente por meio do Console da AWS. Observe que ainda não adicionamos nenhum código. O objetivo neste ponto é apenas preparar esta biblioteca para uso posterior.

Execute o seguinte comando para fazer o upload de sua Lambda Layer:

amplify push

Criação da função Web API

Neste ponto, você já tem um projeto de infraestrutura local Amplify pronto para adicionar Rotinas de API, Rotinas, link com serviços AWS e assim por diante.

O comando a seguir será útil para gerar um projeto baseado em ExpressJS e uma função AWS Lambda. Ele também vinculará a função em seu AWS Lambda Layer quase criado e o exporá no AWS API Gateway.

amplify api add

Escolha as opções de acordo com o texto em negritoabaixo:

  • Selecione um dos serviços abaixo mencionados: REST
  • Forneça um nome amigável para seu recurso a ser usado como um rótulo para esta categoria no projeto: myApi
  • Forneça um caminho (por exemplo, / book / {isbn}): / hi
  • Escolha uma fonte Lambda Crie uma nova função Lambda
  • Forneça um nome amigável para seu recurso a ser usado como um rótulo para esta categoria no projeto: myApi
  • Forneça o nome da função AWS Lambda: myApi
  • Escolha o tempo de execução que deseja usar: NodeJS
  • Escolha o modelo de função que deseja usar: Função ExpressJS sem servidor (integração com API Gateway)
  • Você deseja acessar outros recursos neste projeto de sua função Lambda? Não
  • Você deseja invocar esta função em uma programação recorrente? Não
  • Você deseja configurar as camadas Lambda para esta função? sim
  • Forneça camadas existentes ou selecione camadas neste projeto para acessar a partir desta função (escolha

    até 5): apmAgentLayer

  • Selecione uma versão para apmAgentLayer: 1
  • Você deseja editar a função lambda local agora? sim

Como estou usando o VSCode, a última resposta do assistente abrirá o app.jsarquivo no meu editor para que eu possa editar. Agora, sem adicionar outras dependências, vamos importar o módulo compartilhado Lambda Layer na primeira linha deste arquivo usando o código abaixo:

require('@erickwendel/ew-agent').start()

Após editar o arquivo, acesse o terminal e pressione Enter e escolha as respostas mostradas em negrito abaixo:

  • Acesso à API restrito Não
  • Você quer adicionar outro caminho? Não

No momento em que este artigo foi escrito, não podemos testar Lambda Layers localmente usando o AWS Amplify. Mas você vai implantar seu projeto para AWS e testá-lo em produção porexecutando o amplify pushcomando novamente.

Observe que ele imprimirá quais recursos precisam ser atualizados e quais recursos serão criados nesta implantação. Demoraria um pouco para realizar todas as operações e sua saída deve ser semelhante a esta:

Como seu terminal pode ter mostrado, sua API agora tem um URL. Minha URL gerada é //nlq7x7onj0.execute-api.us-east-1.amazonaws.com/dev e a rota será hi, que criamos juntos nas etapas anteriores.

Vamos acionar uma solicitação usando o cURL (ou mesmo seu navegador) para ver o que acontece:

curl -i //nlq7x7onj0.execute-api.us-east-1.amazonaws.com/dev/hi

Depois de executá-lo, a API deve responder com uma resposta JSON com o seguinte conteúdo {"success":"get call succeed!","url":"/hi"}. A Lambda Layer foi injetada e deveria ter mudado seus cabeçalhos de resposta adicionando as chaves x-instrumented-bye x-request-idassim:

x-instrumented-by: ErickWendel x-request-id: 5ddf1343-e42e-4e33-b1e1-936c303c14c8

Se você está curioso sobre o que o Amplify conseguiu para você durante este tutorial, execute amplify consolee navegue no painel. Você pode ver o meu abaixo:

Limpando

Para remover todos os recursos criados pelo Amplify, execute amplify delete.

Conclusão

Existem várias maneiras de melhorar sua experiência em aplicativos sem servidor. O Amplify Framework pode ajudá-lo a construir aplicativos de última geração e evitar tarefas repetitivas.

Verifique os documentos oficiais para ver outras possibilidades de construir APIs poderosas usando tecnologias de ponta, como GraphQL e AWS AppSync. Tenho certeza que vai te ajudar muito!

Obrigado por ler

Eu realmente aprecio o tempo que passamos juntos. Espero que este conteúdo seja mais do que apenas texto. Espero que isso o tenha tornado um pensador melhor e também um programador melhor. Siga-me no Twitter e confira meu blog pessoal onde compartilho todo o meu valioso conteúdo.

Até mais! ?