

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.

# Stellen Sie Lambda-Funktionen mit Container-Images bereit
<a name="deploy-lambda-functions-with-container-images"></a>

*Ram Kandaswamy, Amazon Web Services*

## Zusammenfassung
<a name="deploy-lambda-functions-with-container-images-summary"></a>

AWS Lambda unterstützt Container-Images als Bereitstellungsmodell. Dieses Muster zeigt, wie Lambda-Funktionen über Container-Images bereitgestellt werden. 

Lambda ist ein serverloser, ereignisgesteuerter Rechendienst, mit dem Sie Code für praktisch jede Art von Anwendung oder Backend-Service ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Mit der Container-Image-Unterstützung für Lambda-Funktionen profitieren Sie von bis zu 10 GB Speicherplatz für Ihr Anwendungsartefakt und können vertraute Container-Image-Entwicklungstools verwenden.

Das Beispiel in diesem Muster verwendet Python als zugrunde liegende Programmiersprache, aber Sie können auch andere Sprachen wie Java, Node.js oder Go verwenden. Ziehen Sie als Quelle ein Git-basiertes System wie GitHub,, oder Bitbucket in Betracht GitLab, oder verwenden Sie Amazon Simple Storage Service (Amazon S3).

## Voraussetzungen und Einschränkungen
<a name="deploy-lambda-functions-with-container-images-prereqs"></a>

**Voraussetzungen**
+ Amazon Elastic Container Registry (Amazon ECR) aktiviert
+ Anwendungscode
+ Docker-Images mit dem Runtime-Interface-Client und der neuesten Version von Python
+ Grundkenntnisse in Git

**Einschränkungen**
+ Die maximal unterstützte Bildgröße beträgt 10 GB.
+ Die maximale Laufzeit für eine Lambda-basierte Container-Bereitstellung beträgt 15 Minuten.

## Architektur
<a name="deploy-lambda-functions-with-container-images-architecture"></a>

**Zielarchitektur**

![\[Vierstufiger Prozess zur Erstellung der Lambda-Funktion.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e421cc58-d33e-493d-b0bb-c3ffe39c2eb9/images/7f36d3d8-d161-497a-b036-26d886a16c69.png)


 

1. Sie erstellen ein Git-Repository und übertragen den Anwendungscode in das Repository.

1. Das AWS CodeBuild Projekt wird durch Commit-Änderungen ausgelöst.

1. Das CodeBuild Projekt erstellt das Docker-Image und veröffentlicht das erstellte Image in Amazon ECR.

1. Sie erstellen die Lambda-Funktion mithilfe des Images in Amazon ECR.

**Automatisierung und Skalierung**

Dieses Muster kann mithilfe von AWS CloudFormation AWS Cloud Development Kit (AWS CDK), oder API-Operationen aus einem SDK automatisiert werden. Lambda kann automatisch auf der Grundlage der Anzahl der Anfragen skaliert werden, und Sie können es mithilfe der Parallelitätsparameter optimieren. Weitere Informationen finden Sie in der [Lambda-Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html).

## Tools
<a name="deploy-lambda-functions-with-container-images-tools"></a>

**AWS-Services**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)Mit AWS richten CloudFormationhelps Sie AWS Ressourcen ein, stellen sie schnell und konsistent bereit und verwalten sie während ihres gesamten Lebenszyklus über AWS-Konten und AWS-Regionen. Dieses Muster verwendet [AWS CloudFormation Application Composer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/app-composer-for-cloudformation.html), mit dem Sie CloudFormation Vorlagen visuell anzeigen und bearbeiten können.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)ist ein vollständig verwalteter Build-Service, mit dem Sie Quellcode kompilieren, Komponententests ausführen und bereitstellungsbereite Artefakte erstellen können.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne dass Sie Server bereitstellen oder verwalten müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

**Andere Tools**
+ [Docker](https://www.docker.com/) ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.
+ [GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), und [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) sind einige der am häufigsten verwendeten Git-basierten Quellcodeverwaltungssysteme, um Quellcodeänderungen zu verfolgen.

## Best Practices
<a name="deploy-lambda-functions-with-container-images-best-practices"></a>
+ Mache deine Funktion so effizient und klein wie möglich, um zu vermeiden, dass unnötige Dateien geladen werden.
+ Bemühen Sie sich, statische Ebenen in Ihrer Docker-Dateiliste weiter oben zu platzieren, und platzieren Sie Ebenen, die sich häufiger ändern, weiter unten. Dadurch wird das Caching verbessert, was die Leistung verbessert.
+ Der Image-Besitzer ist für die Aktualisierung und das Patchen des Images verantwortlich. Fügen Sie diesen Aktualisierungsrhythmus zu Ihren betrieblichen Abläufen hinzu. Weitere Informationen finden Sie in der [AWS Lambda -Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-code).

## Epen
<a name="deploy-lambda-functions-with-container-images-epics"></a>

### Erstellen Sie ein Projekt in CodeBuild
<a name="create-a-project-in-codebuild"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Git-Repository. | Erstellen Sie ein Git-Repository, das den Quellcode der Anwendung, das Dockerfile und die `buildspec.yaml` Datei enthält.  | Developer | 
| Erstellen Sie ein Projekt CodeBuild . | Gehen Sie wie folgt vor, um ein CodeBuild Projekt zum Erstellen des benutzerdefinierten Lambda-Images zu verwenden: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | Developer | 
| Bearbeiten Sie das Dockerfile. | Das Dockerfile sollte sich im Verzeichnis der obersten Ebene befinden, in dem Sie die Anwendung entwickeln. Der Python-Code sollte sich im `src` Ordner befinden.Verwenden Sie bei der Erstellung des Images die [offiziellen von Lambda unterstützten Images](https://gallery.ecr.aws/lambda?page=1). Andernfalls tritt ein Bootstrap-Fehler auf, der den Packvorgang erschwert.Einzelheiten finden Sie im Abschnitt [Zusätzliche Informationen](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Erstellen Sie ein Repository in Amazon ECR. | Erstellen Sie ein Container-Repository in Amazon ECR. Im folgenden Beispielbefehl lautet der Name des erstellten Repositorys: `cf-demo`<pre>aws ecr create-repository --cf-demo </pre>Das Repository wird in der `buildspec.yaml` Datei referenziert. | AWS-Administrator, Entwickler | 
| Verschieben Sie das Image zu Amazon ECR. | Sie können es verwenden CodeBuild , um den Image-Build-Prozess durchzuführen. CodeBuild benötigt die Erlaubnis, mit Amazon ECR zu interagieren und mit S3 zu arbeiten. Im Rahmen des Prozesses wird das Docker-Image erstellt und in die Amazon ECR-Registrierung übertragen. Einzelheiten zur Vorlage und zum Code finden Sie im Abschnitt [Zusätzliche Informationen](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Stellen Sie sicher, dass sich das Bild im Repository befindet. | Um zu überprüfen, ob sich das Bild im Repository befindet, wählen Sie in der Amazon ECR-Konsole **Repositories** aus. Das Bild sollte mit Tags und den Ergebnissen eines Schwachstellenscanberichts aufgeführt werden, wenn diese Funktion in den Amazon ECR-Einstellungen aktiviert war.  Weitere Informationen finden Sie in der [AWS-Dokumentation](https://docs.aws.amazon.com/cli/latest/reference/ecr/put-registry-scanning-configuration.html). | Developer | 

### Erstellen Sie die Lambda-Funktion, um das Image auszuführen
<a name="create-the-lambda-function-to-run-the-image"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| So erstellen Sie die Lambda-Funktion: | Wählen Sie in der Lambda-Konsole **Create function** und dann **Container image** aus. Geben Sie den Funktionsnamen und die URI für das Bild ein, das sich im Amazon ECR-Repository befindet, und wählen Sie dann **Funktion erstellen**. Weitere Informationen finden Sie in der [AWS Lambda Lambda-Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html). | App-Developer | 
| Testen Sie die Lambda-Funktion. | **Um die Funktion aufzurufen und zu testen, wählen Sie Test.** Weitere Informationen finden Sie in der [AWS Lambda Lambda-Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html). | App-Developer | 

## Fehlerbehebung
<a name="deploy-lambda-functions-with-container-images-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Der Build ist nicht erfolgreich. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | 

## Zugehörige Ressourcen
<a name="deploy-lambda-functions-with-container-images-resources"></a>
+ [Basisbilder für Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-images.html)
+ [Docker-Beispiel für CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html)
+ [Übergeben Sie temporäre Anmeldeinformationen](https://aws.amazon.com/premiumsupport/knowledge-center/codebuild-temporary-credentials-docker/)

## Zusätzliche Informationen
<a name="deploy-lambda-functions-with-container-images-additional"></a>

**Bearbeiten Sie das Dockerfile**

Der folgende Code zeigt die Befehle, die Sie im Dockerfile bearbeiten:

```
FROM public.ecr.aws/lambda/python:3.xx

# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT} 
COPY requirements.txt  ${LAMBDA_TASK_ROOT} 

# install dependencies
RUN pip3 install --user -r requirements.txt

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.lambda_handler" ]
```

Verwenden Sie im `FROM` Befehl den entsprechenden Wert für die Python-Version, die von Lambda unterstützt wird (z. B.`3.12`). Dies wird das Basis-Image sein, das im öffentlichen Amazon ECR-Image-Repository verfügbar ist. 

Der `COPY app.py ${LAMBDA_TASK_ROOT}` Befehl kopiert den Code in das Stammverzeichnis der Aufgabe, das von der Lambda-Funktion verwendet wird. Dieser Befehl verwendet die Umgebungsvariable, sodass wir uns keine Gedanken über den tatsächlichen Pfad machen müssen. Die auszuführende Funktion wird als Argument an den `CMD [ "app.lambda_handler" ]` Befehl übergeben.

Der `COPY requirements.txt` Befehl erfasst die für den Code erforderlichen Abhängigkeiten. 

Der `RUN pip install --user -r requirements.txt` Befehl installiert die Abhängigkeiten im lokalen Benutzerverzeichnis. 

Führen Sie den folgenden Befehl aus, um Ihr Image zu erstellen.

```
docker build -t <image name> .
```

**Fügen Sie das Bild in Amazon ECR hinzu**

Ersetzen Sie den Code im folgenden Code `aws_account_id` durch die Kontonummer und ersetzen Sie ihn, `us-east-1` wenn Sie eine andere Region verwenden. Die `buildspec` Datei verwendet die CodeBuild Buildnummer, um Image-Versionen eindeutig als Tag-Wert zu identifizieren. Sie können dies an Ihre Anforderungen anpassen.

*Der benutzerdefinierte Buildspec-Code*

```
phases:
  install:
    runtime-versions:
       python: 3.xx
  pre_build:
    commands:
      - python3 --version
      - pip3 install --upgrade pip
      - pip3 install --upgrade awscli
      - sudo docker info
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - ls
      - cd app
      - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER .
      - docker container ls
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com
      - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
      - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
```