Sådan bygges let kraftfulde bagenden med Serverless

Bygning af en billedprocessor på AWS Lambda

Mød Jeff Barr på AWS re: Invent

Jeg begyndte at arbejde som softwareudvikler på fuld tid i 2012. Du bygger det, du kører, det var en kerneværdi af vores lille team. Men jeg vidste intet om servere. Jeg var snart nødt til at lære om undernet, belastningsbalancere, databaseklynger og mere for at understøtte koden, jeg skrev. For mig er det sjovt at opbygge software, der løser problemer, at administrere servere ikke.

I begyndelsen af ​​2016 deltog jeg i et AWS-møde. Ved dette møde talte Sam Kroonenburg om, hvordan han byggede A Cloud Guru med en serverløs arkitektur på AWS. Det blæste mig væk. Ideen om at bruge AWS Lambda til at bygge webapps uden at styre eller skalere servere fik mig tilsluttet.

Siden da har jeg dedikeret min fritid til at lære og blogge om Serverless. Seks måneder efter det møde tilbød Sam mig et job, og jeg bygger nu serverløse systemer på fuld tid for A Cloud Guru.

At lære om Serverless har haft en stor indflydelse på den måde, jeg bygger software på. Serverløs fik meget fart og modenhed i 2016. Måske så du på det sidste år, men prøvede det ikke, eller måske har du aldrig hørt om det. Uanset hvad der har været, har der aldrig været et bedre tidspunkt at komme i gang.

Hvad er (og ikke) serverløs?

Der er stadig en masse debat om, hvad der er Serverløst. Lige nu afhænger svaret af, hvem du spørger. Der er to spørgsmål, hvad er et serverløst produkt og hvad er en serverløs arkitektur.

Et serverløst produkt administreres fuldt ud med granuleret skalering og granulær fakturering. Produkter inkluderer, men er ikke begrænset til:

  • Beregn: AWS Lambda, Azure-funktioner og WebTask.
  • Opbevaring: S3, DynamoDB og Firebase
  • Godkendelse: Cognito, Auth0
  • Søgning: Algolia

Bemærk, at jeg ikke inkluderede nogen Plata as a Service (PaaS) -produkter som Amazon RDS, Heroku eller Google App Engine. For disse tjenester betaler du pr. Time og skala ved at tilføje eller fjerne underliggende servere. Du behøver muligvis ikke at administrere servere, men du skal stadig tænke på dem.

Så hvad er en serverløs arkitektur? Jeg definerer en serverløs arkitektur som:

Et begivenhedsstyret system, der bruger FaaS og andre fuldt styrede tjenester til logik og vedholdenhed.

Hvis du stadig skraber dit hoved, skal du ikke bekymre dig. Dette giver mere mening, når du ser et eksempel.

Kom godt i gang med Serverløs

Den bedste måde at lære er at øve. Lad os foregive, at en klient har bedt mig om at opfinde anonymiserede ansigter på billeder.

I stedet for at sløre et ansigt, ønsker min klient at erstatte hvert ansigt med en emoji. Emoji'erne skal afspejle det ansigts følelser.

For at kunne levere denne service skal jeg:

  1. Tillad min klient at uploade billeder
  2. Registrer ansigterne i hvert billede
  3. Bestem følelsen af ​​hvert ansigt
  4. Udskift hvert ansigt med en emoji
  5. Gem det redigerede billede

I stedet for at bygge det hele selv, vil jeg bruge en serverløs arkitektur på AWS.

Serverløse arkitekturer

Der er tre tjenester, jeg har brug for for at udvikle dette system.

  • Amazon S3: skalerbar objektbaseret fillagring
  • AWS Lambda: serverløs beregning
  • Amazon Rekognition: billedanalyse

Ved hjælp af disse tjenester udviklede jeg følgende arkitektur.

En serverløs arkitektur

Lad os gå tilbage til definitionen af ​​en serverløs arkitektur.

Et begivenhedsstyret system, der bruger FaaS og andre fuldt styrede tjenester til logik og vedholdenhed.

Arkitekturen, jeg har designet, passer til denne definition.

  1. Når en bruger uploader en fil, produceres en ObjectCreated-begivenhed, og en Lambda-funktion aktiveres.
  2. Lambda-funktionen kalder Amazon Rekognition for at registrere ansigter og følelser for hvert ansigt i det uploadede billede.
  3. Lambda-funktionen behandler billedet og fortsætter billedet i Amazon S3

Enkelheden med dette design er, hvad der gør Serverløs overbevisende.

Hvilke sprog og værktøjer kan jeg bruge

Hvis du selv vil bygge dette system, skal du oprette infrastrukturen og koden.

For at udvikle koden kan du bruge Node.js, Python, Java eller C #. Der er en AWS SDK for hvert af disse sprog. Hvis dit sprog mangler, skal du se efter, at sprogstøtte vokser i løbet af 2017.

For at oprette infrastrukturen er der et par muligheder. Den første mulighed er at bruge AWS-konsollen. Dette er en god måde at starte, mens du lærer. Men dette anbefales ikke til produktionstjenester. Den anden mulighed er at udvikle din infrastruktur som kode. To gode værktøjer til dette er CloudFormation eller Terraform.

For at forenkle din oplevelse anbefaler jeg at bruge et værktøj, der hjælper dig med at distribuere din infrastruktur og din kode. Serverless Framework er det værktøj, som jeg anbefaler at bruge. Det er et open source-projekt med et stort samfund af bidragydere (inklusive mig). Andre alternativer inkluderer Apex, Claudia, Sparta og mere.

Vis mig koden

Du har set arkitekturen, lad os se på nogle kode. Jeg vil bruge Serverless Framework og NodeJs.

Det første trin er at definere infrastrukturen vha. Serverless Framework. For at gøre dette oprettede jeg en ny tjeneste.

serverløs oprette - eksempler på aws-nodejs - path emoticon-facewap

Infrastruktur

Dette opretter en mappe, der indeholder en konfigurationsfil, der hedder serverless.yml. Funktionerne og infrastrukturen til min service er defineret her.

Denne konfiguration skaber min facewap Lambda-funktion og S3-spand. Lambda-funktionen aktiveres, når der oprettes et objekt i uploads / mappen.

Kode

Hver Lambda-funktion har en handler, der fungerer som indgangspunktet. Jeg indstiller behandleren til min Lambda-funktion til src / faceswap.handler i serverless.yml. Dette er en kombination af filstien src / faceswap.js og den funktion, der skal påberåbes i den filhåndterer.

Hver handler-funktion har tre parametre:

module.exports.handler = (begivenhed, kontekst, tilbagekald) => {
   ...
   
   // Brug tilbagekald () og returner oplysninger til den, der ringer.
}
  • Begivenhed: Data vedrørende begivenheden. I dette tilfælde vil den indeholde oplysninger om den fil, der blev oprettet i S3
  • Kontekst: Lambda runtime information
  • Tilbagekald: En normal tilbagekald til noden, som du kan bruge til at returnere en fejl eller et resultat.

Til mit projekt skal Lambda-funktionen udføre tre opgaver.

  1. Henter billeder fra S3-begivenheden
  2. Ring til Rekognition API
  3. Behandl billederne, og gem resultaterne.

Du kan se koden, der kalder Amazon Rekognition og behandler billederne på GitHub.

Det sidste trin er at implementere projektet og teste det. For at implementere projektet kørte jeg følgende kommando.

sls implementere - scenen dit_stage_navn

Derefter uploadede jeg billeder fra Pexels til S3 og kontrollerede resultaterne.

Fotos fra Pexels

Dette var et rigtig sjovt projekt at bygge. At opbygge et projektprojekt som dette er den bedste måde at lære. Det vil hjælpe dig med at forstå begivenhedsdrevne arkitekturer og hvordan man opretter serverløse systemer.

Hvor kan jeg lære mere?

Der er masser af gode ressourcer til rådighed for dig at lære mere om Serverløs.

  • Blogs: Serverløs zone, Serverløs ramme, En Cloud Guru-blog
  • Bøger: Serverløse arkitekturer på AWS, AWS Lambda i aktion
  • Diskussioner: Serverless Forum, Reddit
  • Videoer: ServerlessConf-præsentationer, Serverless Framework
  • Konference: Austin ServerlessConf
  • Slack: serverløst forum
  • Meetup-grupper: Tjek denne liste, eller søg meetup.com
  • Kuraterede ressourcer: Awesome Serverless, Serverless Resources

Jeg håber, at indlægget har inspireret dig til at se på Serverless. Der er mange gode brugssager at prøve. Et HTTP API, Chatbot eller Alexa Skill er blot et par projekter man kan prøve.

Hvis du har spørgsmål om dette projekt eller Serverløst generelt, kan du kontakte mig på Medium eller Twitter. Jeg kører et værksted på ServerlessConf Austin, hvis du vil møde mig personligt.

Hacker Noon er, hvordan hackere starter deres eftermiddage. Vi er en del af @AMI-familien. Vi accepterer nu indsendelser og er glade for at diskutere muligheder for reklame og sponsorering.
Hvis du nød denne historie, anbefaler vi at læse vores seneste techhistorier og tendenserende techhistorier. Indtil næste gang, tag ikke verdens realiteter for givet!