Blog
Erstellen einer Elixir-Laufzeit für AWS Lambda

Auf der letzten AWS Re:invent kündigte Amazon die Unterstützung für benutzerdefinierte Laufzeiten auf AWS Lambda an.
AWS bietet Unterstützung für eine ganze Reihe von Sprachen, die bereits im Lieferumfang enthalten sind. NodeJS ist die schnellste, aber nicht immer die am besten lesbare Sprache. Python können Sie von der AWS-Konsole aus bearbeiten, während Sie für Java, C# und Go Binärdateien hochladen müssen.
Seltsam ist meiner Meinung nach, dass in der Liste der unterstützten Sprachen keine funktionalen Sprachen enthalten sind1. Obwohl der Name des Dienstes etwas im Bereich der funktionalen Programmierung vermuten ließe. Die Funktionsweise einer Funktion selbst ist auch ziemlich einfach: ein Eingabeereignis wird verarbeitet und ein Ausgabeereignis wird zurückgegeben
Erstellen einer Laufzeitumgebung
Der Prozess der Erstellung einer Laufzeitumgebung ist in der AWS-Dokumentation ziemlich gut erklärt. In meinem Fall habe ich ein wenig Erfahrung gesammelt, indem ich das bash-basierte Laufzeitbeispiel implementiert habe. Dies ist eine gute Grundlage für jede benutzerdefinierte Laufzeitumgebung. Eine Runtime wird durch ein Skript namens "bootstrap" gestartet. Wenn Sie bereits ein Bash-basiertes Startskript haben, können Sie ein wenig testen, während Sie die Runtime einrichten.
elixir-lambda-blog.md#benchmarksBenchmarks
Wir alle wollen, dass es schnell ist. Ich habe keinen ausführlichen Leistungstest durchgeführt. Für eine Hello-world-Funktion, die ich eingesetzt habe, waren die Antworten ganz in Ordnung. Bis zu zwanzig ms und oft sogar nur ein paar Millisekunden. Die Kaltstartgeschwindigkeit beträgt laut AWS X-Ray etwa 1,3 Sekunden. Das ist ziemlich konstant. Ich möchte sehen, ob ich das verringern kann. An diesem Punkt steht das Erlang-Vermächtnis der Verwendung als Lambda-Sprache im Weg: Das Erlang/OTP-Ökosystem ist auf Anwendungen aufgebaut, die nie ausfallen, wie z.B. Telefonschalter. Bei Lambda haben wir die Gewissheit, dass dies nie ein langlebiger Prozess sein wird. Die Kaltstartzeiten sind allerdings immer noch mit Java kompatibel.
Abschließende Gedanken
Das Lambda-Modell ist sehr einfach. Es ist gut zu sehen, dass die Verwendung von benutzerdefinierten Laufzeiten keine (ernsthaften) Leistungseinbußen mit sich bringt. Mit den oben beschriebenen Tools ist es recht einfach, Unterstützung für eine Sprache hinzuzufügen, die heute nicht in AWS Lambda enthalten ist. Sie werden auf den Webeditor verzichten müssen, was ich aber nicht als großen Verlust empfinde, da ich meinen Code ohnehin in Git ablege. Werfen Sie einen Blick auf das Elixir Lambda Repository und probieren Sie es aus. Ich habe der Einfachheit halber Cloudformation-Vorlagen und ein Makefile hinzugefügt. Lassen Sie mich wissen, was Sie davon halten! [1] Nun, Sie könnten F#-Code mit der .Net-Laufzeitumgebung ausführen.
Verfasst von
Arjan Molenaar
Contact



