Hohe Skalierbarkeit, weitreichende Ressourcen

Serverlose Webapplikationen mit AWS
Keine Kommentare

Serverless Computing ist eine aktuelle Entwicklung im Cloud-Computing, bei der die meisten Anbieter mittlerweile auch Function as a Service im Programm haben. Geboten werden skalierbare Webapplikationen, bei denen man sich nicht um Ressourcen kümmern muss. Dieser Artikel ist eine Einführung in AWS Lambda von Amazon Web Services. Das händische Deployment von Lambdafunktionen ist anspruchsvoll, aber Frameworks wie Chalice für Python-Entwickler nehmen dem Anwender die meisten Handgriffe ab.

Serverless Computing beziehungsweise Function as a Service (FaaS) ist ein aktueller Trend beim Cloud-Computing. Es handelt sich dabei um spezielle Dienste, die auf einer noch höheren Abstraktionsebene angesiedelt sind als die Bereitstellung von virtuellen Maschinen (Infrastructure as a Service) und Anwendungsservern (Platform as a Service). Dafür stellen die Cloud-Anbieter ihre Infrastruktur so zur Verfügung, dass Anwender dort eigenen Programmcode zur Ausführung bringen können, ohne sich auch nur im Geringsten um die Einrichtung und Verwaltung von Ressourcen kümmern zu müssen: Der Code läuft sprichwörtlich irgendwo in der Cloud. Serverless-Computing-Dienste regeln vollkommen automatisch den für die Ausführung einer Applikation notwendigen Umgang mit virtuellen Maschinen, Betriebssysteminstallationen und Containern sowie Angelegenheiten wie Verfügbarkeit, Skalierung und Sicherheit.

Kosten für den Service fallen dabei nur bei tatsächlicher Ausführung der Applikation an, die reine Bereithaltung des Codes in der Cloud bleibt dagegen kostenfrei. Für den Benutzer bringt das eine Reihe von Vorteilen, es gibt völlige Unabhängigkeit, sogar von virtualisierter Hardware. Eine komplexe Provisionierung ist nicht nötig und eine fehlerhafte oder mangelhafte Konfiguration weitestgehend ausgeschlossen. Außerdem sprechen für diese Angebote eine lineare Skalierung, um auch auf globaler Ebene operieren zu können, sowie geringe Kosten für Infrastruktur und Administration. Dass dem Benutzer die Kontrolle der zugrunde liegenden Hardware vollkommen entzogen ist, kann sich für bestimmte Anwendungsprofile allerdings auch als Nachteil erweisen. So gibt es beispielsweise nur geringen Einfluss auf gelegentliche Latenzen. Die Entwicklung rein auf Grundlage der Angebote eines bestimmten Cloud-Anbieters birgt außerdem die Gefahr des Vendor Lock-ins, vor allem, wenn über FaaS hinaus weitere Services wie Datenspeicherdienste einbezogen werden. Trotzdem handelt es sich bei diesen Diensten um nützliche Einrichtungen, um Code im Internet unkompliziert zur Ausführung zu bringen. Zudem gibt es für die Softwareentwicklung attraktive Nebeneffekte wie Rapid Prototyping und verkürzte Bereitstellungszyklen. Für eine Reihe von Anwendungsgebieten wie zum Beispiel Data Pipelines, oder wenn für eine bestimmte Applikation kurzfristig massive Kapazitäten benötigt werden, ist Serverless Computing nahezu alternativlos.

AWS Lambda

Im Fokus dieses Artikels steht AWS Lambda von Amazon Web Services, aber auch andere Anbieter haben vergleichbare Services im Angebot, zum Beispiel Microsoft Azure Functions, Google Cloud Functions und IBM Bluemix OpenWhisk. AWS Lambda (wie die anderen Angebote auch) integriert sich nahtlos in das jeweilige Cloud-Ökosystem und stellt damit viele neue Möglichkeiten für Webapplikationen zur Verfügung. Ein einfaches Anwendungsbeispiel soll hier demonstrieren, wie dieser Service konkret eingesetzt werden kann. Dafür werden zwei Lambdafunktionen aufgesetzt: Die eine Funktion wendet die Prominentenerkennungsfunktion des auf Deep Learning basierenden Bild- und Videoanalysediensts Amazon Rekognition in einem Datei-Bucket hochgeladener Bilder an und speichert die Ergebnisse in einer einfachen Datenbank, die der Service DynamoDB bereitstellt. Die andere Funktion wird mit dem Lambdaframework Chalice aufgesetzt und gibt als Microservice auf Anfrage aus den Netz die bisherigen Analyseergebnisse aus dieser Datenbank aus. Die Beispiele sind in Python geschrieben (Lambda unterstützt zurzeit Python 2.7 und 3.6), aber die wesentlichen Punkte gelten genauso auch für Anwender einer der anderen von Lambda bisher unterstützten Sprachen (JavaScript/Node.js 4.3 und 6.10, Java 8, C#, und neuerdings auch Google Go). Für die Interaktion mit AWS dient hier statt der Weboberfläche (Abb. 1) das offizielle Kommandozeilenwerkzeug aws, das als Paket Bestandteil einiger Linux-Distributionen ist oder aus dem Python Package Index (PyPI) bezogen werden kann. Bevor ein AWSService wie Lambda genutzt wird und dort Code eingespielt und ausgelöst werden kann, muss der Anwender allerdings zunächst ein AWS-Konto und einen Benutzer mit geeigneten Zugriffsrechten einrichten.

Abb. 1: Die Weboberfläche von AWS mit den verfügbaren Services

Abb. 1: Die Weboberfläche von AWS mit den verfügbaren Services

Benutzer einrichten

Um für AWS ein Benutzerkonto einzurichten, gehen Sie auf die Amazon-Website und klicken dort den Button Create a Free Account. Sie werden dann auf die Seite Create an AWS account gelenkt. Geben Sie dort Ihre E-Mail-Adresse, einen gewünschten Benutzernamen und ein Kennwort ein und folgen Sie den Anweisungen. Die Kontoeinrichtung ist kostenfrei, und neue Benutzer bekommen im Rahmen des „Free Tier“-Plans für die Dauer eines Jahres eine Reihe von grundlegenden Services (inklusive Lambda und Rekognition) in einem bestimmten Umfang kostenlos zur Verfügung gestellt. Ist die Anmeldeprozedur abgeschlossen, können Sie sich auf der Managementkonsole einloggen und AWS verwenden. Der neue Benutzer hat Root-Status und damit volle Rechte und unbeschränkten Zugriff auf alle Services. Es empfiehlt sich daher, sich für Projekte einen weiteren untergeordneten Benutzer einzurichten und ihn nur mit bestimmten benötigten Rechten auszustatten. Das erledigen Sie mit dem Identity and Access Management (IAM), zu finden auf der Startseite unter der Überschrift Security, Identity & Compliance. Wählen Sie dort den Menüpunkt User und legen mit Add User einen neuen Benutzer an. Dafür wird zunächst der gewünschte Benutzername abgefragt. Als Authentifizierungsmethode können Sie auswählen, ob ein geheimer Schlüssel und/oder ein Kennwort generiert werden soll. Für den Zugriff mittels des CLI-Werkzeugs benötigen Sie einen solchen Schlüssel. Zusätzlich ein Kennwort für die Weboberfläche zu haben, kann aber auch nicht schaden.

Als nächster Punkt der Benutzereinrichtung erscheint zunächst aber die Seite für die Rechtevergabe. Wählen Sie Attach Existing Policies Directly , suchen Sie dann die Rechteschemata (Policy) AWSLambdaFullAccess, IAMFullAccess und wählen sie aus. Auf der nächsten Seite können Sie den neuen Benutzer bestätigen und erhalten dann den etwas längeren Secret Access Key mit der zugehörigen Access Key ID. Legen Sie sich diese Log-in-Daten (Credentials) direkt irgendwo ab, denn der geheime Schlüssel lässt sich sinnvollerweise nachträglich nicht mehr anzeigen, und ermitteln Sie auf dem Dashboard auch gleich die zwölfstellige ID ihres AWS-Kontos. Initialisieren Sie dann auf Ihrem Arbeitsrechner mit aws con gure das Konsolenwerkzeug, anschließend werden dann zunächst die Schlüssel-ID und der geheime Schlüssel abgefragt. Bei der Frage nach der gewünschten AWS-Region geben Sie eu-west-1 an, das ist die AWS-Station in Irland (in Frankfurt eigentlich eu-central-1, aber die Rekognition war bei Abfassung dieses Artikels noch nicht verfügbar). Als Rückmeldeformat kann json eingegeben werden. Als kleinen Funktionstest können Sie dann direkt aws lambda list-functions und danach aws iam list-users auslösen. Wenn eine noch leere Liste mit installierten Funktionen und die Daten des neuen Benutzers zurückgegeben werden, sollte das Deployment des Beispiels in Listing 1 funktionieren.

import urllib
import boto3

s3 = boto3.client('s3')
rekognition = boto3.client('rekognition')

def detect_celebs(bucket, key):
  response = rekognition.recognize_celebrities(Image={'S3Object'{'Bucket':bucket,'Name':key}})
  celebs = [celeb['Name'] for celeb in response['CelebrityFaces']]
  return celebs

def lambda_handler(event, context):
  bucket = event['Records'][0]['s3']['bucket']['name']
  key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])

  waiter = s3.get_waiter('object_exists')
  waiter.wait(Bucket=bucket, Key=key)

  celebs = detect_celebs(bucket, key)
  print(celebs)

  resource = boto3.resource('dynamodb')
  table = resource.Table('Bilder')
  table.put_item(Item={'Bilddatei': key, 'Prominente': celebs})

Programmiermodell

Um den Beispielcode in Listing 1 nachzuvollziehen, ist es notwendig, sich zunächst mit dem Programmiermodell von AWS Lambda auseinanderzusetzen. Eine Lambdafunktion in AWS (mit Lambdafunktionen in Python hat das übrigens nichts zu tun) ist ein beliebig komplexer Code, der verschiedene Funktionen und Methoden enthalten und auch aus mehreren Dateien bestehen kann. Der Service ist darauf ausgelegt, dass eine Lambdafunktion immer einen ganz bestimmten Zweck innerhalb bestimmter Limits erfüllt, so gibt es zum Beispiel eine maximale Laufzeit von fünf Minuten. Die Bedingung dafür, einen Code innerhalb von Lambda ausführen zu können ist, dass er eine bestimmte Grundfunktion (Handler) beinhaltet, über die der Service die Lambdafunktion dann ausführt. Diese müssen Sie beim Deployment mit angeben. Lambda verwendet darüber hinaus das Push-Event-Modell, was bedeutet, dass eine Lambdafunktion immer durch ein externes Ereignis (Event) innerhalb von AWS ausgelöst wird, deren Quelle Sie separat festlegen müssen, nachdem Sie den Code in den Service hochgeladen haben. Lambda akzeptiert Events von einer ganzen Reihe von AWSDiensten, darunter von dem Objektspeicher S3 (Simple Storage Service), dem Datenbankservice DynamoDB, Kinesis Data Streams, AWS Code Commit, aber auch die Spracherkennung von Alexa kann Events an Lambdafunktionen absetzen. Dem Handler (im Beispiel lambda_handler) wird von dem Service beim Aufruf als erster Parameter (event) die Event Message übergeben. Es handelt es sich dabei immer um JSON-Objekte, die Sie in Ihrem Code gezielt auswerten können.

Jeder AWS-Dienst hat eine eigene Struktur für seine Event Messages, so enthalten diejenigen von S3 unter anderem an einer bestimmten Stelle immer den Namen eines dort abgelegten Objekts beziehungsweise einer Datei. Diese hat durch eine bestimmte Operation wie „ist hochgeladen worden“ das Ereignis (s3:ObjectCreate) ausgelöst. Im Code der ersten Lambdafunktion (Listing 1) ist für Event Message S3 geschrieben und dazu gedacht, auf neu hochgeladene Dateien angewendet zu werden. Aus der JSON Message wird dann zunächst der Name des Datei-Buckets (bucket) und der Dateiname des neuen Objekts (key) gewonnen. Diese beiden Variablen werden dann genutzt, um erst ein einmal einen waiter anzufordern, der darauf wartet, dass das genannte Objekt auch tatsächlich zur Verfügung steht (es kann dabei immer zu kleinen Verzögerungen kommen). Im nächsten Schritt wird die Funktion detect_celebs auf die neue Datei (das Programm erwartet JPEG- oder PNG-Images) angewendet, die die Prominentenerkennung von Rekognize (recognize_celebrities) darüber laufen lässt und die Namen der erkannten Personen in einer Liste zurückgibt. Diese Liste wird dann zusammen mit dem Dateinamen als Datenschlüssel in die DynamoDB-Datenbank Bilder geschrieben, die Sie beim Deployment separat aufsetzen müssen. S3, Rekognition und DynamoDB werden dabei mit dem offiziellen AWS SDK Boto 3 angesprochen, das in einer Python-Laufzeitumgebung von AWS Lambda immer zur Verfügung steht. Der zweite Parameter, den der Service bei Aufruf an den Handler übergibt, ist das context-Objekt, das Metainformationen über die aktuelle Laufzeitumgebung wie etwa Konfigurationsparameter enthält. Dieses Objekt bleibt in dem Codebeispiel allerdings unausgewertet.

Deployment

AWS ist wie ein großer Baukasten: Weil Sie jedem verwendeten Element eigene Ausführungsrollen mit feingranulierten Zugriffsrechten zustellen müssen, ist das Deployment des Beispielcodes nicht ganz trivial und verlangt eine gewisse Einarbeitung in AWS. Die einzelnen Operationen mit dem Kommandozeilenwerkzeug aws, die dafür notwendig sind, entnehmen Sie dem Beispiel für das Deployment der ersten Lambdafunktion (Listing 2). Zunächst muss immer eine Ausführungsrolle aufgesetzt werden, die der Lambdafunktion in einem späteren Schritt mitgegeben wird. Diese Operation fällt in den Zuständigkeitsbereich des Identitätsmanagers iam. Die Konfigurationselemente für diese Rolle – wie auch die meisten der anderen Einstellungen – sind dabei in JSON codiert. Anstatt den JSON-Text sperrig mit auf der Kommandozeile mit abzusetzen wie im Beispiel, können Sie das auch in individuelle Dateien schreiben und diese beim Aufruf von aws alternativ angeben. Der neuen Rolle (execution-role) stellen Sie dann ein bestimmtes Rechteschema (Policy) zu (execution-policy). Die Lambdafunktion benötigt Zugriff auf die Logs (die im Service CloudWatch einsehbar sind), S3, Rekognition und DynamoDB. Steht die Rolle mit geeigneten Rechten zur Verfügung, können Sie dann die Lambdafunktion aufspielen. Dafür benötigen Sie zunächst ein Deployment Package, ein einfaches Zip-Archiv, das den gesamten Programmcode der Funktion enthält. Das Beispiel verwendet außer Boto 3 und der Python-Stdlib keine weiteren Bibliotheken, also muss das Package nur die Datei mit dem Code des ersten Beispiels (recognizer.py) beinhalten (Listing 1). Die Option create-function führt das Deployment aus. Sie müssen dabei einen Namen für die Funktion bestimmen, den Dateinamen des Pakets und den ARN (Amazon Resource Name) der Ausführungsrolle (die die eigene Konto-ID enhält) angeben sowie den Handler und die gewünschte Laufzeitumgebung. Zusätzlich empfiehlt es sich für das Beispiel, das Timeout für die Lambdafunktion ein wenig höher anzusetzen (60 Sekunden) als die Standardeinstellung (3 Sekunden). Im nächsten Schritt des Beispiel-Deployments wird dann die DynamoDB-Tabelle Bilder angelegt. Da diese aber erst vorhanden sein muss, wenn die Lambdafunktion das erste Mal ausgeführt wird, spielt es eigentlich keine Rolle, an welcher Stelle des Deployment-Prozesses Sie das erledigen.

International PHP Conference

Migrating to PHP 7

by Stefan Priebsch (thePHP.cc)

A practical introduction to Kubernetes

by Robert Lemke (Flownative GmbH)

API Summit 2018

From Bad to Good – OpenID Connect/OAuth

mit Daniel Wagner (VERBUND) und Anton Kalcik (business.software.engineering)

Im nächsten Schritt legen Sie einen neuen S3-Datei-Bucket an. Dieser muss logischerweise vorhanden sein, bevor ihm die Eigenschaft als Event-Auslöser zugestellt werden kann. Zunächst benötigt er aber wiederum eine Ausführungsrolle (invocation- role) mit Zugriffsrecht auf Lambdafunktionen. Sie steht praktischerweise in einer vorgefertigten Policy (servicerole/AWS Lambda Role) zur Verfügung und muss deshalb nicht detailliert aufgesetzt, sondern kann einfach mit attach-role-policy hinzugefügt werden. Schließlich müssen Sie dem Bucket noch eine Notifikation mitgeben, sodass er ein Event auslöst, wenn eine neue Datei darin hochgeladen wird (s3:ObjCreated:Put). Die dafür benötigte Ausführungsrolle geben Sie dabei wieder als ARN an, außerdem die Lambdafunktion, die durch einen solchen Event getriggert werden soll. Das Deployment ist damit abgeschlossen. Sie können nun beliebige Fotos (im Beispiel 001.jpg) in den S3-Bucket hochladen. Die Lambdafunktion wird durch jede neue Datei automatisch aktiviert, scannt das neue Bild nach Gesichtern von Prominenten ab und speichert die Liste der erkannten Persönlichkeiten in die DynamoDBDatenbank zur weiteren Auswertung.

$ aws iam create-role --role-name execution-role --assume-role-policy-document '{
  "Version": "2012-10-17",
  "Statement": [{ "Effect": "Allow",
  "Principal": {"Service": "lambda.amazonaws.com"},
  "Action": "sts:AssumeRole" }]
}'

$ aws iam put-role-policy --role-name execution-role --policy-name execution-policy \
  --policy-document '{ "Version": "2012-10-17",
  "Statement": [{ "Effect": "Allow",
  "Action": ["logs:*", "s3:*", "rekognition:*", "dynamodb:*"],
  "Resource": "*" }]
}'

$ zip package.zip recognizer.py

$ aws lambda create-function --function-name recognize-celebs --zip-file \
  fileb://package.zip --role arn:aws:iam::<ACCOUNT-ID>:role/execution-role \
  --handler recognizer.lambda_handler --runtime python3.6 --timeout 60

$ aws dynamodb create-table --table-name Bilder \
  --key-schema '[{"AttributeName": "Bilddatei", "KeyType": "HASH"}]' \
  --attribute-definitions '[{"AttributeName": "Bilddatei", "AttributeType": "S"}]' \
  --provisioned-throughput '{"ReadCapacityUnits": 100, "WriteCapacityUnits": 100}'

$ aws iam create-role --role-name invocation-role --assume-role-policy-document '{
  "Version": "2012-10-17",
  "Statement": [{ "Effect": "Allow",
  "Principal": {"Service": "s3.amazonaws.com"},
  "Action": "sts:AssumeRole",
  "Condition": {"StringLike": {"sts:ExternalId": "arn:aws:s3:::*"}} }]
}'

$ aws iam attach-role-policy --role-name invocation-role \
    --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaRole

$ aws s3 mb s3://<BUCKETNAME>

$ aws s3api put-bucket-notification --bucket <BUCKETNAME> \
  --notification-configuration '{ "CloudFunctionConfiguration": {
  "Event": "s3:ObjectCreated:Put",
  "CloudFunction": "arn:aws:lambda:eu-west-1:<ACCOUNT-ID>:function:recognize-celebs",
  "InvocationRole": "arn:aws:iam::<ACCOUNT-ID>:role/invocation-role" }
}'

$ aws s3 cp 001.jpg s3://<BUCKETNAME>

Chalice

Rund um AWS Lambda und die FaaS-Services der anderen Anbieter sind mittlerweile einige Frameworks entstanden, die die Benutzung wesentlich vereinfachen. Da ist einmal das universelle Serverless-Framework, und eigens für AWS gibt es Apex, das eine Vielzahl von Programmiersprachen unterstützt. Speziell für Python gibt es unter anderem Zappa, das beliebige WSGI-Applikationen in AWS Lambda unterbringen kann, sowie das Mikroframework Chalice. Chalice ist mit seinem minimalistischen Ansatz an das allgemeine Webframework Flask angelehnt und automatisiert (wie die anderen Frameworks auch) bequemerweise das gesamte Deployment und auch die komplizierte Konfiguration des API Gateways. Dieser AWS-Service kommt immer ins Spiel, wenn von außerhalb der Cloud auf eine Lambdafunktion zugegriffen werden soll. Der Code der zweiten Lambdafunktion aus der Beispielapplikation (Listing 3) ist mit Chalice aufgesetzt. Genau wie es bei Flask gemacht wird, ist hier mittels des Decorators app.route eine Route für den URL des API definiert, unter dem die Funktion index ausgeführt wird. Bei Chalice ist es allerdings nicht nötig, einen Handler mit den Parametern event und context einzusetzen – das regelt Chalice alles unter der Haube. Die Geschäftslogik in diesem Beispiel ist simpel: Bei Auslösung über den API Gateway wird mit Boto 3 die von der anderen Lambdafunktion populierte DynamoDB-Datenbank Bilder abgefragt und deren Inhalt zurückgegeben.

from chalice import Chalice
import boto3

app = Chalice(app_name='dispatcher')

@app.route('/')
def index():
  resource = boto3.resource('dynamodb')
  table = resource.Table('Bilder')
  response = table.scan()
  return(response['Items'])

Ein weiteres Kommandozeilenbeispiel (Listing 4) zeigt, wie Chalice installiert wird und wie ein exemplarischer Deployment-Prozess damit vonstatten geht. Sie können Chalice genauso wie das aws-Tool einfach aus dem Package Index (PyPI) installieren und es dann für eigene Web-Apps einsetzen. Ziehen Sie auch gleich Boto 3 mit auf den Arbeitsrechner, weil Chalice das SDK lokal benötigt. Fortgeschrittene Python-Entwickler setzen Virtualenv ein. Mit der Wahl der Entwicklungsumgebung legen Sie auch gleich die Laufzeitumgebung der Applikation fest (als Default wird der Python-2-Standardinterpreter verwendet, das ist weitestgehend immer Python 2.7). Chalice installiert beim Deployment auch eine Ausführungsrolle für die Applikation, allerdings gehört der Zugriff auf DynamoDB nicht zu den standardmäßig eingerichteten Rechten. Um dieses Problem unkompliziert zu lösen, ergänzen Sie in der Konfigurationsdatei .chalice/config.json die Elemente „manage_iam_role“: false und iam_role_arn mit dem ARN der Rolle für die bereits installierte Recognizer-Funktion (execution-role), auch wenn diese mehr Rechte enthält als für diesen Daten-Dispatcher eigentlich benötigt werden. Chalice legt außerdem eine requirements.txt-Datei an, in die Sie bei eigenen Projekten verwendete Drittanbieterbibliotheken eintragen können, um sie beim Aufspielen automatisch mit das Deployment-Package eingepackt zu bekommen. Die installierte Lambdafunktion gibt dann einen als Microservice unter einem vom API Gateway angelegten URL die Ergebnisse der Prominentenerkennung von Amazon Rekognizer als JSONObjekt zurück. Eine Aufgabe, eine Lambdafunktion.

$ mkvirtualenv chalice-environment
  Running virtualenv with interpreter /usr/bin/python2
  New python executable in /home/me/.virtualenvs/chalice-environment/bin/python2
  Also creating executable in /home/me/.virtualenvs/chalice-environment/bin/python
  Installing setuptools, pkg_resources, pip, wheel...done.
(chalice-environment) $ pip install chalice boto3
  Collecting chalice
    Using cached chalice-1.1.0-py2.py3-none-any.whl
  Collecting boto3
    Using cached boto3-1.5.20-py2.py3-none-any.whl
  {...}
  Successfully installed boto3-1.5.20 botocore-1.8.34 chalice-1.1.0 click-6.6
  docutils-0.14 futures-3.2.0 jmespath-0.9.3 python-dateutil-2.6.1 s3transfer-0.1.12
  six-1.11.0 typing-3.5.3.0
(chalice-environment) $ chalice new-project dispatcher
(chalice-environment) $ ls dispatcher/
  app.py requirements.txt
{...}
(chalice-environment) $ chalice deploy
  Creating deployment package.
  Creating lambda function: dispatcher-dev
  Initiating first time deployment.
  Deploying to API Gateway stage: api
  https://ylix5i50z5.execute-api.eu-west-1.amazonaws.com/api/
(chalice-environment) $ curl https://ylix5i50z5.execute-api.eu-west-1.amazonaws.com/api/
[{"Bilddatei": "002.jpg", "Prominente": ["Leonardo DiCaprio", "Elton John"]}, {"Bilddatei": "001.jpg", "Prominente": ["Selena Gomez"]}, {"Bilddatei": "004.jpg", "Prominente": ["Kevin Bacon", "Sean Penn"]}, {"Bilddatei": "003.jpg", "Prominente": ["J. K. Simmons", "Eddie Redmayne", "Patricia Arquette", "Julianne Moore"]}]

Fazit

Trotz der Faszination, die eventuell von der eingesetzten Gesichtserkennungssoftware ausgeht, mag das kleine Beispiel wohl eher unspektakulär anmuten. Der springende Punkt ist hier aber vor allem die Skalierbarkeit, die ein großer Anbieter wie Amazon bietet, denn diese kleine Cloud-Applikation kommt locker auch mit Tausenden von hochgeladenen Bildern pro Sekunde zurecht. Dabei hebt das Beispiel einen bestimmten Aspekt von Lambda hervor, und zwar dass Sie den Dienst gut als eine Art Programmierinterface für AWS und die anderen Services einsetzen können. Python kommt auch hier wieder als Glue-Sprache gut zupass. Der Hinweis auf Lambda bei vielen Angeboten innerhalb von AWS zeigt, dass Amazon seinen FaaSDienst auch genau so platziert, nämlich als Möglichkeit für AWS-Insider, damit Backends für Amazon Rekognition und die anderen Services aufgesetzt werden können. Ein anderer Aspekt ist, dass Lambda genauso aber auch für von AWS sonst unabhängige Applikationen zur Verfügung steht und die Cloud mit ihren Vorteilen zunächst eine weitere Möglichkeit für das Hosting von Webapplikationen anbietet. Diese Dimension spielt wohl eher die Hauptrolle bei den Lambdaframeworks, die sich mit ihrem hohen Simplifizierungsgrad als Entwicklungsgrundlage für Web-Apps zunächst auch an AWS-unerfahrene Anwender richten. Wenn Sie sich aber einmal mit einer Webapplikation in die Welt von Amazon Web Services begeben haben, dann bieten sich die anderen Services schnell als Ersatz für Elemente an, die auf traditionellen Webservern mit Linux-Installation als Softwarepakete zur Verfügung stehen. Schnell findet man sich dann als AWS-Entwickler wieder.

PHP Magazin

Entwickler MagazinDieser Artikel ist im PHP Magazin erschienen. Das PHP Magazin deckt ein breites Spektrum an Themen ab, die für die erfolgreiche Webentwicklung unerlässlich sind.

Natürlich können Sie das PHP Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -