Grundlagen zu AWS SAM Serverless-Architekturen unter AWS, Teil 1

In diesem Workshop wollen wir anhand einiger Beispiele lernen, serverlose Architekturen unter AWS bereitzustellen. Den thematischen roten Faden bilden dabei verwaltete AWS-Services, die im Kontext Machine Learning, Spracherkennung, Texterkennung, Bilderkennung stehen.

Im Zentrum der meisten serverlosen Apps und Architekturen steht meist Lambda, der Event-getriebene Computing-Service von AWS. Für das Erlernen von Lambda oder erste kleinere Test-Projekte kann man durchaus die grafische Lambda-Console verwenden, wie wir es in zahlreichen Workshops bereits demonstriert haben.

Programmiert man eigene Anwendungen, werden Lambda-Funktionen in der Regel per CLI bzw. vorlagenbasiert bereitgestellt. Hierzu kann man beispielsweise AWS CloudFormation oder Terraform verwenden. Einfacher ist das Bereitstellen und vor allem das lokale Testen von Lambda-Funktionen, wenn man dazu das das Serverless Application Model (SAM) verwendet.

Was ist SAM?

Für das Paketieren, Testen und Hochladen von Lambda-Funktionen auf Amazon S3 nutzen Entwickler in der Regel das Serverless Application Model (SAM). Hierbei handelt es sich um ein Open-Source-Framework, mit dessen Hilfe Nutzer auf komfortable Weise serverlose Anwendungen auf AWS erstellen können. SAM besteht aus der SAM-Vorlagenspezifikation zum Definieren der serverlosen Anwendungen und der Befehlszeilenschnittstelle AWS SAM-CLI. Diese dient zum Entwickeln, (lokalen) Testen Bereitstellen von serverlosen Anwendungen.

Das primäre Ziel des Einsatzes von SAM zum Erstellen von serverlosen Anwendungen besteht darin, eine AWS SAM-Vorlagendatei zu erstellen, die die Architektur der serverlosen Anwendung darstellt. Eine solche AWS SAM-Vorlagendatei orientiert sich eng an AWS CloudFormation, d. h. es bietet eine Kurzsyntax zum Ausdrücken von Funktionen, APIsDatenbanken und Ereignisquellenzuordnungen. Mit nur wenigen Zeilen pro Ressource lassen sich damit die gewünschten Anwendungen definieren und mit YAML modellieren. Im Verlauf der Bereitstellung wandelt SAM die SAM-Syntax in CloudFormation-Syntax um und erweitert sie derart, dass Nutzer letztlich schneller serverlose Anwendungen erstellen können.

Theoretisch lassen sich Lambda-Funktionen auch in CloudFormation beschreiben. Allerdings entspricht eine ebenfalls in YAML- oder JSON erstellte SAM-Konfigurationsdatei exakt den Open-Source-Spezifikation für das serverlose AWS-Anwendungsmodell, welches im Gegensatz zu CloudFormation ausschließlich auf serverlose Anwendungen spezialisiert ist. Mit Hilfe einer solchen Vorlage deklariert der Nutzer schließlich sämtliche (serverlosen) AWS-Ressourcen, aus denen seine serverlose Anwendung besteht.

SAM CLI installieren

Bevor man SAM einsetzen kann, muss die SAM-Kommandozeilen-Schnittstelle installiert werden. Die unter Apache 2 lizenzierte AWS SAM CLI steht auf Github zum Herunterladen zur Verfügung. Die Installation der SAM-CLI setzt Docker voraus und kann wahlweise über den Paketmanager „Homebrew“ oder „pip install“ erfolgen. Der erste Schritt besteht also im Installieren von Docker, das für das lokale Testen von Lambda-Funktionen eine wichtige Rolle spielt. Wir verwenden im Verlauf des gesamten Workshops Amazon Linux, der Einfachheit halber auf Basis einer EC2-Instanz.

Aus Sicherheitsgründen verfügt die EC2-Instanz, die in diesem Beispiel als Kommando-Host dient, nur über eine private IP-Adresse und steht in einem komplett privaten Subnetz in einer Virtual Private Cloud (VPC) zur Verfügung. Die Console-Verbindung stellen wir via „doppeltes“ SSH mittels Public Key und einem Jump-Host eher. Interessierte User können Amazon Linux auch als virtuelle Maschine für VMware und Hyper-V, als Docker-Image vom Docker Hub oder zur Installation auf einem physischen Host herunterladen. Das Installieren von Docker unter Amazon Linux 2 erfolgt dann einfach mit:

sudo yum update -y
sudo yum install -y docker
sudo service docker start
sudo usermod -a -G docker ec2-user

Bei der Gelegenheit kann/sollte man auch gleich git und die üblichen Entwickler-Tools bereitstellen:

sudo yum install –y git
sudo yum –y groupinstall „Development Tools“

SAM-CLI via Homebrew installieren

Für das eigentliche Installieren der SAM-CLI ist zwingend der Linux-Paketmanager Homebrew erforderlich. Dessen Installation erledigen wir mit …

sh -c „$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)“

Installieren von SAM via Homebrew

Jetzt sollte es möglich sein, die AWS SAM-CLI mit Homebrew zu installieren. Dazu fügt man zunächst ein tap (im Sinne von Zapfhahn) von GitHub hinzu:

brew tap aws/tap

Damit kann die SAM-CLI wie folgt installiert werden:

brew install aws-sam-cli

Installieren der SAM-CLI

Ob die Installation erfolgreich war lässt sich verifizieren, indem man prüft, ob der Pfad …

/home/linuxbrew/.linuxbrew/bin/sam

… existiert. Damit sollte es jetzt möglich sein, sam über die Befehlszeile aufzurufen. Folgendes Kommando gibt die aktuelle Version aus:

sam –version

Alternativ lässt sich die SAM-CLI auch via „pip-Install“ installieren. Voraussetzung ist, dass Python in Version 2.7 oder 3.6 installiert ist, was sich durch Eingabe von …

python –version

verifizieren lässt. Ob pip installiert ist, lässt sich ebenso mit …

pip –-version

… in Erfahrung bringen. Ist das der Fall lässt sich die AWS-CLI dann mit …

pip install –user aws-sam-cli

… installieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.