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.
Einführung in das Bauen mit AWS SAM
Verwenden Sie den AWS Serverless Application Model Befehl Command Line Interface (AWS SAMCLI)sam build, um Ihre serverlose Anwendung auf nachfolgende Schritte in Ihrem Entwicklungsworkflow vorzubereiten, z. B. lokale Tests oder die Bereitstellung auf der. AWS Cloud Mit diesem Befehl wird ein .aws-sam Verzeichnis erstellt, das Ihre Anwendung in einem Format und an einem Speicherort strukturiert, die sam local sam deploy erforderlich sind.
-
Eine Einführung in das finden AWS SAMCLI Sie unterWas ist das? AWS SAMCLI.
-
Eine Liste der
sam buildBefehlsoptionen finden Sie untersam build. -
Ein Beispiel für die Verwendung
sam buildwährend eines typischen Entwicklungsworkflows finden Sie unterSchritt 2: Erstellen Sie Ihre Anwendung.
Anmerkung
sam buildFür die Verwendung müssen Sie mit den grundlegenden Komponenten einer serverlosen Anwendung auf Ihrem Entwicklungscomputer beginnen. Dazu gehören eine AWS SAM Vorlage, AWS Lambda Funktionscode und alle sprachspezifischen Dateien und Abhängigkeiten. Weitere Informationen hierzu finden Sie unter Erstellen Sie Ihre Bewerbung in AWS SAM.
Themen
Anwendungen mit Sam Build erstellen
Ziehen Sie vor der Verwendung in Betrachtsam build, Folgendes zu konfigurieren:
-
Lambda-Funktionen und -Layer — Der
sam buildBefehl kann Lambda-Funktionen und -Layer erstellen. Weitere Informationen zu Lambda-Schichten finden Sie unterAufbau von Lambda-Schichten in AWS SAM. -
Lambda-Laufzeit — Die Laufzeit bietet eine sprachspezifische Umgebung, in der Ihre Funktion in einer Ausführungsumgebung ausgeführt wird, wenn sie aufgerufen wird. Sie können native und benutzerdefinierte Laufzeiten konfigurieren.
-
Native Laufzeit — Verfassen Sie Ihre Lambda-Funktionen in einer unterstützten Lambda-Laufzeit und erstellen Sie Funktionen für die Verwendung einer nativen Lambda-Laufzeit in der. AWS Cloud
-
Benutzerdefinierte Laufzeit — Verfassen Sie Ihre Lambda-Funktionen mit einer beliebigen Programmiersprache und erstellen Sie Ihre Laufzeit mit einem benutzerdefinierten Prozess, der in einem Builder makefile oder einem Drittanbieter definiert ist, z. B. esbuild Weitere Informationen hierzu finden Sie unter Erstellen von Lambda-Funktionen mit benutzerdefinierten Laufzeiten in AWS SAM.
-
-
Lambda-Pakettyp — Lambda-Funktionen können in den folgenden Lambda-Bereitstellungspakettypen verpackt werden:
-
ZIP-Dateiarchiv — Enthält Ihren Anwendungscode und seine Abhängigkeiten.
-
Container-Image — Enthält das Basisbetriebssystem, die Laufzeit, Lambda-Erweiterungen, Ihren Anwendungscode und dessen Abhängigkeiten.
-
Diese Anwendungseinstellungen können konfiguriert werden, wenn eine Anwendung initialisiert wird mit. sam init
-
Weitere Informationen zur Verwendung von finden Sie
sam initunterErstellen Sie Ihre Bewerbung in AWS SAM. -
Weitere Informationen zur Konfiguration dieser Einstellungen in Ihrer Anwendung finden Sie unterStandardbuild mit AWS SAM.
So erstellen Sie eine Anwendung
-
cdzur Wurzel Ihres Projekts. Dies ist derselbe Speicherort wie Ihre AWS SAM Vorlage.$cdsam-app -
Führen Sie Folgendes aus:
sam-app $sam build<arguments><options>Anmerkung
Eine häufig verwendete Option ist
--use-container. Weitere Informationen hierzu finden Sie unter Eine Lambda-Funktion innerhalb eines bereitgestellten Containers erstellen.Das Folgende ist ein Beispiel für die AWS SAMCLI Ausgabe:
sam-app $sam buildStarting Build use cache Manifest file is changed (new hash: 3298f1304...d4d421) or dependency folder (.aws-sam/deps/4d3dfad6-a267-47a6-a6cd-e07d6fae318c) is missing for (HelloWorldFunction), downloading dependencies and copying/building source Building codeuri: /Users/.../sam-app/hello_world runtime: python3.12 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CleanUp Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource Running PythonPipBuilder:CopySource Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Validate SAM template: sam validate [*] Invoke Function: sam local invoke [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch [*] Deploy: sam deploy --guided -
Das AWS SAMCLI erstellt ein
.aws-samBuild-Verzeichnis. Im Folgenden wird ein Beispiel gezeigt:.aws-sam ├── build │ ├── HelloWorldFunction │ │ ├── __init__.py │ │ ├── app.py │ │ └── requirements.txt │ └── template.yaml └── build.toml
Je nachdem, wie Ihre Anwendung konfiguriert ist, AWS SAMCLI macht der Folgendes:
-
Lädt Abhängigkeiten im
.aws-sam/buildVerzeichnis herunter, installiert und organisiert sie. -
Bereitet Ihren Lambda-Code vor. Dies kann das Kompilieren Ihres Codes, das Erstellen ausführbarer Binärdateien und das Erstellen von Container-Images umfassen.
-
Kopiert Build-Artefakte in das
.aws-samVerzeichnis. Das Format hängt vom Typ Ihres Anwendungspakets ab.-
Bei Pakettypen mit der Erweiterung.zip-Datei sind die Artefakte noch nicht gezippt, sodass sie für lokale Tests verwendet werden können. Das AWS SAMCLI komprimiert Ihre Anwendung, wenn Sie sie verwenden.
sam deploy -
Für Container-Image-Pakettypen wird ein Container-Image lokal erstellt und in der
.aws-sam/build.tomlDatei referenziert.
-
-
Kopiert die AWS SAM Vorlage in das
.aws-samVerzeichnis und ändert sie bei Bedarf mit neuen Dateipfaden.
Im Folgenden sind die Hauptkomponenten aufgeführt, aus denen Ihre Build-Artefakte im .aws-sam Verzeichnis bestehen:
-
Das Build-Verzeichnis — Enthält Ihre Lambda-Funktionen und -Layer, die unabhängig voneinander strukturiert sind. Dies führt zu einer eindeutigen Struktur für jede Funktion oder Ebene im
.aws-sam/buildVerzeichnis. -
Die AWS SAM Vorlage — Modifiziert mit aktualisierten Werten, die auf Änderungen während des Erstellungsprozesses basieren.
-
Die Datei build.toml — Eine Konfigurationsdatei, die Build-Einstellungen enthält, die von der verwendet werden. AWS SAMCLI
Lokales Testen und Bereitstellen
Bei der Durchführung lokaler Tests mit sam local oder bei der Bereitstellung mit sam deploy AWS SAMCLI führt der wie folgt aus:
-
Zunächst wird geprüft, ob ein
.aws-samVerzeichnis existiert und ob sich eine AWS SAM Vorlage in diesem Verzeichnis befindet. Wenn diese Bedingungen erfüllt sind, AWS SAMCLI betrachtet der dieses Verzeichnis als das Stammverzeichnis Ihrer Anwendung. -
Wenn diese Bedingungen nicht erfüllt sind, AWS SAMCLI betrachtet der den ursprünglichen Speicherort Ihrer AWS SAM Vorlage als Stammverzeichnis Ihrer Anwendung.
Wenn bei der Entwicklung Änderungen an Ihren ursprünglichen Anwendungsdateien vorgenommen werden, führen sam build Sie zunächst die Aktualisierung des .aws-sam Verzeichnisses durch, bevor Sie lokal testen.
Best Practices
-
Bearbeiten Sie keinen Code unter dem
.aws-sam/buildVerzeichnis. Aktualisieren Sie stattdessen Ihren ursprünglichen Quellcode in Ihrem Projektordner und führen Sie den Befehl aussam build, um das.aws-sam/buildVerzeichnis zu aktualisieren. -
Wenn Sie Ihre Originaldateien ändern, führen Sie den Befehl aus,
sam buildum das.aws-sam/buildVerzeichnis zu aktualisieren. -
Möglicherweise möchten Sie AWS SAMCLI, dass der auf das ursprüngliche Stammverzeichnis Ihres Projekts statt auf das
.aws-samVerzeichnis verweist, z. B. beim Entwickeln und Testen mitsam local. Löschen Sie das.aws-samVerzeichnis oder die AWS SAM Vorlage im.aws-samVerzeichnis, damit Ihr ursprüngliches Projektverzeichnis als Stammprojektverzeichnis AWS SAMCLI erkannt wird. Wenn Sie bereit sind, führen Sie densam buildVorgang erneut aus, um das.aws-samVerzeichnis zu erstellen. -
Bei der Ausführung
sam buildwird das.aws-sam/buildVerzeichnis jedes Mal überschrieben. Das.aws-samVerzeichnis tut dies nicht. Wenn Sie Dateien wie Protokolle speichern möchten, speichern Sie sie in,.aws-samdamit sie nicht überschrieben werden.
Optionen für Sam Build
Aufbau einer einzigen Ressource
Geben Sie die logische ID der Ressource an, um nur diese Ressource zu erstellen. Im Folgenden wird ein Beispiel gezeigt:
$sam buildHelloWorldFunction
Um eine Ressource aus einer verschachtelten Anwendung oder einem geschachtelten Stack zu erstellen, geben Sie die logische ID der Anwendung oder des Stacks zusammen mit der logischen ID der Ressource im folgenden Format an:<stack-logical-id>/<resource-logical-id>
$sam buildMyNestedStack/MyFunction
Eine Lambda-Funktion innerhalb eines bereitgestellten Containers erstellen
Die --use-container Option lädt ein Container-Image herunter und verwendet es, um Ihre Lambda-Funktionen zu erstellen. Der lokale Container wird dann in Ihrer .aws-sam/build.toml Datei referenziert.
Diese Option Docker muss installiert sein. Detaillierte Anweisungen finden Sie unter Installieren von Docker.
Das Folgende ist ein Beispiel für diesen Befehl:
$sam build --use-container
Sie können das Container-Image angeben, das mit der --build-image Option verwendet werden soll. Im Folgenden wird ein Beispiel gezeigt:
$sam build --use-container --build-imageamazon/aws-sam-cli-build-image-nodejs20.x
Um das Container-Image anzugeben, das für eine einzelne Funktion verwendet werden soll, geben Sie die logische ID der Funktion an. Im Folgenden wird ein Beispiel gezeigt:
$sam build --use-container --build-imageFunction1=amazon/aws-sam-cli-build-image-python3.12
Übergeben Sie Umgebungsvariablen an den Build-Container
Verwenden Sie die--container-env-var, um Umgebungsvariablen an den Build-Container zu übergeben. Im Folgenden wird ein Beispiel gezeigt:
$sam build --use-container --container-env-varFunction1.GITHUB_TOKEN=<token1>--container-env-varGLOBAL_ENV_VAR=<global-token>
Verwenden Sie die --container-env-var-file Option, um Umgebungsvariablen aus einer Datei zu übergeben. Im Folgenden wird ein Beispiel gezeigt:
$sam build --use-container --container-env-var-file<env.json>
Beispiel für die env.json Datei:
{ "MyFunction1": { "GITHUB_TOKEN": "TOKEN1" }, "MyFunction2": { "GITHUB_TOKEN": "TOKEN2" } }
Beschleunigen Sie die Erstellung von Anwendungen, die mehrere Funktionen enthalten
Wenn Sie eine Anwendung mit mehreren Funktionen ausführensam build, AWS SAMCLI erstellt sie jede Funktion einzeln. Verwenden Sie die --parallel Option, um den Erstellungsprozess zu beschleunigen. Dadurch werden alle Ihre Funktionen und Ebenen gleichzeitig erstellt.
Im Folgenden finden Sie ein Beispiel für diesen Befehl:
$sam build —-parallel
Beschleunigen Sie die Build-Zeiten, indem Sie Ihr Projekt im Quellordner erstellen
Für unterstützte Laufzeiten und Build-Methoden können Sie die --build-in-source Option verwenden, Ihr Projekt direkt im Quellordner zu erstellen. Standardmäßig werden die AWS SAM CLI Builds in einem temporären Verzeichnis gespeichert, was das Kopieren von Quellcode und Projektdateien beinhaltet. Damit befinden --build-in-source sich die AWS SAM CLI Builds direkt in Ihrem Quellordner, was den Build-Prozess beschleunigt, da keine Dateien mehr in ein temporäres Verzeichnis kopiert werden müssen.
Eine Liste der unterstützten Laufzeiten und Build-Methoden finden Sie unter--build-in-source.
Fehlerbehebung
Informationen zur Behebung von Problemen finden Sie unterAWS SAMCLIProblembehandlung. AWS SAMCLI
Beispiele
Erstellen einer Anwendung, die eine native Runtime- und .zip-Pakettyp verwendet
Dieses Beispiel finden Sie unterTutorial: Stellen Sie eine Hello World-Anwendung bereit mit AWS SAM.
Eine Anwendung erstellen, die einen systemeigenen Laufzeit- und Image-Pakettyp verwendet
Zuerst starten wir, sam init um eine neue Anwendung zu initialisieren. Während des interaktiven Ablaufs wählen wir den Image Pakettyp aus. Im Folgenden wird ein Beispiel gezeigt:
$sam init...Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice:1Choose an AWS Quick Start application template 1 - Hello World Example 2 - Multi-step workflow 3 - Serverless API 4 - Scheduled task 5 - Standalone function 6 - Data processing 7 - Hello World Example With Powertools 8 - Infrastructure event management 9 - Serverless Connector Hello World Example 10 - Multi-step workflow with Connectors 11 - Lambda EFS example 12 - DynamoDB Example 13 - Machine Learning Template:1Use the most popular runtime and package type? (Python and zip) [y/N]:ENTERWhich runtime would you like to use?...10 - java8 11 - nodejs20.x 12 - nodejs18.x 13 - nodejs16.x...Runtime:12What package type would you like to use? 1 - Zip 2 - Image Package type:2Based on your selections, the only dependency manager available is npm. We will proceed copying the template using npm. Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]:ENTERWould you like to enable monitoring using CloudWatch Application Insights? For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:ENTERProject name [sam-app]:ENTERCloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment) ----------------------- Generating application: ----------------------- Name: sam-app Base Image: amazon/nodejs18.x-base Architectures: x86_64 Dependency Manager: npm Output Directory: . Configuration file: sam-app/samconfig.toml Next steps can be found in the README file at sam-app/README.md...
Das AWS SAMCLI initialisiert eine Anwendung und erstellt das folgende Projektverzeichnis:
sam-app ├── README.md ├── events │ └── event.json ├── hello-world │ ├── Dockerfile │ ├── app.mjs │ ├── package.json │ └── tests │ └── unit │ └── test-handler.mjs ├── samconfig.toml └── template.yaml
Als Nächstes starten wir, um unsere sam build Anwendung zu erstellen:
sam-app $sam buildBuilding codeuri: /Users/.../build-demo/sam-app runtime: None metadata: {'DockerTag': 'nodejs18.x-v1', 'DockerContext': '/Users/.../build-demo/sam-app/hello-world', 'Dockerfile': 'Dockerfile'} architecture: arm64 functions: HelloWorldFunction Building image for HelloWorldFunction function Setting DockerBuildArgs: {} for HelloWorldFunction function Step 1/4 : FROM public.ecr.aws/lambda/nodejs:18 ---> f5b68038c080 Step 2/4 : COPY app.mjs package*.json ./ ---> Using cache ---> 834e565aae80 Step 3/4 : RUN npm install ---> Using cache ---> 31c2209dd7b5 Step 4/4 : CMD ["app.lambdaHandler"] ---> Using cache ---> 2ce2a438e89d Successfully built 2ce2a438e89d Successfully tagged helloworldfunction:nodejs18.x-v1 Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Validate SAM template: sam validate [*] Invoke Function: sam local invoke [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch [*] Deploy: sam deploy --guided
Erstellen einer Anwendung, die eine kompilierte Programmiersprache enthält
In diesem Beispiel erstellen wir mithilfe der Go Laufzeit eine Anwendung, die eine Lambda-Funktion enthält.
Zunächst initialisieren wir eine neue Anwendung sam init und konfigurieren unsere Anwendung für die Verwendung von: Go
$sam init...Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice:1Choose an AWS Quick Start application template 1 - Hello World Example 2 - Multi-step workflow 3 - Serverless API...Template:1Use the most popular runtime and package type? (Python and zip) [y/N]:ENTERWhich runtime would you like to use?...4 - dotnetcore3.1 5 - go1.x 6 - go (provided.al2)...Runtime:5What package type would you like to use? 1 - Zip 2 - Image Package type:1Based on your selections, the only dependency manager available is mod. We will proceed copying the template using mod. Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]:ENTERWould you like to enable monitoring using CloudWatch Application Insights? For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:ENTERProject name [sam-app]:ENTERCloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment) ----------------------- Generating application: ----------------------- Name: sam-app Runtime: go1.x Architectures: x86_64 Dependency Manager: mod Application Template: hello-world Output Directory: . Configuration file: sam-app/samconfig.toml Next steps can be found in the README file at sam-app-go/README.md...
Das AWS SAMCLI initialisiert die Anwendung. Im Folgenden finden Sie ein Beispiel für die Verzeichnisstruktur der Anwendung:
sam-app ├── Makefile ├── README.md ├── events │ └── event.json ├── hello-world │ ├── go.mod │ ├── go.sum │ ├── main.go │ └── main_test.go ├── samconfig.toml └── template.yaml
Wir verweisen auf die README.md Datei für die Anforderungen dieser Anwendung.
...## Requirements * AWS CLI already configured with Administrator permission * [Docker installed](https://www.docker.com/community-edition) * [Golang](https://golang.org) * SAM CLI - [Install the SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)...
Als Nächstes testen sam local invoke wir unsere Funktion. Dieser Befehl Go ist fehlerhaft, da er nicht auf unserem lokalen Computer installiert ist:
sam-app $sam local invokeInvoking hello-world (go1.x) Local image was not found. Removing rapid images for repo public.ecr.aws/sam/emulation-go1.x Building image................................................................................................................................................................................................................................................. Using local image: public.ecr.aws/lambda/go:1-rapid-x86_64. Mounting /Users/.../Playground/build/sam-app/hello-world as /var/task:ro,delegated inside runtime container START RequestId: c6c5eddf-042b-4e1e-ba66-745f7c86dd31 Version: $LATEST fork/exec /var/task/hello-world: no such file or directory: PathError null END RequestId: c6c5eddf-042b-4e1e-ba66-745f7c86dd31 REPORT RequestId: c6c5eddf-042b-4e1e-ba66-745f7c86dd31 Init Duration: 0.88 ms Duration: 175.75 ms Billed Duration: 176 ms Memory Size: 128 MB Max Memory Used: 128 MB {"errorMessage":"fork/exec /var/task/hello-world: no such file or directory","errorType":"PathError"}%
Als Nächstes erstellen sam build wir unsere Anwendung. Wir stoßen auf einen Fehler, da Go es nicht auf unserem lokalen Computer installiert ist:
sam-app $sam buildStarting Build use cache Cache is invalid, running build and copying resources for following functions (HelloWorldFunction) Building codeuri: /Users/.../Playground/build/sam-app/hello-world runtime: go1.x metadata: {} architecture: x86_64 functions: HelloWorldFunction Build Failed Error: GoModulesBuilder:Resolver - Path resolution for runtime: go1.x of binary: go was not successful
Wir könnten unseren lokalen Computer zwar so konfigurieren, dass er unsere Funktion korrekt erstellt, aber wir verwenden stattdessen die --use-container Option mitsam build. Der AWS SAMCLI lädt ein Container-Image herunter, erstellt unsere Funktion mit dem nativen GoModulesBuilder und kopiert die resultierende Binärdatei in unser .aws-sam/build/HelloWorldFunction Verzeichnis.
sam-app $sam build --use-container Starting Build use cache Starting Build inside a container Cache is invalid, running build and copying resources for following functions (HelloWorldFunction) Building codeuri: /Users/.../build/sam-app/hello-world runtime: go1.x metadata: {} architecture: x86_64 functions: HelloWorldFunction Fetching public.ecr.aws/sam/build-go1.x:latest-x86_64 Docker container image..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... Mounting /Users/.../build/sam-app/hello-world as /tmp/samcli/source:ro,delegated inside runtime container Running GoModulesBuilder:Build Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Validate SAM template: sam validate [*] Invoke Function: sam local invoke [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch [*] Deploy: sam deploy --guided
Das Folgende ist ein Beispiel für das .aws-sam Verzeichnis:
.aws-sam ├── build │ ├── HelloWorldFunction │ │ └── hello-world │ └── template.yaml ├── build.toml ├── cache │ └── c860d011-4147-4010-addb-2eaa289f4d95 │ └── hello-world └── deps
Als nächstes rennen wirsam local invoke. Unsere Funktion wurde erfolgreich aufgerufen:
sam-app $sam local invokeInvoking hello-world (go1.x) Local image is up-to-date Using local image: public.ecr.aws/lambda/go:1-rapid-x86_64. Mounting /Users/.../Playground/build/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container START RequestId: cfc8ffa8-29f2-49d4-b461-45e8c7c80479 Version: $LATEST END RequestId: cfc8ffa8-29f2-49d4-b461-45e8c7c80479 REPORT RequestId: cfc8ffa8-29f2-49d4-b461-45e8c7c80479 Init Duration: 1.20 ms Duration: 1782.46 ms Billed Duration: 1783 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode":200,"headers":null,"multiValueHeaders":null,"body":"Hello, 72.21.198.67\n"}%
Weitere Informationen
Weitere Informationen zur Verwendung des sam build Befehls finden Sie in den folgenden Abschnitten:
-
Lernen AWS SAM: Sam Build
— Serie „Lernen AWS SAM“ von Serverless Land amYouTube. -
Lernen AWS SAM | Sam Build | E3
— Serverless Land-Serie „Lernen AWS SAM“ weiter. YouTube -
AWS SAM build: wie es Artefakte für den Einsatz bereitstellt (Sessions With SAM S2E8)
— Sessions mit Serien weiter. AWS SAM YouTube -
AWS SAM benutzerdefinierte Builds: Wie man Makefiles verwendet, um Builds in SAM anzupassen (S2E9
) — Sessions mit laufenden Serien. AWS SAM YouTube