Vad är AWS Lambda?
AWS Lambda är en serverlös bearbetningstjänst som kan exekvera kod som svar på förutbestämda händelser eller villkor och automatiskt hantera alla bearbetningsresurser som krävs för dessa processer.
Hur fungerar AWS Lambda?
AWS Lambda genererar omslag som innehåller din applikationskod. En utlösare kör sin behållare tills den når en inaktiv period, slutet på uppgiften. Behållaren blir inaktiv tills den aktiveras igen. Lambdafunktioner kan anropas av valfritt antal evenemang eller tjänster, men den vi är mest intresserade av är AWS API Gateway.
Ingen alternativ text har tillhandahållits för denna bild
API-gateway fungerar som webbserver Apache eller Nginx och ansvarar för att behandla alla API-anrop genom att skicka dem till Lambda-funktionen som händelser.
Vad är fördelen med att använda AWS Lambda och API Gateway för våra mikrotjänster?
Föreställ dig att du vill skapa en mikrotjänst som måste returnera ett enkelt svar JSON, eller analysera ett e-postmeddelande, men du vill inte ta på dig att hantera en webbserver, än mindre slösa bort värdefull tid på säkerhetsuppdateringar och komplexa konfigurationer. Bra med AWS Lambda allt detta är möjligt, i själva verket tillåter det serverlösa läget oss att vara igång på några minuter och bara koncentrera oss på aspekten av koden.
är AWS Lambda bra för alla applikationer?
Låt oss avveckla myten att Serverless är lösningen på alla problem: Först och främst måste det sägas att API Gateway designades främst som en tjänst för att hantera API:er REST och som sådan tillåter den inte exekvering av samtal med långa exekveringstider, i själva verket gör timeoutgränsen på 29 sekunder den olämplig för mer komplexa uppgifter som generering av PDF-filer eller rapporteringstjänster. Vi tänker också på att Lambdas prismodell är baserad på faktisk resursförbrukning och genomförandetid, så det är bäst att undvika att köra väldigt långa evenemang.
AWS Lambda erbjuder inbyggt stöd för Java, Go, PowerShell, Node.js, C#, Python och Ruby.
hur får jag PHP att köra i Lambda om det inte stöds?
AWS Lambda tillhandahåller ett runtime-API som låter dig använda vilket annat språk som helst. En runtime är ansvarig för att läsa händelser, miljövariabler och exekvera funktionshanterarkod. Körtiden skickar händelsedata till funktionens hanterare och skickar slutligen hanterarens svar till Lambda, som sedan bearbetas av API Gateway och tillhandahålls som ett svar till användaren.
För att skapa vår egen runtime för att ladda upp till Lambda skulle vi behöva kompilera en version av PHP i en Linux AMI-miljö med de nödvändiga biblioteken för att köra vår kod. Processen är mycket lång och ofta leder frestelsen att inkludera fler bibliotek än nödvändigt till mycket tunga körtider.
Lambdakod, inklusive körtid, får inte överskrida gränsen på 250 MB
Så finns det en enkel lösning? Visst kan vi använda Bref-kompositörsbiblioteket, som kommer att göra allt det “smutsiga” arbetet åt oss.
Som ett första steg måste vi installera Serverless och konfigurera det genom att ange AWS-åtkomstnycklarna speciellt skapade av vår AWS IAM Manager
npm install -g serverlös serverlös konfigurationsuppgifter –provider aws –key
Därefter flyttar vi till vår PHP-projektmapp och installerar Kortfattatkompositör kräver bref/bref
Om installationen lyckades återstår bara att initiera bref vendor/bin/bref init
När konfigurationen är klar kommer Bref att ha skapat en index.php-fil som innehåller koden som ska köras i Lambda och en serverlös.yml-fil som innehåller konfigurationen för att distribuera vår funktion. Vid det här laget behöver du bara köra deploy-kommandot och vänta på att Lambda ska skapas, du kommer att se på skärmen webbadressen som API Gateway har tilldelat din funktion.
Kan jag köra mitt favoritramverk på AWS Lambda?
Bref låter dig dra fördel av Laravel eller Simfony för att skapa mikrotjänster som serveras i serverlöst läge, men jag försäkrar dig att med några få knep kan du använda vilket ramverk som helst. Jag har personligen testat det med Lumen men jag har också “återuppväckt” en gammal monolitisk CodeIgniter-baserad app och fått den att fungera perfekt i Lambda.
Om din app innehåller tillgångar eller artefakter kan du använda serverlösa plugins för att ladda upp dem till S3 istället för att inkludera dem i Lambda, så kommer du inte ha utrymmesproblem.
Bra experiment till alla!