Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Aufbau von Lambda-Schichten in AWS SAM
Sie können sie verwenden AWS SAM , um benutzerdefinierte Lambda-Schichten zu erstellen. Mit Lambda-Schichten können Sie Code aus einer Lambda-Funktion extrahieren, der dann für mehrere Lambda-Funktionen wiederverwendet werden kann. Wenn Sie nur Lambda-Schichten erstellen (anstatt Ihre gesamte Anwendung zu erstellen), können Sie in mehrfacher Hinsicht davon profitieren. Es kann Ihnen helfen, die Größe Ihrer Bereitstellungspakete zu reduzieren, die Logik der Kernfunktionen von Abhängigkeiten zu trennen und Abhängigkeiten für mehrere Funktionen gemeinsam zu nutzen. Informationen zu Layern finden Sie unter AWS Lambda-Schichten im AWS Lambda Developer Guide.
So erstellen Sie eine Lambda-Schicht in AWS SAM
Anmerkung
Bevor Sie eine Lambda-Schicht erstellen können, müssen Sie zunächst eine Lambda-Schicht in Ihre AWS SAM Vorlage schreiben. Informationen und Beispiele dazu finden Sie unter. Steigern Sie die Effizienz mithilfe von Lambda-Schichten mit AWS SAM
Um eine benutzerdefinierte Ebene zu erstellen, deklarieren Sie sie in Ihrer Vorlagendatei AWS Serverless Application Model (AWS SAM) und fügen Sie einen Abschnitt mit einem Metadata
Ressourcenattribut mit einem BuildMethod
Eintrag hinzu. Gültige Werte für BuildMethod
sind Bezeichner für eine AWS Lambda Laufzeit odermakefile
. Fügen Sie einen BuildArchitecture
Eintrag hinzu, um die Befehlssatzarchitekturen anzugeben, die Ihr Layer unterstützt. Gültige Werte für BuildArchitecture
sind Lambda-Befehlssatzarchitekturen.
Wenn Sie angebenmakefile
, geben Sie das benutzerdefinierte Makefile an, in dem Sie ein Build-Ziel in der Form deklarierenbuild-
, das die Build-Befehle für Ihre Ebene enthält. Ihr Makefile ist dafür verantwortlich, die Ebene bei Bedarf zu kompilieren und die Build-Artefakte an den richtigen Ort zu kopieren, der für nachfolgende Schritte in Ihrem Workflow erforderlich ist. Der Speicherort des Makefiles wird durch die layer-logical-id
ContentUri
Eigenschaft der Layer-Ressource angegeben und muss benannt werden. Makefile
Anmerkung
Wann Sie eine benutzerdefinierte Ebene erstellen, AWS Lambda hängt von Umgebungsvariablen ab, um Ihren Layer-Code zu finden. Lambda-Laufzeiten enthalten Pfade in dem /opt
Verzeichnis, in das Ihr Layer-Code kopiert wird. Die Ordnerstruktur für Build-Artefakte Ihres Projekts muss mit der erwarteten Ordnerstruktur der Laufzeit übereinstimmen, damit Ihr benutzerdefinierter Layer-Code gefunden werden kann.
Für Python können Sie beispielsweise Ihren Code im python/
Unterverzeichnis platzieren. Für NodeJS können Sie Ihren Code im Unterverzeichnis platzieren. nodejs/node_modules/
Weitere Informationen finden Sie im Entwicklerhandbuch unter Einbeziehen von Bibliotheksabhängigkeiten in eine Ebene.AWS Lambda
Im Folgenden finden Sie ein Beispiel für einen Abschnitt mit Metadata
Ressourcenattributen.
Metadata: BuildMethod: python3.8 BuildArchitecture: arm64
Anmerkung
Wenn Sie den Abschnitt mit den Metadata
Ressourcenattributen nicht einbeziehen, AWS SAM wird der Layer nicht erstellt. Stattdessen werden die Build-Artefakte von dem Speicherort kopiert, der in der CodeUri
Eigenschaft der Layer-Ressource angegeben ist. Weitere Informationen finden Sie unter der ContentUriEigenschaft des AWS::Serverless::LayerVersion
Ressourcentyps.
Wenn Sie den Abschnitt mit den Metadata
Ressourcenattributen einbeziehen, können Sie den sam build
Befehl verwenden, um den Layer sowohl als eigenständiges Objekt als auch als Abhängigkeit von einer AWS Lambda Funktion zu erstellen.
-
Als unabhängiges Objekt. Möglicherweise möchten Sie nur das Layer-Objekt erstellen, wenn Sie beispielsweise lokal eine Codeänderung an der Ebene testen und nicht Ihre gesamte Anwendung erstellen müssen. Um die Ebene unabhängig zu erstellen, geben Sie die Layer-Ressource mit dem
sam build
Befehl an.layer-logical-id
-
Als Abhängigkeit einer Lambda-Funktion. Wenn Sie die logische ID einer Ebene in die
Layers
Eigenschaft einer Lambda-Funktion in derselben AWS SAM Vorlagendatei aufnehmen, ist die Ebene eine Abhängigkeit von dieser Lambda-Funktion. Wenn diese Ebene auch einen Abschnitt mit einemMetadata
Ressourcenattribut mit einemBuildMethod
Eintrag enthält, erstellen Sie die Ebene, indem Sie entweder die gesamte Anwendung mit demsam build
Befehl erstellen oder indem Sie die Funktionsressource mit demsam build
Befehl angeben.function-logical-id
Beispiele
Vorlagenbeispiel 1: Erstellen Sie eine Ebene für die Python 3.9-Laufzeitumgebung
Die folgende AWS SAM Beispielvorlage erstellt eine Ebene für die Python 3.9-Laufzeitumgebung.
Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.9 Metadata: BuildMethod: python3.9 # Required to have AWS SAM build this layer
Vorlagenbeispiel 2: Erstellen Sie eine Ebene mit einem benutzerdefinierten Makefile
Die folgende AWS SAM Beispielvorlage verwendet eine benutzerdefinierte Vorlagemakefile
, um die Ebene zu erstellen.
Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.8 Metadata: BuildMethod: makefile
Das Folgende makefile
enthält das Build-Ziel und die Befehle, die ausgeführt werden. Beachten Sie, dass die ContentUri
Eigenschaft auf my_layer
gesetzt ist. Das Makefile muss sich also im Stammverzeichnis des my_layer
Unterverzeichnisses befinden, und der Dateiname muss sein. Makefile
Beachten Sie auch, dass die Build-Artefakte in das python/
Unterverzeichnis kopiert AWS Lambda werden, damit der Layer-Code gefunden werden kann.
build-MyLayer: mkdir -p "$(ARTIFACTS_DIR)/python" cp *.py "$(ARTIFACTS_DIR)/python" python -m pip install -r requirements.txt -t "$(ARTIFACTS_DIR)/python"
Beispiel für Sam-Build-Befehle
Mit den folgenden sam build
Befehlen werden Ebenen erstellt, die die Abschnitte mit den Metadata
Ressourcenattributen enthalten.
# Build the 'layer-logical-id' resource independently
$
sam build
# Build the 'function-logical-id' resource and layers that this function depends onlayer-logical-id
$
sam build
# Build the entire application, including the layers that any function depends onfunction-logical-id
$
sam build