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

Site do Amplify Framework

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

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

npm install -g amplify-cli

Em seguida, vamos inicializar um diretório de trabalho criando uma pasta:

mkdir app && cd app

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

amplify init

Escolha as opções de acordo com o negrito texto abaixo:

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

Por favor, conte-nos sobre seu projeto

  • Qual estrutura javascript você está usando Nenhum
  • Caminho do diretório de origem: src
  • Caminho do diretório de distribuição: dist
  • Comando de compilação: build de script de execução do npm
  • Comando Iniciar: início do script de execução npm

Inicializando o projeto compartilhado

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

A execução do comando abaixo o guiará nas etapas para criar sua Camada Lambda:

amplify function add

Escolha as opções de acordo com o negrito texto opções abaixo. Observe que, para os tempos de execução compatíveis, você precisará pressionar o espaço no teclado para selecionar o tempo de execução.

  • Selecione qual recurso você deseja adicionar: Camada Lambda (código e recurso compartilhado 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. (Pressione para pular) Público

Folders Pastas e arquivos da camada Lambda criados: amplify / backend / function / apmAgentLayer

Instalando Módulos Customizados

Indo para o caminho da camada amplificar / backend / função / apmAgentLayer você pode ter visto algumas pastas criadas pelo Amplify. Como estamos trabalhando em um projeto Node.js., todos os módulos de nós devem estar instalados no lib / nodejs.

Criei um exemplo de um Application Performance Monitor para mostrar como usar o Node.js ganchos de desempenho recurso para medir a duração entre 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.

Pacote NPM para medir a duração entre solicitações

A primeira etapa aqui é instalar as dependências compartilhadas e enviá-las para a AWS. Vá para o caminho gerado pela CLI amplificar / back-end / função / 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 o seu pacote, você pode implantá-lo e inspecioná-lo mais tarde através do AWS Console. Observe que ainda não adicionamos nenhum código. O objetivo neste momento é apenas preparar esta biblioteca para uso posterior.

Execute o seguinte comando para fazer upload da sua camada Lambda:

amplify push

executando amplificar comando push e vendo a saída

Criando a função de API da Web

Neste ponto, você já tem um projeto de infraestrutura local do Amplify pronto para adicionar rotas, rotinas de API, vincular-se aos serviços da AWS e assim por diante.

O comando abaixo será útil para gerar um projeto baseado em ExpressJS e uma função do AWS Lambda. Ele também vinculará a função na sua camada quase criada do AWS Lambda e a exporá no AWS API Gateway.

amplify api add

Escolha as opções de acordo com o negrito texto abaixo:

  • Por favor, selecione um dos serviços mencionados abaixo: DESCANSAR
  • Forneça um nome amigável para que seu recurso seja usado como um rótulo para esta categoria no projeto: myApi
  • Forneça um caminho (por exemplo, / book / {isbn}): /Oi
  • Escolha uma fonte Lambda Crie uma nova função Lambda
  • Forneça um nome amigável para que seu recurso seja usado como um rótulo para esta categoria no projeto: myApi
  • Forneça o nome da função do AWS Lambda: myApi
  • Escolha o tempo de execução que você deseja usar: NodeJS
  • Escolha o modelo de função que você deseja usar: Função ExpressJS sem servidor (integração com o API Gateway)
  • Deseja acessar outros recursos neste projeto a partir da sua função Lambda? Não
  • Deseja invocar esta função em uma programação recorrente? Não
  • Deseja configurar 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
  • Deseja editar a função lambda local agora? sim

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

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

código adicionado na cabeça do arquivo

Após editar o arquivo, vá para o terminal e pressione Entrar e escolha as respostas mostradas em negrito abaixo:

  • Restringir o acesso à API Não
  • Deseja adicionar outro caminho? Não

No momento da redação deste artigo, não podemos testar as Lambda Layers localmente usando o AWS Amplify. Mas você vai implantar seu projeto na AWS e testá-lo em produção de executando o amplify push comando novamente.

Observe que ele imprimirá quais recursos precisam ser atualizados e quais recursos serão criados nessa implantação. Demoraria um pouco para executar todas as operações e sua saída deve se parecer com a abaixo:

API de implantação

Como seu terminal pode ter mostrado, sua API agora tem um URL. Meu URL gerado é https://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 https://nlq7x7onj0.execute-api.us-east-1.amazonaws.com/dev/hi

Após executá-lo, a API deve responder com uma resposta JSON com o seguinte conteúdo {"success":"get call succeed!","url":"/hi"}. A camada Lambda foi injetada e deveria ter alterado seus cabeçalhos de resposta, adicionando o x-instrumented-by e x-request-id chaves como esta:

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

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

painel de controle e visualização de logs de funções na AWS

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 criar aplicativos de próxima geração e evitar tarefas repetitivas.

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

Obrigado pela leitura

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

Até mais! 🍻