Aufbau von Lambda-Schichten in AWS SAM - AWS Serverless Application Model

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-layer-logical-id, 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 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 layer-logical-id Befehl an.

  • 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 einem Metadata Ressourcenattribut mit einem BuildMethod Eintrag enthält, erstellen Sie die Ebene, indem Sie entweder die gesamte Anwendung mit dem sam build Befehl erstellen oder indem Sie die Funktionsressource mit dem sam build function-logical-id Befehl angeben.

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 layer-logical-id # Build the 'function-logical-id' resource and layers that this function depends on $ sam build function-logical-id # Build the entire application, including the layers that any function depends on $ sam build