AWS Lambda
Serverless, event-driven compute service
27.03.2017, AOE Developer Weekly, Julian Kleinhans
Julian Kleinhans
Software Architect @ AOE GmbH
@kj187
What is AWS Lambda
Alternatives
• Azure Functions (Microsoft)
• OpenWhisk (IBM)
• Google Cloud Functions (beta)
Serverless compute service that runs your
code in response to events Introduced by Amazon in
November 2014
First major provider
What means serverless
Serverless
• No infrastructure to manage
• Upload your code
• Lambda handles Capacity, Scaling, Monitoring, Logging, Security patching ...
Events
Event Sources (Event sources that trigger AWS Lambda)
• Amazon S3
• Amazon DynamoDb
• Amazon Kinesis
• Amazon API Gateway (REST API)
• On Demand via SDK
• ...
approx. 16-17 services
Workflow
Changes in data state
Request to endpoints
Changes in resource state
Event source Function Services (anything)
Change/Add data state
Trigger AWS resource
Call HTTP endpoint
Function
Function handler
NodeJS 4.3 & 6.10
Java 8
Python 2.7
C#
ZIP Package
handler.js
node_modules/*
Use Case
1
2
3
4
Store image in S3
Lambda Event Trigger
Create thumbnail
Store thumbnail in S3
Use Case
E-Mail DeskPro Middleware TargetProcess
API Gateway
Create bug ticket
Close ticket
Create ticket Webhook
Event source Lambda
DeskPro -> TargetProcess (fully automated)
Limits
Maximum execution duration per request
=> 300 seconds
Alternative S3 Storage
Lambda function deployment package size (.zip/.jar file)
=> 50 MB
100 concurrent executions
1.000 invokes per second
Increases available via AWS customer service
Costs
1 million requests and
400,000 GB-second of compute time
every month, every customer for free
$0.20 per 1 million requests
($0.0000002 per request)
Never pay for idle
Demo
DEMO
https://github.com/kj187/aws_terraform_templates
Thank you
Any Questions ?

AWS Lambda

Editor's Notes

  • #2 Ok, dann will ich euch ein bisschen über Lambda erzählen ...
  • #4 Und zwar, AWS Lambda ist ein Event basierter, zustands- und serverloser Datenverarbeitungsservice, was das genau bedeutet erkläre ich auf den nächsten Folien NEXT Lambda wurde im Nov. 2014 von Amazon auf der re:Invent Konferenz in Las Vegas announced Amazon war zu der Zeit einer der ersten großen Anbieter von serverless compute services. NEXT Um das vielleicht besser einordnen zu können hab ich mal 3 Alternativen rausgesucht
  • #5 Was genau bedeutet jetzt serverless, weil im Grunde genommen steckt doch da immer irgendwo ein Server dahinter Richtig, aber der Unterschied ist, wir müssen uns keine Gedanken über die Infrastruktur oder die Bereitstellung von Servern machen. Das macht in dem Fall alles AWS für uns! Wir laden einfach unseren Code hoch und AWS kümmert sich dann um .... NEXT Und wir ? Wir können uns komplett auf die Business Logik konzentrieren anstatt uns mit der Infrastruktur rumzuschlagen Ja das hört sich jetzt total super, aber, jetzt liegt unser Code da irgendwo rum? Und jetzt ist die Frage wie und wann wird der ausgeführt? Und genau da kommen Events ins Spiel...
  • #6 AWS bietet derzeit ca. 16-17 verschiedene Services an die Events unterstützen. Beispielsweise S3 = Simple Storage Service (PUT, UPDATE, DELETE) DynamoDB, Kinesis und ganz mächtig das API Gateway bei dem man ziemlich einfach serverlose REST APIs erstellen kann Damit kann man das ganze auch von außerhalb von AWS steuern. Auch sehr flexibel ist, das man eine Lambda auch On Demand über das AWS SDK ausführen lassen kann
  • #7 Vom Ablauf her sieht es also so aus das ein Event ausgelöst wird (über die Event Source) das kann wie gesagt durch eine Veränderungen in einem Daten Storage passieren oder durch einen Aufruf eines HTTP Endpunkts oder aber durch ein Ereignis in einem anderen AWS Service, und damit wird dann eine entsprechend konfigurierte Lambda Funktion von uns gestartet die dann irgendeine Logik abarbeitet und darauf hin zB. Daten wieder speichert/ändert, andere AWS Services triggert oder irgendein anderen HTTP Endpunkt zb aufruft
  • #8 Die Function selbst die aus unserer Business Logik besteht, das ist der Code den wir beim Lambda Service hochladen müssen damit er diese bei bestimmten Ereignissen ausführen kann. Derzeit unterstützt werden NodeJS 4.3, seit Ende letzter Woche auch 6.10, Java 8, Python und C# NEXT Wer hier ein bischen experimentel sein will NodeJS bietet child_processes an die es ermöglichen andere binaries auszuführen, das habe ich bereits mal mit Golang erfolgreich probiert. Wer hier gerne mehr zu wissen möchte kann gerne auf mich zukommen, ich hab in GitHub auch noch ein lauffähiges Beispiel rumliegen. NEXT Ok, was Lambda beim deployment von uns nun erwartet wird ist ein ZIP Package. Und wenn wir beim NodeJS Beispiel bleiben dann besteht das aus der JS Datei wo die Funktion drin steckt, und (sofern vorhanden) alle Dependencies (die kann man über eine package.json verwalten und dann per npm install installieren) Das ZIP Package muss man dann im AWS Service hochladen, das kann man manuell machen oder über Tools wie Terraform z.B
  • #9 1) Als konkretes Beispiel haben wir hier z.B eine Mobile App mit der man Fotos machen kann die dann in einem S3 Bucket gespeichert werden. Von dem Foto wollen wir ebenfalls ein Thumbnail erstellen und auch in einem S3 Bucket ablegen NEXT 2) Also erstellen wir uns eine Lambda und konfigurieren ein entsprechendes Event was ausgelöst wird wenn ein neues Foto im S3 Bucket abgelegt wird NEXT 3) Erstellen in der Funktion dann ein Thumbnail NEXT 4) Und speichern dieses wieder um S3 Storage ab Damit hätten wir dann unseren eigenen kleinen Image Microservice
  • #11 Aber auch bei AWS ist nicht alles grenzenlos, somit gibt es auch hier ein paar Limits Die wichtigsten sind dabei ... ... das die Ausführdauer pro Request maximal nur 5min betragen darf, danach wird die Execution als Fehler abgebrochen NEXT ... und das die Funktion (inkl. aller optionalen Dependencies) max. nur 50MB groß ein darf (Java packages z.B) NEXT aber hier kann man dann ganz bequem einfach auf S3 umsteigen und der Lambda sagen das das Package halt in S3 liegt NEXT 100 concurrent executuons 1000 invokes pro sekunde NEXT Kann beides beim AWS Customer service erhört werden lassen
  • #12 Nennenswert sind noch die Kosten die bei Lambda entstehen „können“ Die Betonung hier liegt auf „können“, den, AWS bietet hier PRO MONAT & pro ACCOUNT 1 Millionen Request (also Executions) und 400.000 GB/s Datenverarbeitungszeit die kostenlos sind NEXT Erst DANACH fallen kosten an und die betragen gerade mal für 1 million requests 20 cents (also $0.0000002 pro request) NEXT Das bedeutet also auch das keine Kosten entstehen wenn es keine requests (trigger Aufrufe) gibt
  • #14 Wenn ihr irgendwelche Fragen habt ? Ansonten DANKE :-)