Standard-Build mit 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.

Standard-Build mit AWS SAM

Verwenden Sie den Befehl, um Ihre serverlose Anwendung zu erstellen. sam build Dieser Befehl sammelt auch die Build-Artefakte der Abhängigkeiten Ihrer Anwendung und platziert sie im richtigen Format und am richtigen Speicherort für die nächsten Schritte, z. B. lokales Testen, Paketieren und Bereitstellen.

Sie geben die Abhängigkeiten Ihrer Anwendung in einer Manifestdatei wie requirements.txt (Python) oder package.json (Node.js) an, oder indem Sie die Layers Eigenschaft einer Funktionsressource verwenden. Die Layers Eigenschaft enthält eine Liste von AWS LambdaLayer-Ressourcen, von denen die Lambda-Funktion abhängt.

Das Format der Build-Artefakte Ihrer Anwendung hängt von den PackageType Eigenschaften der einzelnen Funktionen ab. Die Optionen für diese Eigenschaft sind:

  • Zip— Ein ZIP-Dateiarchiv, das Ihren Anwendungscode und seine Abhängigkeiten enthält. Wenn Sie Ihren Code als ZIP-Dateiarchiv verpacken, müssen Sie eine Lambda-Laufzeit für Ihre Funktion angeben.

  • Image— Ein Container-Image, das neben Ihrem Anwendungscode und seinen Abhängigkeiten auch das Basisbetriebssystem, die Laufzeit und Erweiterungen enthält.

Weitere Informationen zu Lambda-Pakettypen finden Sie unter Lambda-Bereitstellungspakete im AWS Lambda Leitfaden für Entwickler.

Erstellen eines ZIP-Dateiarchivs

Um Ihre serverlose Anwendung als ZIP-Dateiarchiv zu erstellen, deklarieren Sie Ihre serverlose PackageType: Zip Funktion.

AWS SAM erstellt Ihre Anwendung für die von Ihnen angegebene Architektur. Wenn Sie keine Architektur angeben, AWS SAM verwendet x86_64 standardmäßig.

Wenn Ihre Lambda-Funktion von Paketen abhängt, die nativ kompilierte Programme enthalten, verwenden Sie das --use-container Flag. Dieses Flag kompiliert Ihre Funktionen lokal in einem Docker-Container, der sich wie eine Lambda-Umgebung verhält, sodass sie im richtigen Format vorliegen, wenn Sie sie in der AWS Wolke.

Wenn Sie die --use-container Option verwenden, standardmäßig AWS SAM ruft das Container-Image von Amazon ECR Public ab. Wenn Sie beispielsweise DockerHub ein Container-Image aus einem anderen Repository abrufen möchten, können Sie die --build-image Option verwenden und das URI eines alternativen Container-Images angeben. Im Folgenden finden Sie zwei Beispielbefehle für die Erstellung von Anwendungen, die Container-Images aus dem DockerHub Repository verwenden:

# Build a Node.js 20 application using a container image pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs20.x # Build a function resource using the Python 3.12 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.12

Eine Liste der Optionen, die URIs Sie mit verwenden können --build-imageBild-Repositorys für AWS SAM, finden Sie unter Which contains DockerHub URIs für eine Reihe unterstützter Laufzeiten.

Weitere Beispiele für die Erstellung einer ZIP-Dateiarchivanwendung finden Sie im Abschnitt Beispiele weiter unten in diesem Thema.

Ein Container-Image erstellen

Um Ihre serverlose Anwendung als Container-Image zu erstellen, deklarieren PackageType: Image Sie Ihre serverlose Funktion. Sie müssen auch das Metadata Ressourcenattribut mit den folgenden Einträgen deklarieren:

Dockerfile

Der Name der Dockerfile, die der Lambda-Funktion zugeordnet ist.

DockerContext

Der Speicherort des Dockerfiles.

DockerTag

(Optional) Ein Tag, das auf das erstellte Image angewendet werden soll.

DockerBuildArgs

Generieren Sie Argumente für den Build.

Wichtig

Das Tool AWS SAM CLI redigiert oder verschleiert keine Informationen, die Sie in Argumenten angeben. DockerBuildArgs Es wird dringend empfohlen, mit diesem Abschnitt keine vertraulichen Informationen wie Passwörter oder Secrets zu speichern.

Im Folgenden finden Sie ein Beispiel für einen Abschnitt mit Metadata Ressourcenattributen:

Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1

Informationen zum Herunterladen einer Beispielanwendung, die mit dem Image Pakettyp konfiguriert ist, finden Sie unterTutorial: Stellen Sie eine Hello World-Anwendung bereit mit AWS SAM. Wenn Sie gefragt werden, welchen Pakettyp Sie installieren möchten, wählen SieImage.

Anmerkung

Wenn Sie in Ihrem Dockerfile ein Basis-Image mit mehreren Architekturen angeben, AWS SAM erstellt Ihr Container-Image für die Architektur Ihres Host-Computers. Um für eine andere Architektur zu erstellen, geben Sie ein Basis-Image an, das die spezifische Zielarchitektur verwendet.

Datei mit Container-Umgebungsvariablen

Um eine JSON Datei bereitzustellen, die Umgebungsvariablen für den Build-Container enthält, verwenden Sie das --container-env-var-file Argument zusammen mit dem sam build Befehl. Sie können eine einzelne Umgebungsvariable angeben, die für alle serverlosen Ressourcen gilt, oder unterschiedliche Umgebungsvariablen für jede Ressource.

Format

Das Format für die Übergabe von Umgebungsvariablen an einen Build-Container hängt davon ab, wie viele Umgebungsvariablen Sie für Ihre Ressourcen bereitstellen.

Um eine einzige Umgebungsvariable für alle Ressourcen bereitzustellen, geben Sie ein Parameters Objekt wie das Folgende an:

{ "Parameters": { "GITHUB_TOKEN": "TOKEN_GLOBAL" } }

Um für jede Ressource unterschiedliche Umgebungsvariablen bereitzustellen, geben Sie Objekte für jede Ressource wie folgt an:

{ "MyFunction1": { "GITHUB_TOKEN": "TOKEN1" }, "MyFunction2": { "GITHUB_TOKEN": "TOKEN2" } }

Speichern Sie Ihre Umgebungsvariablen als Datei, z. B. mit dem Namenenv.json. Der folgende Befehl verwendet diese Datei, um Ihre Umgebungsvariablen an den Build-Container zu übergeben:

sam build --use-container --container-env-var-file env.json

Precedence

  • Die Umgebungsvariablen, die Sie für bestimmte Ressourcen angeben, haben Vorrang vor der einzelnen Umgebungsvariablen für alle Ressourcen.

  • Umgebungsvariablen, die Sie in der Befehlszeile angeben, haben Vorrang vor Umgebungsvariablen in einer Datei.

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, um Ihr Projekt direkt im Quellordner zu erstellen. Standardmäßig ist der AWS SAM CLI baut in einem temporären Verzeichnis auf, was das Kopieren von Quellcode und Projektdateien beinhaltet. Mit--build-in-source, dem AWS SAM CLI erstellt direkt in Ihrem Quellordner, wodurch der Erstellungsprozess beschleunigt wird, 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.

Beispiele

Beispiel 1: ZIP-Dateiarchiv

Mit den folgenden sam build Befehlen wird ein ZIP-Dateiarchiv erstellt:

# Build all functions and layers, and their dependencies sam build # Run the build process inside a Docker container that functions like a Lambda environment sam build --use-container # Build a Node.js 20 application using a container image pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs20.x # Build a function resource using the Python 3.12 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.12 # Build and run your functions locally sam build && sam local invoke # For more options sam build --help

Beispiel 2: Container-Image

Folgendes AWS SAM Die Vorlage wird als Container-Image erstellt:

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image ImageConfig: Command: ["app.lambda_handler"] Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1

Das Folgende ist ein Beispiel für eine Dockerfile:

FROM public.ecr.aws/lambda/python:3.12 COPY app.py requirements.txt ./ RUN python3.12 -m pip install -r requirements.txt # Overwrite the command by providing a different command directly in the template. CMD ["app.lambda_handler"]

Beispiel 3: npm ci

Für Anwendungen mit der Datei Node.js können Sie npm ci anstelle von npm install Abhängigkeiten verwenden. Geben Sie zur Verwendung npm ci BuildProperties im Metadata Ressourcenattribut Ihrer Lambda-Funktion UseNpmCi: True unter an. Um sie verwenden zu könnennpm ci, muss Ihre Anwendung eine package-lock.json npm-shrinkwrap.json OR-Datei in der CodeUri for your Lambda-Funktion enthalten.

Das folgende Beispiel dient npm ci zur Installation von Abhängigkeiten bei der Ausführungsam build:

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.handler Runtime: nodejs20.x Architectures: - x86_64 Events: HelloWorld: Type: Api Properties: Path: /hello Method: get Metadata: BuildProperties: UseNpmCi: True

Gebäudefunktionen außerhalb von AWS SAM

Standardmäßig, wenn Sie ausführensam build, AWS SAM erstellt alle Ihre Funktionsressourcen. Weitere Optionen sind:

  • Erstellen Sie alle Funktionsressourcen außerhalb von AWS SAM— Wenn Sie alle Ihre Funktionsressourcen manuell oder mit einem anderen Tool erstellen, sam build ist dies nicht erforderlich. Sie können den Vorgang überspringen sam build und mit dem nächsten Schritt in Ihrem Prozess fortfahren, z. B. mit der Durchführung lokaler Tests oder der Bereitstellung Ihrer Anwendung.

  • Erstellen Sie einige Funktionsressourcen außerhalb von AWS SAM— Wenn du willst AWS SAM um einige Ihrer Funktionsressourcen zu erstellen und gleichzeitig andere Funktionsressourcen außerhalb von AWS SAM, das können Sie in Ihrem angeben AWS SAM Vorlage.

Erstellen Sie einige Funktionsressourcen außerhalb von AWS SAM

Zu haben AWS SAM Wenn Sie eine Funktion überspringensam build, konfigurieren Sie Folgendes in Ihrem AWS SAM Vorlage:

  1. Fügen Sie die SkipBuild: True Metadaten-Eigenschaft zu Ihrer Funktion hinzu.

  2. Geben Sie den Pfad zu Ihren erstellten Funktionsressourcen an.

Hier ist ein Beispiel, das TestFunction so konfiguriert ist, dass es übersprungen wird. Die erstellten Ressourcen befinden sich unterbuilt-resources/TestFunction.zip.

TestFunction: Type: AWS::Serverless::Function Properties: CodeUri: built-resources/TestFunction.zip Handler: TimeHandler::handleRequest Runtime: java11 Metadata: SkipBuild: True

Jetzt, wenn du rennstsam build, AWS SAM wird Folgendes tun:

  1. AWS SAM überspringt Funktionen, die mit konfiguriert wurdenSkipBuild: True.

  2. AWS SAM erstellt alle anderen Funktionsressourcen und speichert sie im .aws-sam Build-Verzeichnis.

  3. Bei übersprungenen Funktionen wird ihre Vorlage im .aws-sam Build-Verzeichnis automatisch aktualisiert, sodass sie auf den angegebenen Pfad zu Ihren erstellten Funktionsressourcen verweist.

    Hier ist ein Beispiel für die zwischengespeicherte Vorlage für TestFunction im .aws-sam Build-Verzeichnis:

    TestFunction: Type: AWS::Serverless::Function Properties: CodeUri: ../../built-resources/TestFunction.zip Handler: TimeHandler::handleRequest Runtime: java11 Metadata: SkipBuild: True