Getty Images/iStockphoto
Wie man eine AWS-Lambda-Funktion mit CloudFormation erstellt
Möchten Sie Automatisierung, Konsistenz, Skalierbarkeit und Kosteneffizienz verbessern? Folgen Sie dieser Anleitung zum Erstellen einer AWS-Lambda-Funktion mit CloudFormation.
Es gibt verschiedene Möglichkeiten, AWS-Lambda-Funktionen zu erstellen, zum Beispiel mit der AWS Management Console, AWS CLI und Tools von Drittanbietern. Im Mittelpunkt dieses Tutorials steht AWS CloudFormation, ein Infrastructure-as-Code-Tool, das den Start und die Verwaltung von AWS-Infrastrukturkomponenten auf eine skalierbare und zuverlässige Weise automatisiert.
CloudFormation unterstützt die meisten AWS-Ressourcen, einschließlich Lambda-Funktionen, die eine weit verbreitete Cloud-Komponente in vielen modernen Anwendungen sind. Lambda-Funktionen implementieren Rechenressourcen auf eine serverlose Weise, bei der Entwickler die zugrunde liegende Infrastruktur nicht direkt verwalten müssen. Sie sind eine zuverlässige und agile Methode zur Implementierung von Softwareanwendungslogik.
Es ist wichtig, sich mit dem gesamten Prozess vertraut zu machen und die Vorteile dieser Tools zu nutzen, die Anwendungseigentümern helfen, zuverlässige Software in der Cloud zu starten. Dieses Tutorial konzentriert sich auf die notwendigen Schritte zum Start von Lambda-Funktionen mit CloudFormation. Es wird gezeigt, wie eine Vorlagendatei und ein CloudFormation-Stack erstellt werden, das heißt die Gruppierung der in der Vorlage definierten AWS-Ressourcen.
Erstellung einer AWS CloudFormation-Vorlage
Eine CloudFormation-Vorlage hat mehrere Abschnitte, die zur Definition des Stacks verwendet werden, zum Beispiel Beschreibung, Parameter, Mappings, Ressourcen und Ausgaben. Der wichtigste Abschnitt ist der Abschnitt Ressourcen, in dem Sie eine AWS-Komponente definieren. Im Falle von Lambda-Funktionen erfolgt das nach dem folgenden Muster im YAML-Format:
Type: AWS::Lambda::Function
Properties:
<Lambda function configurations>
CloudFormation unterstützt über 20 Eigenschaften bei der Definition einer Lambda-Funktion. Streng genommen gibt es nur zwei erforderliche: Code und Rolle. Diese Konfigurationen definieren den Ort des Quellcodes, den die Funktion verwenden wird, und die IAM-Rolle, die zugewiesen wird, um der Funktion Ausführungsrechte zu erteilen. In diesem Beispiel wird der Code als Zip-Datei konfiguriert, die in S3 gespeichert wird. Die anderen Optionen sind die Angabe des Speicherorts des Amazon Elastic Container Registry Docker-Images oder die Angabe des eigentlichen Inline-Codes.
Eine IAM-Rolle erstellen
In diesem Beispiel wird eine manuelle erstellte IAM-Rolle mit den für eine Lambda-Funktion erforderlichen Mindestberechtigungen verwendet. Das kann über die AWS IAM-Konsole erfolgen. Starten Sie den Prozess Create Role (Rolle erstellen) und wählen Sie AWS Service als Entitätstyp:
Die von AWS verwaltete Richtlinie AWSLambdaBasicExecutionRole bietet den Mindestsatz an Berechtigungen, den eine Lambda-Funktion für den Betrieb benötigt, einschließlich des Schreibens von Daten in CloudWatch Logs. Bei komplexeren Lambda-Funktionen, die mit anderen AWS-Diensten wie S3 und DynamoDB interagieren, weisen Sie dieser IAM-Rolle zusätzliche IAM-Berechtigungen zu. Weisen Sie außerdem die Mindestmenge an Berechtigungen auf der Grundlage des Zwecks der jeweiligen Lambda-Funktion zu.
Erstellung einer Datei mit dem Quellcode
Sobald Sie diesen Schritt abgeschlossen und die IAM-Rolle erstellt haben, verwenden Sie den Amazon Resource Name (ARN) in der CloudFormation-Vorlage. Die andere Voraussetzung für dieses Beispiel ist das Erstellen einer Datei mit dem Quellcode der Lambda-Funktion – in diesem Fall wurde sie index.py genannt – und das Verpacken in eine .zip-Datei sowie das anschließende Hochladen in einen S3 Bucket. Im Folgenden finden Sie ein Beispiel für einen sehr einfachen Python-Funktionscode Hello World:
import json
def lambda_handler(event, context):
print("Received event: " + json.dumps(event))
print("Hello World")
return event
Die in S3 gespeicherte Zip-Datei heißt my-source-code.zip. Sie benötigt die Handler- und Laufzeiteigenschaften von CloudFormation. Darüber hinaus ist es immer sinnvoll, andere nicht obligatorische Eigenschaften zu definieren, wie Funktionsname, Beschreibung und Tags. Der Lambda-Funktionsblock wird wie folgt aussehen:
Resources:
ExampleFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: ExampleFunction
Description: "Lambda example"
Code:
S3Bucket: s3-bucket-name
S3Key: my-source-code.zip
Role: arn:aws:iam::<aws-account-id>:role/<role-name>
Handler: index.lambda_handler
Runtime: python3.11
Tags:
- Key: stage
Value: <deployment-stage>
- Key: <other-key>
Value: <key-value>
Es ist sinnvoll, mit anderen Konfigurationen vertraut zu sein, die in diesem Beispiel nicht behandelt werden, aber je nach den Bedürfnissen Ihrer Anwendungen nützlich sein können. Dazu gehören:
- Architectures (x86_64 oder arm64)
- CodeSigningConfigArn
- DeadLetterConfig
- Environment
- EphemeralStorage
- FileSystemConfigs
- ImageConfig
- KmsKeyArn
- Layers
- LoggingConfig
- MemorySize
- ReservedConcurrentExecutions
- RuntimeManagementConfig
- SnapStart
- Timeout
Erstellung des AWS-CloudFormation-Stacks
Sobald die Vorlage fertig ist und Sie die die Zip-Datei mit dem Code in S3 hochgeladen haben, besteht der nächste Schritt darin, den CloudFormation-Stack zu erstellen. Klicken Sie in der CloudFormation-Konsole auf Create stack (Stack erstellen) und wählen Sie With new resources (standard) (Mit neuen Ressourcen (Standard)).
Im nächsten Schritt werden die Optionen für die Vorlage festgelegt. In diesem Beispiel verwenden wir eine lokal gespeicherte Vorlage. Wählen Sie Template is ready, Upload a template file (Vorlage ist bereit, Vorlagendatei hochladen) und wählen Sie dann die entsprechende Vorlagendatei.
Im nächsten Schritt geben Sie einen Stack-Namen an. Wenn in der Vorlage Stack-Parameter definiert sind, werden sie hier eingestellt.
Der nächste Schritt umfasst die Einstellung von Stack-Optionen wie Tags, Berechtigungen und Stack-Fehleroptionen. In diesem Beispiel bleibt es bei der Standardkonfiguration und es geht mit dem letzten Bestätigungsschritt weiter. Über die Registerkarte Events (Ereignisse) können Sie den Status der Stack- und Ressourcenerstellung einsehen.
Beachten Sie, dass auf der Registerkarte Resources (Ressourcen) die AWS-Komponenten angezeigt werden, die von dem kürzlich erstellten Stack verwaltet werden. In den meisten Fällen wird ein Link angezeigt, der Sie zur AWS-Servicekonsole für die jeweilige Ressource führt. In diesem Beispiel führt der Link die Benutzer zur Lambda-Konsole.
Auf der Registerkarte Code können Sie den eigentlichen Quellcode der Funktion anzeigen, die Funktion testen und benutzerdefinierte Eingaben mit Testevents konfigurieren.
Nachdem Sie den Stack erstellt haben, definieren Sie nachfolgende Aktualisierungen für bestehende AWS-Ressourcen in der CloudFormation-Vorlage und wenden sie dann bei Bedarf auf den CloudFormation-Stack an. Sie können das über den UpdateStack-Vorgang tun, der entweder über die CLI, das SDK oder die AWS-Konsole ausgelöst wird.
AWS CloudFormation und SAM im Vergleich
Während AWS das Serverless Application Model (SAM) als vereinfachtes Tool zur Verwaltung von Lambda-Funktionen und anderen serverlosen Komponenten veröffentlicht hat, ist CloudFormation der grundlegende AWS-Service zur Implementierung von Infrastructure as Code in der Cloud. Das SAM-Framework ist eine Erweiterung von CloudFormation. Es generiert automatisch CloudFormation-Vorlagen und -Stacks, wenn serverlose Komponenten definiert werden.
Obwohl SAM ein sehr nützlicher und zuverlässiger Weg ist, um serverlose Anwendungen zu verwalten, ist die Verwendung der einfachen CloudFormation-Syntax auch ein guter Weg, um Lambda-Funktionen zu starten, insbesondere wenn es notwendig ist, nicht-serverlose Komponenten im gleichen Stack wie Lambda-Funktionen zu verwalten.