A Node.js csomagok újrafelhasználása AWS Lambda funkciókkal az erősítés és a Lambda rétegek használatával

Ebben a cikkben megtudhatja, hogyan lehet egyéni csomagokat beadni az AWS Lambda Functions futásidejére az AWS Lambda Rétegek használatával. Az Amplify alkalmazást fejleszteni, telepíteni és terjeszteni is fogja.

A kiszolgáló nélküli alkalmazások nagyszerűek azok számára, akik nem akarnak tétlen gépekért fizetni, vagy akár felhőinfrastruktúrákat is kezelni. Ez a bejegyzés az Amplify Framework szelíd bevezetésére összpontosít, a Node.js használatával .Egyszerre telepít egy egyedi Node.js csomagot, és az AWS Lambda Layers használatával befecskendezi az összes funkciójába .

A bejegyzés végére megtanulhatja, hogyan telepítsen kiszolgáló nélküli funkciókat az AWS-re:

  • Node.js webes API létrehozása az Express.js használatával kiszolgáló nélküli funkcióként az Amplify Framework használatával
  • Egyéni csomag injektálása az AWS Lambda funkciók futásidejére az AWS Lambda rétegek használatával a HTTP-kérelmek figyelemmel kísérésére és kiterjesztésére.

Követelmények

A következő lépésekben létrehoz egy igazi alkalmazást, és közzéteszi az AWS infrastruktúrán. A kódolás megkezdése előtt győződjön meg arról, hogy a következő követelményeket támasztja a környezetével:

  • AWS aktív fiók
  • AWS CLI
  • Node.js v14

Bevezetés

Az egyik kedvenc szerver nélküli infrastruktúrát biztosító felhőplatformom az Amazon Web Services. Régóta fejlesztenek és szállítanak olyan platformokat, amelyek felhatalmazzák a vállalatokat a szoftverek gyorsabb kiadására, mintha ismétlődő konfigurációkat kellene konfigurálniuk és kezelniük.

Ha ismeri a Serverless alkalmazásokat, akkor talán hallott a Serverless Frameworkről. Ez egy többfelhős keretrendszer a szerver nélküli architektúrák kezeléséhez konfigurációs fájlok használatával, alkalmazások egyetlen parancs segítségével történő telepítésével és futtatásával.

Ennek ellenére a fejlesztőknek még mindig telepíteniük kell a beépülő modulokat, és maguknak kell kezelniük a konfigurációs fájlokat, és egy komplex munkafolyamat felépítése eltarthat egy ideig.

Szóval, milyen CLI-t szeretsz a legjobban? Egy CLI, amely megkérdezi Önt arról, hogy mit szeretne, például külső kapcsolatokról (adatbázis, tárolás, várólista stb.), Hitelesítési folyamatról, külső engedélyekről és így tovább? Igen, barátom, üdvözlöm az AWS Amplify-ban.

AWS Amplify

Az AWS Amplify egy olyan ökoszisztéma, amely segíti a háttér-, a kezelő- és az integrációs fejlesztőket. Ha megnézi annak hivatalos dokumentumait, meglátja a lehetséges könyvtárak hatalmas listáját és példáit, amelyek mind a hátoldalon, mind a kezelőfelületen és az alkalmazásokon dolgozhatnak.

Ha konfigurálta az AWS CLI-t és beállította a környezetét, futtassa a következő parancsot az AWS Amplify globális telepítéséhez a számítógépére:

npm install -g amplify-cli

Ezután inicializáljuk a munkakönyvtárat egy mappa létrehozásával:

mkdir app && cd app

Most az alábbi parancs futtatásával inicializál egy amplifikációs projektet. Ehhez ellenőriznie kell néhány beállítást a CLI varázslóban. Figyelje meg, hogy amikor a rendszer kéri, megnyomhatja az Enter billentyűt az alapértelmezett értékek kiválasztásához.

amplify init

Válassza ki a lehetőségeket a félkövér szöveg szerintlent:

  • Adjon meg egy nevet a projekt app
  • Adjon nevet a környezeti fejlesztőnek
  • Válassza ki az alapértelmezett szerkesztőt: Visual Studio Code
  • Válassza ki a javascriptet építő alkalmazás típusát

Kérjük, mondja el nekünk a projektjét

  • Mi javascript keretrendszer használ sem
  • Forráskönyvtár elérési útja:   src
  • Forgalmazási könyvtár elérési útja: diszt
  • Build parancs:   npm run-script build
  • Start parancs: npm run-script start

A közös projekt inicializálása

A következő lépéseken keresztül létrehoz egy függvényt. Ezt a funkciót olyan függőségek tárolására használják, amelyeket később az AWS Lambda Functions ökoszisztéma körüli funkciókba injektálnak.

Az alábbi parancs futtatása a Lambda réteg létrehozásának lépései felé mutat:

amplify function add

Válassza ki a lehetőségeket a félkövér szöveg szerintopciókat. Figyelje meg, hogy a kompatibilis futásidőkhöz a futásidő kiválasztásához meg kell nyomnia a billentyűzeten lévő szóköz billentyűt.

  • Válassza ki a hozzáadni kívánt képességet: Lambda réteg (megosztott kód és erőforrás a függvények között)
  • Adjon nevet a Lambda rétegének: apmAgentLayer
  • Válasszon ki legfeljebb 2 kompatibilis futást: NodeJS
  • A jelenlegi AWS-fiók mindig hozzáférhet ehhez a réteghez.
  • Opcionálisan konfigurálja, hogy ki férhet hozzá ehhez a réteghez. (Hit átugrani) Nyilvános

Created Lambda réteg mappák és fájlok létrehozva: amplify / backend / function / apmAgentLayer

Egyedi modulok telepítése

Ha a Réteg elérési útjára lép , az amplify / backend / function / apmAgentLayer lehet, hogy látott néhány mappát, amelyet az Amplify készített. Mivel egy Node.js projekten dolgozunk, az összes csomópont modult telepíteni kell a lib / nodejs fájlra .

Készítettem egy példát az Application Performance Monitor-ról, hogy bemutassam, hogyan használhatjuk a Node.js teljesítmény-kampóit a kérések közötti időtartam mérésére és a HTTP-válaszolvasók megváltoztatására. Ez segít megmutatni a megosztott kód megvalósításának és a Node.js viselkedésének kiterjesztésének egyéb lehetőségeit.

Az első lépés a megosztott függőségek telepítése és feltöltése az AWS-be. Menjen a CLI amplify / backend / function / apmAgentLayer / lib / nodejs által generált elérési útra , majd telepítse a csomagot a következő parancsokkal:

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

Telepítés

A csomag telepítése után telepítheti és később ellenőrizheti az AWS konzolon keresztül. Vegye figyelembe, hogy még nem adtunk hozzá kódot. A cél ezen a ponton csak a könyvtár előkészítése további felhasználásra.

Futtassa a következő parancsot a Lambda réteg feltöltéséhez:

amplify push

A Web API függvény létrehozása

Ezen a ponton már készen áll egy helyi Amplify infrastruktúra projekt, amely készen áll az API Routes, Routines hozzáadására, az AWS szolgáltatásokkal való összekapcsolásra stb.

Az alábbi parancs hasznos lesz ExpressJS-alapú projekt és AWS Lambda függvény létrehozásához. Összekapcsolja a majdnem létrehozott AWS Lambda Layer funkciót és feltárja az AWS API Gateway-en.

amplify api add

Válassza ki a lehetőségeket a félkövér szöveg szerintlent:

  • Kérjük, válasszon az alábbiakban felsorolt ​​szolgáltatások közül: REST
  • Adjon meg egy barátságos nevet az erőforrásának, amelyet címkeként használhat ehhez a kategóriához a projektben: myApi
  • Adjon meg egy elérési utat (pl. / Book / {isbn}): / szia
  • Válasszon egy Lambda forrást Hozzon létre egy új Lambda funkciót
  • Adjon meg egy barátságos nevet az erőforrásának, amelyet címkeként használhat ehhez a kategóriához a projektben: myApi
  • Adja meg az AWS Lambda függvény nevét: myApi
  • Válassza ki a használni kívánt futásidőt: NodeJS
  • Válassza ki a használni kívánt függvénysablont : Serverless ExpressJS függvény (Integráció az API-átjáróval)
  • Hozzá szeretne férni a projekt egyéb erőforrásaihoz a Lambda funkcióból? Nem
  • Ismétlődő ütemezésben szeretné használni ezt a funkciót? Nem
  • Konfigurálni szeretné a Lambda rétegeket ehhez a funkcióhoz? Igen
  • Adjon meg meglévő rétegeket vagy válasszon rétegeket a projektben, hogy hozzáférhessen ebből a funkcióból (pick

    5-ig): apmAgentLayer

  • Válassza ki az apmAgentLayer verzióját: 1
  • Most szerkeszteni szeretné a helyi lambda függvényt? Igen

Mivel a VSCode-ot használom, az utolsó varázsló válasza megnyitja a app.jsfájlt a szerkesztőmön, így szerkeszthetem. Más függőségek hozzáadása nélkül importáljuk a Lambda Layer megosztott modult a fájl első sorába az alábbi kód használatával:

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

A fájl szerkesztése után lépjen a terminálra, és nyomja meg az Enter billentyűt, és válassza az alább félkövéren feltüntetett válaszokat :

  • Korlátozza API-hozzáférés Nem
  • Szeretne hozzáadni egy másik utat? Nem

Az írás idején nem tudjuk helyileg tesztelni a Lambda rétegeket az AWS Amplify segítségével. De telepíteni fogja a projektjét az AWS-re, és a gyártás során tesztelni fogjafuttassa amplify pushújra a parancsot.

Figyelje meg, hogy kinyomtatja, hogy mely erőforrásokat kell frissíteni, és mely erőforrásokat kell létrehozni ezen a telepítésen. Az összes művelet végrehajtása eltart egy ideig, és a kimenetének az alábbiak szerint kell kinéznie:

Amint azt a terminál megmutatta, API-jának most van egy URL-je. A létrehozott URL: //nlq7x7onj0.execute-api.us-east-1.amazonaws.com/dev, és az útvonal lesz hi, amelyet az előző lépésekben hoztunk létre.

Indítsunk el egy kérést a cURL (vagy akár a böngésző) segítségével, hogy ellenőrizzük, mi történik:

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

Futtatása után az API-nak JSON-válaszsal kell válaszolnia a következő tartalommal {"success":"get call succeed!","url":"/hi"}. A Lambda Réteget injektálták, és meg kellett volna változtatnia a válasz fejlécét, ehhez hozzáadva a x-instrumented-byés a x-request-idkulcsokat:

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

Ha kíváncsi arra, hogy az Amplify mit sikerült kezelnie az oktatóanyag alatt, futtassa amplify consoleés böngésszen az irányítópulton. Az enyémet alább láthatja:

Takarítás

Az Amplify által létrehozott összes erőforrás eltávolításához futtassa amplify delete.

Következtetés

Nagyon sokféleképpen javíthatja tapasztalatait a kiszolgáló nélküli alkalmazások terén. Az Amplify Framework segíthet a következő generációs alkalmazások létrehozásában és az ismétlődő feladatok elkerülésében.

Ellenőrizze a hivatalos dokumentumokat, hogy más lehetőségeket kínáljon hatékony API-k létrehozására olyan élvonalbeli technológiák, mint a GraphQL és az AWS AppSync segítségével. Biztos vagyok benne, hogy ez sokat segít Önnek!

Köszönöm, hogy elolvasta

Nagyon értékelem az együtt töltött időt. Remélem, hogy ez a tartalom nem csak szöveg lesz. Remélem, jobb gondolkodóvá és programozóvá is vált. Kövessen a Twitteren, és nézze meg a személyes blogomat, ahol minden értékes tartalmat megosztok.

Szia! ?