Node.js-pakketten opnieuw gebruiken met AWS Lambda-functies met behulp van Amplify- en Lambda-lagen

In dit artikel leer je hoe je aangepaste pakketten kunt injecteren in AWS Lambda Functions 'Runtime door AWS Lambda Layers te gebruiken. Je gebruikt Amplify ook om je applicaties te ontwikkelen, implementeren en distribueren.

Serverloze applicaties zijn geweldig voor diegenen die niet willen betalen voor inactieve machines of zelfs cloudinfrastructuren willen beheren. Dit bericht zal zich richten op een zachte kennismaking met de Amplify Framework met behulp van Node.js .U installeert één keer een aangepast Node.js-pakket en injecteert het in al uw functies met behulp van AWS Lambda Layers .

Aan het einde van dit bericht heb je geleerd hoe je serverloze functies op AWS implementeert door:

  • Een Node.js-web-API maken met Express.js als een serverloze functie met behulp van het Amplify Framework
  • Het injecteren van een aangepast pakket op de runtime van AWS Lambda-functies met behulp van AWS Lambda Layers om HTTP-verzoeken te controleren en uit te breiden.

Vereisten

In de volgende stappen maak je een echte applicatie en publiceer je deze op de AWS-infrastructuur. Voordat u begint met coderen, moet u ervoor zorgen dat de volgende vereisten zijn ingesteld voor uw omgeving:

  • Een AWS actief account
  • AWS CLI
  • Node.js v14

Invoering

Een van mijn favoriete cloudplatforms die serverloze infrastructuur biedt, is Amazon Web Services. Ze ontwikkelen en verzenden al lang platforms waarmee bedrijven sneller software kunnen uitbrengen dan wanneer ze repetitieve configuraties zouden moeten configureren en verwerken.

Als u bekend bent met serverloze toepassingen, heeft u misschien wel eens gehoord van het serverloze framework. Het is een multi-cloud-framework voor het beheren van serverloze architecturen door configuratiebestanden te gebruiken, apps te implementeren en uit te voeren met een enkele opdracht.

Toch moeten ontwikkelaars nog steeds plug-ins installeren en configuratiebestanden zelf beheren, en het kan even duren om een ​​complexe workflow op te bouwen.

Dus, wat voor soort CLI vind je het leukst? Een CLI die u zou vragen wat u wilt, zoals externe verbindingen (database, opslag, wachtrij, enz.), Authenticatiestroom, externe machtigingen, enzovoort? Ja mijn vriend, welkom bij AWS Amplify.

AWS versterken

AWS Amplify is een ecosysteem dat back-end-, front-end- en integratie-ontwikkelaars helpt. Als je de officiële documenten bekijkt, zie je de enorme lijst met mogelijke bibliotheken en voorbeelden om aan zowel de achterkant als de voorkant en toepassingen te werken.

Wanneer u uw AWS CLI heeft geconfigureerd en uw omgeving heeft ingesteld, voert u de volgende opdracht uit om AWS Amplify wereldwijd op uw machine te installeren:

npm install -g amplify-cli

Laten we vervolgens een werkmap initialiseren door een map te maken:

mkdir app && cd app

Nu initialiseer je een versterkingsproject door de onderstaande opdracht uit te voeren. Om dit te doen, moet u een paar opties in de CLI-wizard aanvinken. Merk op dat u, wanneer daarom wordt gevraagd, op Enter op uw toetsenbord kunt drukken om standaardwaarden te kiezen.

amplify init

Kies de opties volgens de vetgedrukte teksthieronder:

  • Voer een naam in voor de project- app
  • Voer een naam voor het milieu dev
  • Kies uw standaardeditor: Visual Studio Code
  • Kies het type app dat u javascript maakt

Vertel ons alstublieft over uw project

  • Welk javascript-framework gebruikt u niet
  • Pad bronmap:   src
  • Pad distributiemap: dist
  • Build-opdracht:   npm run-script build
  • Startopdracht: npm run-script start

Initialiseren van het gedeelde project

Door de volgende stappen maak je een functie. Deze functie zal worden gebruikt om afhankelijkheden op te slaan die later in functies rond het AWS Lambda Functions-ecosysteem zullen worden geïnjecteerd.

Als u de onderstaande opdracht uitvoert, wordt u naar de stappen geleid om uw Lambda-laag te maken:

amplify function add

Kies de opties volgens de vetgedrukte tekstopties hieronder. Merk op dat u voor de compatibele runtimes de spatiebalk op uw toetsenbord moet indrukken om de runtime te selecteren.

  • Selecteer welke mogelijkheid u wilt toevoegen: Lambda-laag (gedeelde code en bron gebruikt in functies)
  • Geef een naam op voor uw Lambda-laag: apmAgentLayer
  • Selecteer maximaal 2 compatibele looptijden: NodeJS
  • Het huidige AWS-account heeft altijd toegang tot deze laag.
  • Configureer optioneel wie er nog meer toegang heeft tot deze laag. (Druk om over te slaan) Openbaar

✅ Lambda-laagmappen en -bestanden gemaakt: amplify / backend / function / apmAgentLayer

Aangepaste modules installeren

Als je naar het pad van de laag amplify / backend / function / apmAgentLayer gaat, heb je misschien een paar mappen gezien die door Amplify zijn gemaakt. Omdat we aan een Node.js-project werken, moeten alle knooppuntmodules op lib / nodejs worden geïnstalleerd .

Ik heb een voorbeeld gemaakt van een Application Performance Monitor om te laten zien hoe je de Node.js- functie voor prestatiehaken gebruikt om de duur tussen verzoeken te meten en HTTP-responslezers te wijzigen. Het zal u andere mogelijkheden laten zien om gedeelde code te implementeren en het gedrag van Node.js uit te breiden.

De eerste stap hier is om de gedeelde afhankelijkheden te installeren en deze te uploaden naar de AWS. Ga naar het pad gegenereerd door de CLI amplify / backend / function / apmAgentLayer / lib / nodejs en installeer vervolgens het pakket met behulp van de volgende opdrachten:

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

Implementeren

Nadat u uw pakket heeft geïnstalleerd, kunt u het gewoon implementeren en later inspecteren via de AWS-console. Merk op dat we nog geen code hebben toegevoegd. Het doel op dit punt is om deze bibliotheek voor verder gebruik voor te bereiden.

Voer de volgende opdracht uit om uw Lambda-laag te uploaden:

amplify push

Creëren van de Web API-functie

Op dit moment heb je al een lokaal Amplify-infrastructuurproject klaar om API-routes, -routines toe te voegen, verbinding te maken met AWS-services, enzovoort.

De onderstaande opdracht is handig voor het genereren van een op ExpressJS gebaseerd project en een AWS Lambda-functie. Het zal ook de functie op uw bijna gemaakte AWS Lambda-laag koppelen en deze op de AWS API-gateway weergeven.

amplify api add

Kies de opties volgens de vetgedrukte teksthieronder:

  • Maak een keuze uit een van de onderstaande services: REST
  • Geef een beschrijvende naam op voor uw bron die als label voor deze categorie in het project moet worden gebruikt: myApi
  • Geef een pad op (bijv. / Book / {isbn}): / hi
  • Kies een Lambda-bron Maak een nieuwe Lambda-functie
  • Geef een beschrijvende naam op voor uw bron die als label voor deze categorie in het project moet worden gebruikt: myApi
  • Geef de AWS Lambda-functienaam op: myApi
  • Kies de runtime die u wilt gebruiken: NodeJS
  • Kies de functiesjabloon die u wilt gebruiken: Serverless ExpressJS-functie (integratie met API Gateway)
  • Wil je vanuit je Lambda-functie toegang krijgen tot andere bronnen in dit project? Nee
  • Wilt u deze functie op een terugkerend schema gebruiken? Nee
  • Wilt u Lambda-lagen configureren voor deze functie? Ja
  • Bied bestaande lagen of selecteer lagen in dit project om toegang te krijgen vanuit deze functie (kies

    tot 5): apmAgentLayer

  • Selecteer een versie voor apmAgentLayer: 1
  • Wilt u de lokale lambda-functie nu bewerken? Ja

Omdat ik VSCode gebruik, opent het antwoord van de laatste wizard het app.jsbestand in mijn editor zodat ik het kan bewerken. Laten we nu, zonder andere afhankelijkheden toe te voegen, de gedeelde Lambda Layer- module op de eerste regel van dit bestand importeren met behulp van de onderstaande code:

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

Ga na het bewerken van het bestand naar de terminal en druk op Enter en kies de antwoorden die hieronder vetgedrukt zijn weergegeven:

  • API-toegang beperken Nee
  • Wil je nog een pad toevoegen? Nee

Op het moment van schrijven kunnen we Lambda Layers niet lokaal testen met AWS Amplify. Maar u gaat uw project implementeren in AWS en het in productie testen doorde amplify pushopdracht opnieuw uitvoeren.

Merk op dat het zal afdrukken welke bronnen moeten worden bijgewerkt en welke bronnen bij deze implementatie zullen worden gemaakt. Het zou even duren om alle bewerkingen uit te voeren en uw uitvoer zou er als volgt uit moeten zien:

Zoals uw terminal wellicht heeft laten zien, heeft uw API nu een URL. Mijn gegenereerde URL is //nlq7x7onj0.execute-api.us-east-1.amazonaws.com/dev en de route zal zijn hi, die we samen in de vorige stappen hebben gemaakt.

Laten we een verzoek activeren met behulp van de cURL (of zelfs uw browser) om te zien wat er gebeurt:

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

Nadat het is uitgevoerd, moet de API reageren met een JSON-antwoord met de volgende inhoud {"success":"get call succeed!","url":"/hi"}. De Lambda-laag is geïnjecteerd en het zou je antwoordkoppen moeten hebben gewijzigd door de x-instrumented-byen x-request-id-toetsen als volgt toe te voegen :

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

Als je nieuwsgierig bent naar wat Amplify voor je heeft gedaan tijdens deze tutorial, ren amplify consoleen blader dan op het dashboard. Je kunt de mijne hieronder zien:

Schoonmaken

Om alle bronnen die door Amplify zijn gemaakt te verwijderen, voert u uit amplify delete.

Conclusie

Er zijn veel manieren om uw ervaring met serverloze applicaties te verbeteren. Het Amplify Framework kan u helpen bij het bouwen van apps van de volgende generatie en het vermijden van repetitieve taken.

Bekijk de officiële documenten voor andere mogelijkheden om krachtige API's te bouwen met behulp van geavanceerde technologieën zoals GraphQL en AWS AppSync. Ik weet zeker dat het je veel zal helpen!

Bedankt voor het lezen

Ik waardeer de tijd die we samen hebben doorgebracht enorm. Ik hoop dat deze inhoud meer zal zijn dan alleen tekst. Ik hoop dat het je een betere denker en ook een betere programmeur heeft gemaakt. Volg mij op Twitter en bekijk mijn persoonlijke blog waar ik al mijn waardevolle inhoud deel.

Tot ziens! ?