Geschichtete Lambdas: AWS SAM und Python
Ein wenig Code-Wiederverwendbarkeit schadet nie.
Dies sind die Schritt-für-Schritt-Anweisungen, wie Sie Schichten zu AWS Lambdas hinzufügen – in Python.
Wir werden den Standard-HelloWorld-Vorlagenbeispielcode verwenden.
Und ja, selbstverständlich benötigen Sie alle Python
und AWS SAM Dinge vorinstalliert und konfiguriert.
Erstellen und Ausführen eines Beispielprojekts
Rufen Sie jetzt sam init
auf und beantworten Sie die Fragen auf die Standardweise, wie folgt:
Es wird eine Zusammenfassung anzeigen:
und erstellt den Projektordner mit Struktur und einigen Dateien. Die Datei template.yaml ist sehr standardmäßig.
und auch der Funktionscode (ich werde zusätzliche generierte Kommentare entfernen):
import json
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
# "location": ip.text.replace("\n", "")
}),
}
Jetzt bauen wir diese Funktion lokal und rufen sie auf:
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
Das Ende der Antwort sollte ungefähr wie das untenstehende aussehen:
.....
START RequestId: 6da35464-7c6a-40b2-bcc0-60796994317a Version: $LATEST
END RequestId: 737ae28d-2b99-49e6-baae-40ab9bb99599
REPORT RequestId: 737ae28d-2b99-49e6-baae-40ab9bb99599 Init Duration: 0.04 ms Duration: 28.40 ms Billed Duration: 29 ms Memory Size: 128 MB Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
Schicht hinzufügen
Fügen Sie die Schichtbeschreibung in template.yaml hinzu
Zwei Abschnitte:
- ApiSharedLayer – Block, der sie beschreibt
- Layers: … - !Ref ApiSharedLayer – in der Funktion, die sie verwendet
.....
Resources:
# added code start
ApiSharedLayer:
Type: AWS::Serverless::LayerVersion
Properties:
ContentUri: api_shared_layer/
LayerName: api-shared-layer
Description: Meine api-shared-layer
CompatibleRuntimes:
- python3.9
RetentionPolicy: Delete
Metadata:
BuildMethod: python3.9 # Erforderlich, damit AWS SAM diese Schicht baut
# added code end
HelloWorldFunction:
Type: AWS::Serverless::Function # Mehr Informationen über die Funktion Ressource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.9
Architectures:
- x86_64
# added code start
Layers:
- !Ref ApiSharedLayer
# added code end
Events:
.....
Fügen Sie den Schichtcode hinzu
Fügen Sie in den Ordner api_shared_layer
etwas Code hinzu:
Aktualisieren Sie die Funktion, um diesen Code zu verwenden
import json
from api_version import API_VERSION
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
"version": API_VERSION
}),
}
Testlauf
Nochmals:
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
Das Ende der Antwort sollte ungefähr wie das untenstehende aussehen:
.....
START RequestId: 88eb1887-ae94-479d-a059-f87c4b71a282 Version: $LATEST
END RequestId: 927f7d05-4d13-44ba-9377-03e6d3e8bacf
REPORT RequestId: 927f7d05-4d13-44ba-9377-03e6d3e8bacf Init Duration: 0.72 ms Duration: 34.80 ms Billed Duration: 35 ms Memory Size: 128 MB Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\", \"version\": \"1.1.1\"}"}
Schön.