Sådan genbruges Node.js-pakker med AWS Lambda-funktioner ved hjælp af forstærknings- og Lambda-lag

I denne artikel lærer du, hvordan du injicerer brugerdefinerede pakker på AWS Lambda-funktioners kørselstid ved hjælp af AWS Lambda-lag. Du bruger også Amplify til at udvikle, implementere og distribuere dine applikationer.

Serverløse applikationer er gode til dem, der ikke ønsker at betale for inaktive maskiner eller endda administrere skyinfrastrukturer. Dette indlæg vil fokusere på en blid introduktion til Forstærk Framework hjælp node.js .Du installerer en brugerdefineret Node.js-pakke en gang og injicerer den på alle dine funktioner ved hjælp af AWS Lambda Layers .

I slutningen af ​​dette indlæg vil du have lært, hvordan du distribuerer serverløse funktioner på AWS ved at:

  • Oprettelse af en Node.js Web API ved hjælp af Express.js som en serverfri funktion ved hjælp af Amplify Framework
  • Injicering af en brugerdefineret pakke på AWS Lambda-funktioners runtime ved hjælp af AWS Lambda Layers til at overvåge og udvide HTTP-anmodninger.

Krav

I de næste trin opretter du en rigtig applikation og offentliggør den på AWS-infrastrukturen. Inden du begynder at kode, skal du sikre dig, at du har følgende krav til dit miljø:

  • En AWS aktiv konto
  • AWS CLI
  • Node.js v14

Introduktion

En af mine foretrukne skyplatforme, der leverer serverløs infrastruktur, er Amazon Web Services. De har længe udviklet og forsendt platforme, der giver virksomheder mulighed for at frigive software hurtigere, end hvis de skulle konfigurere og håndtere gentagne konfigurationer.

Hvis du er fortrolig med serverløse applikationer, har du muligvis hørt om Serverless Framework. Det er en multi-cloud-ramme til styring af serverløse arkitekturer ved hjælp af konfigurationsfiler, implementering og kørsel af apps med en enkelt kommando.

Alligevel har udviklere stadig brug for installation af plugins og administrerer konfigurationsfiler alene, og det kan tage et stykke tid at opbygge en kompleks workflow.

Så hvilken slags CLI kan du lide mest? En CLI, der vil spørge dig om, hvad du vil have, såsom eksterne forbindelser (database, lagring, kø osv.), Godkendelsesflow, eksterne tilladelser osv.? Ja min ven, velkommen til AWS Amplify.

AWS Amplify

AWS Amplify er et økosystem, der hjælper back-end-, front-end- og integrationsudviklere. Hvis du kigger på dets officielle dokumenter, kan du se den enorme liste over mulige biblioteker og eksempler, der kan arbejde på både bagenden og fronten og applikationer.

Når du har konfigureret din AWS CLI, og dit miljø er indstillet, skal du køre følgende kommando for at installere AWS Amplify globalt på din maskine:

npm install -g amplify-cli

Lad os derefter initialisere en arbejdsmappe ved at oprette en mappe:

mkdir app && cd app

Nu initialiserer du et forstærkende projekt ved at køre kommandoen nedenfor. For at gøre det skal du kontrollere et par muligheder i CLI-guiden. Bemærk, at når du bliver bedt om det, kan du trykke på Enter på tastaturet for at vælge standardværdier.

amplify init

Vælg indstillingerne i henhold til fed skriftunder:

  • Indtast et navn til projektet app
  • Indtast et navn for miljøet dev
  • Vælg din standardeditor: Visual Studio-kode
  • Vælg den type app, du bygger javascript

Fortæl os venligst om dit projekt

  • Hvilken javascript-ramme bruger du ingen
  • Kildekatalogsti:   src
  • Distribution Directory Path: dist
  • Byg kommando:   npm run-script build
  • Startkommando : npm start-script

Initialisering af det delte projekt

Gennem de næste trin opretter du en funktion. Denne funktion vil blive brugt til at gemme afhængigheder, som senere injiceres i funktioner omkring AWS Lambda Functions-økosystemet.

At køre kommandoen nedenfor vil guide dig mod trin til oprettelse af dit Lambda Layer:

amplify function add

Vælg indstillingerne i henhold til fed skriftvalgmuligheder nedenfor. Bemærk, at for de kompatible driftstider skal du trykke på mellemrumstasten på dit tastatur for at vælge køretiden.

  • Vælg hvilken kapacitet du vil tilføje: Lambda-lag (delt kode og ressource, der bruges på tværs af funktioner)
  • Angiv et navn til dit Lambda-lag: apmAgentLayer
  • Vælg op til 2 kompatible driftstider: NodeJS
  • Den aktuelle AWS-konto har altid adgang til dette lag.
  • Eventuelt kan du konfigurere, hvem der ellers kan få adgang til dette lag. (Hit for at springe over) Offentlig

Created Lambda lagmapper og filer oprettet: forstærk / backend / funktion / apmAgentLayer

Installation af brugerdefinerede moduler

Gå til lagets sti amplify / backend / function / apmAgentLayer, du har muligvis set et par mapper oprettet af Amplify. Da vi arbejder på et Node.js-projekt, skal alle nodemoduler installeres på lib / nodejs .

Jeg byggede et eksempel på en Application Performance Monitor for at vise, hvordan man bruger de node.js ydeevne kroge funktionen til at måle varigheden mellem anmodninger og ændre HTTP response læsere. Det hjælper dig med at vise andre muligheder for at implementere delt kode og udvide Node.js-opførsel.

Det første trin her er at installere de delte afhængigheder og uploade dem til AWS. Gå til den sti, der genereres af CLI amplify / backend / function / apmAgentLayer / lib / nodejs, og installer derefter pakken ved hjælp af følgende kommandoer:

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

Implementering

Når du har installeret din pakke, kan du bare installere den og inspicere den senere via AWS-konsollen. Bemærk, at vi endnu ikke har tilføjet nogen kode. Målet på dette tidspunkt er bare at forberede dette bibliotek til yderligere brug.

Kør følgende kommando for at uploade dit Lambda Layer:

amplify push

Oprettelse af Web API-funktionen

På dette tidspunkt har du allerede et lokalt Amplify-infrastrukturprojekt klar til at tilføje API-ruter, rutiner, link til AWS-tjenester osv.

Kommandoen nedenfor vil være nyttig til at generere et ExpressJS-baseret projekt og en AWS Lambda-funktion. Det forbinder også funktionen på dit næsten oprettede AWS Lambda Layer og udsætter den for AWS API Gateway.

amplify api add

Vælg indstillingerne i henhold til fed skriftunder:

  • Vælg en af ​​nedenstående tjenester: REST
  • Angiv et venligt navn til din ressource, der skal bruges som en etiket til denne kategori i projektet: myApi
  • Angiv en sti (f.eks. / Book / {isbn}): / hej
  • Vælg en Lambda-kilde Opret en ny Lambda-funktion
  • Angiv et venligt navn til din ressource, der skal bruges som en etiket til denne kategori i projektet: myApi
  • Angiv AWS Lambda-funktionsnavnet: myApi
  • Vælg den kørselstid, du vil bruge: NodeJS
  • Vælg den funktionsskabelon, du vil bruge: Serverfri ExpressJS-funktion (Integration med API Gateway)
  • Ønsker du at få adgang til andre ressourcer i dette projekt fra din Lambda-funktion? Ingen
  • Ønsker du at påkalde denne funktion på en tilbagevendende tidsplan? Ingen
  • Vil du konfigurere Lambda-lag til denne funktion? Ja
  • Angiv eksisterende lag, eller vælg lag i dette projekt for at få adgang til denne funktion (vælg

    op til 5): apmAgentLayer

  • Vælg en version til apmAgentLayer: 1
  • Vil du redigere den lokale lambda-funktion nu? Ja

Da jeg bruger VSCode, åbner den sidste guides svar app.jsfilen på min editor, så jeg kan redigere. Nu uden at tilføje andre afhængigheder, lad os importere det delte Lambda Layer- modul på den første linje i denne fil ved hjælp af nedenstående kode:

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

Efter redigering af filen skal du gå til terminalen og trykke på Enter og vælge svarene vist med fed skrift nedenfor:

  • Begræns API-adgang nr
  • Vil du tilføje en anden sti? Ingen

I skrivende stund kan vi ikke teste Lambda-lag lokalt ved hjælp af AWS Amplify. Men du vil implementere dit projekt til AWS og teste det i produktion afkører amplify pushkommandoen igen.

Bemærk, at det udskriver, hvilke ressourcer der skal opdateres, og hvilke ressourcer der oprettes ved denne implementering. Det tager et stykke tid at udføre alle operationer, og din output skal se ud som nedenfor:

Som din terminal muligvis har vist, har din API nu en URL. Min genererede URL er //nlq7x7onj0.execute-api.us-east-1.amazonaws.com/dev og ruten vil være hi, som vi oprettede sammen i de foregående trin.

Lad os udløse en anmodning ved hjælp af cURL (eller endda din browser) for at se, hvad der sker:

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

Efter at have kørt det, skal API'en svare med et JSON-svar med følgende indhold {"success":"get call succeed!","url":"/hi"}. Lambda Layer blev injiceret, og det skulle have ændret dine svaroverskrifter ved at tilføje x-instrumented-byog x-request-idnøglerne som denne:

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

Hvis du er nysgerrig efter, hvad Amplify har styret for dig under denne tutorial, skal du køre amplify consoleog gennemse på instrumentbrættet. Du kan se min nedenfor:

Gøre rent

For at fjerne alle ressourcer oprettet af Amplify skal du køre amplify delete.

Konklusion

Der er mange måder at forbedre din oplevelse på serverløse applikationer. Amplify Framework kan hjælpe dig med at opbygge næste generations apps og undgå gentagne opgaver.

Se de officielle dokumenter for at se andre muligheder for at opbygge kraftige API'er ved hjælp af banebrydende teknologier som GraphQL og AWS AppSync. Jeg er sikker på, at det vil hjælpe dig meget!

Tak fordi du læste

Jeg sætter stor pris på den tid, vi tilbragte sammen. Jeg håber, at dette indhold vil være mere end bare tekst. Jeg håber, det vil have gjort dig til en bedre tænker og også en bedre programmør. Følg mig på Twitter og tjek min personlige blog, hvor jeg deler alt mit værdifulde indhold.

Vi ses! ?