AWS Serverless Application Model (AWS SAM)
Was ist AWS Serverless Application Model?
Das AWS Serverless Application Model (AWS SAM) ist ein Open-Source-Framework, das Entwicklern bei der Erstellung und Bereitstellung serverloser Anwendungen für die AWS-Cloud unterstützt. Durch die Bereitstellung einer Vorlagenspezifikation und eines Tools für die Kommandozeile (CLI) vereinfacht und verbessert AWS SAM den Prozess der Definition und Erstellung serverloser Anwendungen.
Vorteile von AWS SAM
AWS SAM optimiert den Softwareentwicklungszyklus (SDLC) für serverlose Anwendungen. Mit seinen Vorlagen und der einfachen Bereitstellung von Ressourcen ermöglicht es Entwicklungsteams, Zeit zu sparen und schnell von der Idee zur Produktion zu gelangen. Das integrierte CLI-Tool erleichtert die Entwicklung von Anwendungen und deren Verwaltung während der Bereitstellungs- und Überwachungsphasen des SDLC. Es hilft Teams auch dabei, Anwendungen einfach und effizient zu debuggen und in höherer Qualität in der Produktion einzusetzen. Mit der Funktion SAM Accelerate können Teams auch Echtzeittests und -Debugging in der Cloud durchführen. Für eine schnelle Iteration von Cloud-nativen DevOps-Prozessen gibt es mögliche Verbindungen mit AWS Cloud Development Kit (CDK).
Die AWS-SAM-Vorlage ermöglicht es Entwicklern, Infrastrukturcode zu definieren und zu verwalten. Diese YAML-Datei enthält die AWS-SAM-Vorlagenspezifikation, die eine Kurzsyntax bereitstellt. Diese Syntax reduziert die Anzahl der Codezeilen, die zur Definition der verschiedenen Elemente und Eigenschaften (beispielsweise Ressourcen, Zuordnung der Ereignisquellen, Konfigurationen, Berechtigungen, APIs) der serverlosen Anwendung erforderlich sind. Außerdem können Entwickler AWS-SAM-Konnektoren in den Vorlagen verwenden, um Berechtigungen zwischen AWS-Ressourcen zu definieren.
AWS SAM, insbesondere seine CLI, kann zum lokalen Debuggen von AWS-Lambda-Funktionen verwendet werden, die in den Programmiersprachen Node.js, Java, Python und Go geschrieben wurden. Außerdem kann das Framework zum Erstellen von serverlosen Anwendungen verwendet werden, die eine von AWS Lambda unterstützte Laufzeit verwenden.
Auch die Integration mit anderen AWS-Diensten wie EventBridge, Step Functions oder DynamoDB Streams ist möglich. Mit CloudWatch Logs, Metrics, Alarms oder X-Ray gibt es eine native Unterstützung für Observability und Monitoring.

So funktioniert AWS SAM
AWS SAM ist Open Source und steht unter der Lizenz von Apache 2.0. Es umfasst zwei Hauptkomponenten: AWS-SAM-Vorlagen (einschließlich einer Vorlagenspezifikation) und die AWS-SAM-Befehlszeilenschnittstelle. Die Vorlagen sind eine Erweiterung der AWS-CloudFormation-Vorlagen, die speziell für serverlose Anwendungen entwickelt wurden. Entwickler können eine SAM-Vorlage verwenden, um häufig verwendete Ressourcen für eine serverlose Anwendung zu definieren, beispielsweise API-Funktionen und Datenbanktabellen. Darüber hinaus können Vorlagen als einzelner Stack verwendet werden, anstatt sie manuell separat bereitstellen und verwalten zu müssen. Die Vorlagen können auch in CloudFormation bereitstellt werden, wenn Teams Unterstützung für Infrastructure as Code (IaC) in AWS benötigen.
Die CLI ist ein Entwicklungs-Tool, mit dem Teams ihre Anwendungen erstellen, verpacken und bereitstellen können. Sie ist sehr nützlich, um neue Projekte zu initialisieren, lokale Tests und Debugging durchzuführen, die Anwendung bereitzustellen, CI/CD-Pipelines zu konfigurieren, serverlose Anwendungen in der Cloud zu überwachen und lokale Änderungen mit der Cloud zu synchronisieren, während die Entwicklung voranschreitet. Die AWS SAM CLI kann unter Linux, macOS oder Windows mit pip, dem Standardpaketmanager für Python, installiert werden.
Während der Bereitstellung erweitert AWS SAM seine Shorthand-Syntax (Kurzsyntax wird verwendet, um Funktionen, APIs, Datenbanken und Ereignisquellen-Zuordnungen mit weniger Codezeilen auszudrücken) in die Syntax von AWS CloudFormation. SAM übersetzt die Kurzsyntax automatisch in eine vollständige CloudFormation-Vorlage, welche die Ressourcen bereitstellt.
Zwei benutzerfreundliche Befehle können verwendet werden, um die Anwendung für die Bereitstellung in der AWS Cloud vorzubereiten: sam build und sam deploy. Die SAM CLI bietet auch andere Befehle, darunter die folgenden:
- sam sync -- watch synchronisiert die Anwendung und ihre lokalen Änderungen automatisch mit der Cloud für die Entwicklung und das Testen.
- sam package bündelt den Anwendungscode und die Abhängigkeiten in einem Bereitstellungspaket.
- sam pipeline init --bootstrap erstellt oder ändert Pipelines für die Bereitstellung für ein CI/CD-System.
- sam remote invoke ruft AWS-Lambda-Funktionen in der AWS-Cloud auf und testet sie.
- sam logs ruft Protokolle für Lambda-Funktionen auf, verfolgt und filtert sie.
- sam list zeigt alle bereitgestellten Ressourcen an.
Um mit AWS SAM und seinen Vorlagen und der Befehlszeilenschnittstelle zu arbeiten, müssen Entwickler zunächst zwei Schritte ausführen:
- Installieren Sie die CLI.
- Verwenden Sie den Befehl sam init, um eine vorkonfigurierte AWS-SAM-Vorlage mit Beispielanwendungscode zu generieren.
Falls Sie automatisierte Bereitstellungen bevorzugen, gibt es diese Möglichkeit über GitHub Actions, CodePipeline oder AWS Cloud Development Kit Pipelines. Bei der nativen Integration in GitHub Actions gibt es bereits vordefinierte Workflows für SAM-Projekte.

Vorlagen von AWS SAM und AWS CloudFormation
Eine AWS-SAM-Vorlage stellt die Architektur einer serverlosen Anwendung dar. Um die Entwicklung und Bereitstellung zu beschleunigen, empfiehlt AWS Entwicklern, die AWS-Ressourcen, aus denen die Anwendung besteht, in der Vorlage zu deklarieren. Diese Vorlagen entsprechen weitgehend dem Format von AWS-CloudFormation-Vorlagen, wobei die meisten Abschnitte in den AWS-SAM-Vorlagen den gleichnamigen Abschnitten der AWS-CloudFormation-Vorlagendatei entsprechen. Aus diesem Grund kann jede Ressource, die in der letzteren deklariert ist, auch in der ersteren deklariert werden.
Es gibt jedoch einige Unterschiede zwischen AWS-SAM-Vorlagen und AWS-CloudFormation-Vorlagen. AWS-SAM-Vorlagendateien erfordern die Transformationsdeklaration Abschnitt Transform), CloudFormation-Vorlagen hingegen nicht. Außerdem enthalten AWS-SAM-Vorlagen einen eindeutigen und optionalen Abschnitt Globals, der die Eigenschaften definiert, die den Funktonen und APIs einer Anwendung gemeinsam sind. Darüber hinaus kann der Abschnitt Resources in AWS-SAM-Vorlagen sowohl Ressourcen von AWS CloudFormation als auch von AWS SAM enthalten.
Einige SAM-CLI-Befehle entsprechen CloudFormation-Befehlen, zum Beispiel sam package in SAM und aws cloudformation package in CloudFormation. Die SAM CLI verfügt jedoch über einige einzigartige Funktionen, darunter Vorlagenvalidierung und lokale Tests.

AWS-SAM-Projekt
Ein AWS-SAM-Projekt enthält alle Dateien und Ordner, die erstellt werden, wenn ein Entwickler den Befehl sam init ausführt. Eine der Dateien ist die AWS-SAM-Vorlage, die erforderlich ist, um die AWS-Ressourcen und den Infrastrukturcode mithilfe einer Kurzsyntax für die zu erstellende serverlose Anwendung zu definieren. Die AWS SAM CLI wird zusammen mit dem AWS-SAM-Projekt verwendet, um die Befehle auszuführen, die zum Erstellen und Ausführen der Anwendung erforderlich sind.
AWS SAM wandelt Codezeilen in die Syntax von AWS CloudFormation um, die zur Generierung der erforderlichen Ressourcen in AWS notwendig ist. Die umgewandelte Vorlage von AWS CloudFormation enthält in der Regel mehr Codezeilen als die AWS-SAM-Vorlage, aber diese sind für die Bereitstellung der Anwendung erforderlich.
Funktionen von AWS SAM
AWS SAM ist mit einer Reihe von nativen Amazon-Cloud-Services integriert, darunter Cloud9 IDE, AWS CodeBuild, AWS CodeDeploy und AWS CodePipeline. Diese Tools arbeiten in Verbindung mit SAM und CloudFormation, um Lambda-Funktionen in AWS zu erstellen und auszuführen.
Darüber hinaus ermöglicht SAM Entwicklern die gemeinsame Nutzung von Konfigurationen zwischen Ressourcen vor der Bereitstellung, als einzige, versionierte Einheit.
Ein Entwickler kann die Funktion AWS SAM Local verwenden, um Lambda-Funktionen in einer Offline-Umgebung zu erstellen und zu testen. Das kann das Testen beschleunigen, da Codeänderungen auf AWS mehrere Minuten dauern können.
Mit SAM Local führt ein Befehl einen Docker-Container aus und simuliert eine API-Gateway und eine Lambda-Umgebung auf dem lokalen System des Entwicklers. Der Entwickler kann dann potenzielle Codeprobleme identifizieren und lokal beheben, bevor die serverlose Anwendung in der AWS-Cloud aktualisiert wird.