Open Source im professionellen Einsatz
Linux-Magazin 03/2017
809

Sicher abgelegt

Ist der Kontaktabzug »montage.jpg« erstellt, kopiert der Code ab Zeile 28 in Listing 2 die Datei aus dem temporären Verzeichnis in einen vorher angelegten S3-Bucket auf Amazons Cloud-Storage-System. Das Python-Modul »boto3« steht auf Lambda-Servern standardmäßig zur Verfügung und bietet allerlei Tools zur Kommunikation mit verwandten Service-Angeboten.

Die Methode »put_object()« in Zeile 32 legt die von der virtuellen Festplatte gelesene Ausgabedatei als Objekt vom Typ »image/jpeg« im Cloudspeicher ab. Von dort liefert sie der in der vorigen Ausgabe besprochene S3-Webserver an den interessierten User aus, dem der API-Aufruf nach Abschluss die zugehörige URL gesteckt hat. Damit dieser sie findet, stellt Zeile 36 eine Json-Antwort zusammen, die dem Webclient die zur Montage-Datei gehörige S3-URL mitteilt. In Zeile 41 bleibt nur noch, das temporär angelegte Verzeichnis zu löschen.

Abbildung 5: Der Lambda-Server benötigt Zugriffsrechte am S3-Bucket.

Damit das Lambda-Skript Schreibrechte an dem als »snapshot.linux-magazin.de« konfigurierten S3-Bucket erhält, muss der User Letzterem entsprechende Rechte verleihen. Abbildung 5 zeigt, dass der S3-Bucket jedem ausgewiesenen AWS-User Zugriff gewährt. Auf der anderen Seite müssen vom Lambda-Server im S3-Bucket erzeugte Dateien auch weltweit für interessierte User lesbar sein. Dies erfolgt über eine so genannte Bucket-Policy, deren Inhalt Listing 7 zeigt. Jede dort neu eingelegte Datei ist demnach für alle lesbar, also kann der am S3-Bucket hängende Webserver sie auch an anfragende Webclients ausliefern.

Listing 7

bucket-policy.json

01 {
02   "Version": "2012-10-17",
03   "Statement": [
04   {
05       "Sid": "",
06       "Effect": "Allow",
07       "Principal": "*",
08       "Action": "s3:GetObject",
09       "Resource": "arn:aws:s3:::snapshot.linux-magazin.de/*"
10   }
11   ]
12 }

Tor zur Welt

Amazon hilft beim Testen von Lambda-Funktionen, der Entwickler kann hochgeladene Skripte entweder durch das Kommandozeilen-Utilty »aws« oder auch den Test-Button der Konsole im Browser ausführen. Aber schließlich sollen User die Funktion aus dem Internet ausführen können, und dazu bietet sich Amazons API-Gateway an. Dieser ebenfalls auf der Konsole anklickbare Service legt einen Cloud-Webserver mit einem REST-API an, dessen Methoden (wie im gezeigten Beispiel »/vimo« ) es neben anderen Optionen auf User-definierte Lambda-Funktionen umleitet.

Die Verbindung zwischen Webserver und Applikation auf dem Lambda-Service erledigt AWS hinter den Kulissen, wenn der User für die Option »Integration Type« beim Anlegen der REST-Methode (zum Beispiel »GET« oder »POST« ) die Option »Lambda Function« angibt und weiter unten die Region des Datencenters und den Namen der Lambda-Funktion (etwa »vimo« ) nennt (Abbildung 6).

Abbildung 6: Das Anlegen der REST-Methode mit GET.

In unserem Fall soll der Pfad »/vimo« die »POST« -Methode verwenden und im Body des Request einen Json-Blob mit benamten Parametern (etwa »movie_url« ) führen. Setzt der Webclient wie in Abbildung 1 sichtbar den Header »Content-Type« auf »application/json« , dann fängt bereits das API-Gateway den Json-Blob ab und analysiert ihn.

Die später aufgerufene Lambda-Funktion erhält dann bereits die dekodierten Wertepaare aus den Json-Daten in einem Python-Dictionary als Funktionsparameter »event« . Im vorliegenden Fall legt der Client in Abbildung 1 die URL zum Überwachungsvideo im Json-Blob im Parameter »movie_url« ab, während die Lambda-Funktion in Listing 2 mit »event['movie_url']« darauf zugreift.

Live schaltet das REST-API erst, nachdem der User im Kontextmenü unter »API Actions« die Funktion »Deploy-API« angeklickt (Abbildung 7) und eine Produktionsumgebung (Stage) ausgewählt hat (etwa »Beta« ). Im Browser zeigt AWS dann die URL an, unter der der neue Webservice erreichbar ist.

Abbildung 7: Das Live-Schalten erfolgt über die Funktion Deploy-API.

Als Produktionsumgebung installiert ist der Einsatz von API-Tokens zu empfehlen, die den Zugang zum API regeln. Auch ein Drosseln des Ansturms (etwa auf 1000 Requests/Sekunde) ist hiermit möglich, um einer überraschenden Kostenexplosion vorzubeugen, falls der Link sich lauffeuerartig verbreitet.

Bei der Arbeit an diesem Artikel hatte ich immer ein wachsames Auge auf anfallende Kosten, doch die hielten sich im "Free Tier"-Rahmen, es fielen nur 0,01 US-Dollar an, um die während vieler Testdurchgänge aufgebrauchte Bandbreite zum Hochladen der ständig aktualisierten und verbesserten Zip-Datei mit Testcode und Libs zu decken.

Online PLUS

Im Screencast demonstriert Michael Schilli das Beispiel: http://www.linux-magazin.de/Ausgaben/2017/03/plus

Infos

  1. Listings zu diesem Artikel: http://www.linux-magazin.de/static/listings/magazin/2017/03/snapshot/
  2. Danilo Poccia, "AWS Lambda in Action": Manning 2017
  3. Michael Schilli, "Schaut auf diese Stadt": Linux-Magazin 12/16, S. 104, http://www.linux-magazin.de/Ausgaben/2016/12/Perl-Snapshot

Der Autor

Michael Schilli arbeitet als Software Engineer in der San Francisco Bay Area in Kalifornien. In seiner seit 1997 laufenden Kolumne widmet er sich Kurzprojekten in Perl und wechselnden Sprachen. Unter mailto:mschilli@perlmeister.com beantwortet er gerne Fragen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Snapshot

    Laufen Applikationen in einem Cloudsystem wie den Amazon Web Services, spart sich der Betreiber die Verwaltung und kann sich stattdessen auf das Wesentliche der App konzentrieren. Mike Schilli führt im ersten Teil des Workshops die grundlegende Einrichtung des Webservice aus.

  • AWS S3

    Daten auf AWS S3 sitzen dort nicht zwangsläufig fest. Wer sie wiederhaben will, kann sie mit ein bisschen Python-Schmiermittel auf einen Rutsch abpumpen.

  • Online-Artikel: Funktionale Programmierung in Python

    Python gilt vielen als objektorientierte Sprache, doch unterstützt es auch andere Paradigmen. Rainer Grimm demonstriert in seinem kostenlosen Online-Artikel das funktionale Programmieren in Python.

  • Perl-Snapshot

    Statt auf langweilige Überwachungsvideos zu starren, auf denen zu 90 Prozent nichts passiert, setzt Perlmeister Michael Schilli lieber die Bilderkennungssoftware Open CV ein, die automatisch den Handlungsablauf an den interessantesten Stellen extrahiert.

  • Funktionale Programmierung (2): Python funktional

    Die meisten Entwickler verbinden Python mit dem objektorientierten Programmierstil. Doch die Sprache beschreitet vermehrt auch die Pfade der funktionalen Programmierung. Dieser Artikel zeigt, was Python in Sachen Closures, List Comprehension und Funktionen höherer Ordnung zu bieten hat.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.