Kuidas luua serverita taustaprogramm AWS Lambda ja Node.js abil

Tutvuge funktsioonina teenusega (FaaS), juurutage demo AWS Lambda serverita arvutiplatvormil, ühendage MongoDB andmebaas teenusena serverita REST API-ga ja palju muud.

Serverita arhitektuur on pilvandmetöötluse täitmismudel, kus taustaprogrammi või serveripoolse koodi juurutamiseks kasutatakse pilveteenuse pakkujat nagu AWS, Azure või Google Cloud. Võrreldes tavapäraselt kasutatavate veebirakendustega ei pea serverita arhitektuuris arendaja hooldama servereid ega infrastruktuuri. Nad peavad maksma ainult tellimuse kolmanda osapoole teenusepakkujalt, samal ajal kui müüja vastutab serveri tagapõhiloogika toimimise eest koos mastaapsuse, usaldusväärsuse ja turvalisusega.

Serveripõhise koodi juurutamiseks on serverivaba arhitektuuri kahel viisil. Esimene neist on Backend as a Service või BaaS. Selle heaks näiteks on Firebase, mida saate sageli näha koos veebi või andmebaasi jaoks mõeldud mobiilirakenduse või kasutaja autentimisega.

See, millele me selles artiklis keskendume, kannab nime Funktsioon kui teenus või FaaS. FaaS-i korral käivitatakse serveri kood konteinerites, mida tavaliselt käivitavad tavalised sündmused, näiteks kliendi HTTP-päringud, andmebaasi toimingud, failide üleslaadimine, ajastatud sündmused ja nii edasi. Käivitatud ja käivitatava pilveteenuse pakkuja kood on funktsiooni vormis.

FaaS-is kasutatakse neid funktsioone modulaarselt. Igale toimingule vastab üks funktsioon, välistades seega ülejäänud koodi ja aja, mis kulub katlamaja koodi kirjutamisele serveri ja andmemudelite seadistamiseks. Neid modulaarseid funktsioone saab täiendavalt automaatselt ja iseseisvalt skaleerida. Nii saab rohkem aega kulutada selle rakenduse loogika kirjutamisele, millega potentsiaalne kasutaja kavatseb suhelda. Te ei pea kogu rakendust skaleerima ja selle eest maksma. Siiani on FaaSi levinumad kasutusjuhud olnud plaanipärased toimingud (või cron-tööd), automatiseerimine, veebirakendused ja vestlusprogrammid.

Levinumad FaaS-i teenuseplatvormide pakkujad on:

  • AWS Lambda
  • Google'i pilvefunktsioonid
  • Microsofti Azure'i funktsioonid
  • Apache OpenWhisk

Järgmises õpetuses loome demo, mida saaks kasutada serverivaba infrastruktuuri pakkujal nagu AWS Lambda.

Mis on AWS Lambda?

Teatud toimingute tegemiseks taustafunktsiooni loomiseks ja kasutuselevõtmiseks alustan selle artikli järgimiseks teenusepakkuja seadistamisega, mida kavatsete kasutada. AWS Lambda toetab funktsiooni täitmiseks erinevaid käitusaegu, näiteks Node.js, Java, Python, .NET Core ja Go.

Funktsioon töötab 64-bitise Amazon Linux AMI-ga konteineris. Võib-olla mõtlete: „miks ma teile seda kõike ütlen?“ Noh, serverita esmakordne kasutamine võib olla pisut üle jõu käiv ja kui sa tead, mida sa vastutasuks saad, on see alati hea! Rohkem geeky kraami on loetletud allpool.

  • Mälu: 128 MB - 3008 MB
  • Efemeerne kettaruum: 512 MB
  • Maksimaalne täitmise kestus: 300 sekundit
  • Tihendatud pakendi suurus: 50 MB
  • Tihendamata pakendi suurus: 250 MB

Täitmise kestus tähendab siin, et teie Lambda funktsioon võib töötada maksimaalselt 5 minutit. See tähendab, et see pole mõeldud pikemate protsesside käitamiseks. Kettaruum on ajutise salvestusruumi vorm. Paketi suurus viitab koodile, mis on vajalik serveri funktsiooni käivitamiseks. Node.js puhul tähendab see, et kõik serverisse imporditavad sõltuvused (näiteks node_modules / directory).

Tüüpiline lambda-funktsioon Node.js-serveris näeb välja järgmine.

Ülaltoodud süntaksis on handlerFunction meie Lambda funktsiooni nimi. Sündmuse objekt sisaldab teavet sündmuse kohta, mis käivitab lambda funktsiooni täitmisel. Kontekstiobjekt sisaldab teavet käitusaja kohta. Ülejäänud kood kirjutatakse funktsiooni Lambda sisse ja lõpuks kutsutakse tagasihelistamine koos veaobjekti ja tulemiobjektiga. Nende objektide kohta saame hiljem teada, kui neid kavatseme rakendada.

AWS Lambda seadistamine

Lambda-funktsiooni seadistamiseks AWS-is peame esmalt registreerima pääsuklahvide konto. Kasutage oma mandaati uuele kontole sisselogimiseks või registreerumiseks saidil console.amazon.com ja kui olete kinnitusprotsessi läbi teinud, ootab teid järgmine ekraan.

Funktsiooni juurutamiseks võtmete ja lubade saamiseks peame lülitama sisse identiteedi ja juurdepääsuhalduse (IAM). Seejärel minge vasakul külgribal vahekaardile Kasutajad ja klõpsake nuppu Lisa kasutaja. Täitke alloleval kujul üksikasjad ja lubage juurdepääsutüüp> Programmiline juurdepääs.

Seejärel valige järgmisel lehel käsk Manusta olemasolevad poliisid otse ja seejärel valige poliitika nimi AdministratorAccess.

Klõpsake nuppu Edasi: arvustus ja seejärel kuvatava nupul Loo kasutaja. Järgmise sammuna näete, et kasutaja loodi. Nüüd ja alles nüüd saate juurdepääsu kasutajatele juurdepääsu võtme ID-le ja salajasele juurdepääsu võtmele. See teave on unikaalne iga teie loodud kasutaja kohta.

Serverita funktsiooni loomine

Uue projekti jätkamiseks ja toestamiseks kasutame esmalt sõltuvust npm. Avage oma terminal ja installige järgmine.

Kui installitud, saame terminalis serverita raamistikku käivitada käsuga:

Või kasutage serverite jaoks kiirjärjestusi. See käsk kuvab kõik serverita raamistikuga saadaolevad käsud.

Pärast serverita sõltuvuse installimist globaalse pakendina olete valmis oma esimese funktsiooni looma. Alustamiseks peate konfigureerima oma AWS-i registreeritud kasutaja mandaadid. AWS annab teile kasutaja loomise ajal juurdepääsu võtmete allalaadimise lingi.

Võite külastada ka oma kasutajanime ja külastada turbevolitusi nagu allpool.

Nüüd konfigureerime AWS serverivaba paketiga.

Kui ülaltoodud käsk töötab edukalt, kuvatakse järgmiselt õnnestumisteade

Serverivaba npm-paketi kasutamise hea külg on see, et see sisaldab eelnevalt määratletud malle, mille saate oma projektis käsu abil luua, ja loob meile ka põhikonfiguratsiooni, mis on vajalik meie Lambda funktsiooni juurutamiseks. Alustuseks kavatsen kasutada uue kataloogi sees malli aws-nodejs.

Lipp -p loob uue kataloogi nimega aws-serverless-demo. Lipp -t kasutab eelnevalt määratletud katlaplaati. Selle tulemusel luuakse projekti kataloogi kolm uut faili.

  • Tavaline .gitignore
  • handler.js kuhu kirjutame oma käepideme funktsiooni
  • serverless.yml sisaldab konfiguratsiooni

Vaikekäitleja fail näeb välja nagu allpool.

Ülaltoodud failis on tere funktsioon, millel on kaks parameetrit: sündmus ja kontekst. moodul.exports on põhisõlmede süntaks, nagu ka ülejäänud kood. On selgelt näha, et see toetab ka ES6 funktsioone. Sündmus on objekt, mis sisaldab kõiki vajalikke päringu andmeid. Kontekstiobjekt sisaldab AWS-i konkreetseid väärtusi. Oleme seda juba varem arutanud. Muutkem seda funktsiooni vastavalt oma vajadustele ja lisage kolmas parameeter, mida nimetatakse tagasihelistamiseks. Avage fail handler.js ja muutke tervitusfunktsiooni.

Tagasihelistamisfunktsioonile tuleb kutsuda esimese argumendina tõrkereaktsioon, meie puhul on see kohe null või teise argumendina kehtiv vastus, mis praegu saadab lihtsat Hello Worldi sõnumit. Nüüd saame selle töötleja funktsiooni juurutada, kasutades allpool olevat käsku teie terminaliaknast.

Protsessi lõpuleviimine võtab mõni minut. Meie serverivaba funktsioon pakitakse .zip-faili. Võtke teade allpool asuvas teenindusteabes. See sisaldab kogu teavet, millised lõpp-punktid on saadaval, mis on meie funktsioon, kus see on kasutusele võetud ja nii edasi.

Funktsiooni käivitamiseks ja tulemuse nägemiseks võite proovida atribuuti tugineda järgmiselt.

Väljund näeb välja nagu allpool.

Vaadake serverless.yml konfiguratsiooni.

REST API serverivaba virnaga

Õpiku selles osas näitan teile, kuidas ühendada MongoDB andmebaas teenusena serverita REST API-le. Meil on vaja kolme asja, mis täidavad meie tehnoloogilise virna. Nemad on:

  • AWS Lambda
  • Node.js
  • MongoDB atlas

Kaks esimest on meil juba olemas, kõik, mida vajame, on MongoDB-i pilveandmebaasi seadistamine nimega Atlas. MongoDB Atlas on andmebaas kui teenus, mille on välja töötanud meeskond, kes töötab MongoDB taga. Lisaks tasuta / tasulise astme pakkumisele oma andmete salvestamiseks pilve, pakub MongoDB Atlas ka palju analüütikat, mis on teie rakenduse haldamiseks ja jälgimiseks hädavajalik. MongoDB Atlas pakub tasuta taset, mida me oma serverivaba virnaga kasutame.

MongoDB Atlase andmebaasi loomine

Alustame andmebaasi loomisega MongoDB atlasest. Logige saidile sisse ja looge konto, kui teil seda veel pole. Me vajame praktilise kogemuse saamiseks lihtsalt liivakasti keskkonda, nii et peame valima tasuta taseme. Kui olete oma konto seadistanud, avage oma konto leht ja lisage uus organisatsioon.

Pärast nime sisestamist jätkake nüüd ja klõpsake nuppu Loo organisatsioon.

Seejärel kuvatakse viide põhiekraanile, kus saate luua uue projekti. Sisestage projekti nimi ja jätkake.

MongoDB Atlas on vaikimisi turvatud. Enne kui kasutame selle kasutamist oma rakenduses, peate määrama õigused. Andmebaasi saab nimetada allpool asuval osutusväljal.

Nüüd saame sellesse projekti lisada oma tasuta liivakasti. Seda nimetatakse klastriks.

Lõppude lõpuks lisage lihtsalt klastri administraatori kasutaja ja andke talle tõeliselt tugev parool. Nagu näete, on selle klastri hind igavesti 0,00 dollarit. Teie klastri juurutamine võtab mõni minut. Kuni see on pooleli, alustame lõpuks mõne koodi kirjutamist.

API loomine

Järgmisena installime API loomiseks kõik vajalikud sõltuvused.

Pärast seda konfigureerime serverless.yml ja lisame muud käitleja funktsioonid, mida peame kasutusele võtma.

CREST-toimingud, mis käsitlevad REST API funktsioone, toimuvad failis handler.js. Iga sündmus sisaldab praeguse sündmuse teavet sündmuse kohta, millele tuginetakse saidil handler.js. Ülaltoodud konfiguratsioonifailis oleme määratlenud iga CRUD-toimingu koos sündmuse ja nimega. Ühtlasi pange tähele, et ülaltoodud failis sündmuste määratlemisel seostame HTTP-päringu marsruudiga, mis saab olema CRUD-i toimingu lõpp-punkt API-s, HTTP-meetodil ja lõpuks korseritel.

Tutvustan meie REST API kaudu lihtsat märkmete võtmise rakendust. Need CRUD-toimingud saavad olema selle tuum. Kuna meie API-d hakatakse hostima eemalt, peame lubama ressursside ühiskasutuse. Sellest pole vaja uut sõltuvust installida. Serverita konfiguratsioonifail toetab seda. Täpsustage sündmuste jaotises nagu korsikad: tõsi. Vaikimisi on see vale.

Käitleja funktsioonide määratlemine

Kui olete kursis Node.js ja Expressi raamistikuga, märkate, et kontrolleri funktsiooni loomisel, mis viib marsruudi äriloogikani, on vähe vahet. Sarnane lähenemisviis, mida hakkame kasutama iga käitleja funktsiooni määratlemisel.

Kontekst sisaldab kogu teavet käitleja funktsiooni kohta. Kui kaua see on töötanud, kui palju mälu see muu hulgas tarbib. Ülalpool on igal funktsioonil sama konteksti väärtus.callbackWaitsForEmptyEventLoop on seatud valele ja algab funktsiooni callToDatabase kõnega. Kontekstiobjekti omaduse callbackWaitsForEmptyEventLoop väärtus on vaikimisi seatud väärtusele true. Seda omadust kasutatakse tagasihelistamise käitumise muutmiseks.

Vaikimisi ootab tagasihelistamine, kuni sündmuse ahel on tühi, enne protsessi külmutamist ja tulemuste taastamist kutsutud funktsiooni. Kui seate selle vara väärtuseks vale, palub ta AWS Lambdal pärast tagasihelistamise kutsumist protsess külmutada, isegi kui sündmuse ahelas on sündmusi. Selle konteksti omaduse kohta saate rohkem lugeda ametlikust Lambda dokumentatsioonist.

MongoDB ühendamine

CRUD-operatsioonide reaalajas tarbimiseks peame looma ühenduse andmebaasi ja serverita funktsioonide vahel. Looge juure uus fail nimega db.js ja lisage see järgmiselt.

See on tavaline Mongoose'i ühendus, mida võisite teistes Nodejsi rakendustes näha, kui kasutate andmebaasi MongoDB. Ainus erinevus on see, et me ekspordime connectToDatabase'i, et importida see faili handler.js sees iga CRUD-toimingu jaoks. Muutke faili handler.js ja importige see ülaosas.

Järgmine samm on määratleda andmemudel, mida vajame, et asjad toimiksid. Ka Mongoose pakub seda funktsiooni. Serverivaba pinu pole selle kohta, millist ODM-i või ORM-i oma rakenduses kasutate. Looge uus fail nimega notes.model.js ja lisage järgmine tekst.

Nüüd importige see mudel faili ülaosas olevate tagasihelistamise jaoks aadressil handler.js.

Dotenvi ja keskkonnamuutujate kasutamine

Meie võtmete ja muude oluliste kaitsmine on esimene samm turvatud taustarakenduse juurde. Looge uus fail nimega variables.env. Sellesse faili lisame MONGODB ühenduse URL-i, mida oleme juba db.js-is kasutanud kui protsessi.env.DB. Keskkonnamuutujate hea külg on see, et need on rakenduse ulatuse osas globaalsed.

Meie MongoDB URL-i teadasaamiseks peame pöörduma tagasi mongodbi atlase juurde, et eelnevalt loodud klaster välja jätta. Klõpsake nuppu Ühenda ja siis kuvatakse teile leht, kus saate valida, kuidas rakendusele juurde pääseda. Klõpsake käsku Luba juurdepääs ükskõik kuhu.

Kopeerige mongodbi URL ülalt ja kleepige see faili variables.env.

Asendage kasutaja ja parooli väli oma mandaatidega. Nüüd, et see toimiks, peame kõik lisama oma handler.js-s järgmise rea.

Kasutuselevõtt

Kõik, mida peate tegema, on käivitada terminalist käsk deploy.

Kuna oleme ühendanud oma Lambda funktsiooni, küsib see käsk meile erinevaid lõpp-punkte. Iga töötleja funktsioon võetakse kasutusele eraldi REST-lõpp-punktina.

Saate oma API-t testida CURL-i käsu abil terminalist nagu allpool.

Selle artikli täieliku koodi leiate allolevast Githubi hoidlast

Tänu William Wickeyle abi eest toimetamisel.

Veebi- või mobiilirakenduse loomine?

Crowdbotics on kiireim viis rakenduse loomiseks, käivitamiseks ja mõõtmete muutmiseks.

Arendaja? Proovige Crowdbotics App Builderit, et kiiresti tellida ja juurutada mitmesuguste populaarsete raamistikega rakendusi.

Hõivatud või mittetehniline? Liituge sadade õnnelike meeskondade loomise tarkvaraga Crowdbotics peaministrite ja asjatundlike arendajatega. Ulatuse ajakava ja maksumus koos Crowdboticsi hallatava rakenduste arendamisega tasuta.