

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.

# Bereitstellen von Web-Funktionscode aus Amazon S3
<a name="web-functions-code-s3"></a>

Sie stellen Lambda Web Function Code als .zip-Bereitstellungspaket in einem Amazon S3 S3-Bucket bereit. Dies ist die einzige Möglichkeit, Code für eine Webfunktion bereitzustellen. Wenn Sie eine Webfunktion oder Revision erstellen, geben Sie das Objekt in dem `s3Object` Feld an, unter dem `codeConfig` sich die Anforderung befindet. `buildConfig` Geben `s3Object` Sie den Bucket, den Schlüssel und eine optionale versionId ein. Lambda verweist direkt aus Ihrem Bucket auf Ihren Code. Da Lambda jede Revision einer bestimmten Objektversion zuordnet, sind Ihre Bereitstellungen reproduzierbar. Sie können ein einzelnes Bereitstellungspaket für mehrere Konten und Regionen wiederverwenden. AWS 

**Topics**
+ [Voraussetzungen](#web-functions-code-s3-requirements)
+ [Erforderliche Berechtigungen](#web-functions-code-s3-permissions)
+ [Erstellen einer Webfunktion mit Code aus Amazon S3](#web-functions-code-s3-creating)
+ [Lebenszyklus eines Objekts](#web-functions-code-s3-lifecycle)
+ [Multi-Region Bereitstellungen](#web-functions-code-s3-multi-region)

## Voraussetzungen
<a name="web-functions-code-s3-requirements"></a>

Bevor Sie Web Function-Code von Amazon S3 bereitstellen, stellen Sie sicher, dass Ihr Bucket und Ihr Bereitstellungspaket die folgenden Anforderungen erfüllen:

S3-Versionierung  
Für den Bucket muss die [S3-Versionierung aktiviert](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) sein. Lambda verwendet Objektversionen, um zu verfolgen, welche Version Ihres Codes eine Revision verwendet.

Versions-ID  
Der `versionId` Parameter ist in der Anfrage optional. Wenn Sie es weglassen, verwendet Lambda die neueste Version des Objekts zum Zeitpunkt der Erstellung. In jedem Fall bindet Lambda die Revision an eine bestimmte Objektversion.

Maximale Größe des Bereitstellungspakets  
512 MB (entpackt).

Eintragsdatei  
Das Bereitstellungspaket muss die Eintragsdatei Ihrer Anwendung enthalten. Standardmäßig wird die Runtime `index.js` im Stammverzeichnis des Pakets geladen. Um eine andere Eintragsdatei zu verwenden, setzen Sie die `AWS_LAMBDA_NODEJS_ENTRYPOINT` Umgebungsvariable in der Revision auf den Pfad der Datei relativ zum Paketstamm. Nach dem Laden der Eintragsdatei wartet die Runtime darauf, dass Ihr HTTP-Server anfängt, den Host und den Port der `AWS_LAMBDA_HTTP_ENDPOINT` Umgebungsvariablen abzuhören. Wenn die Laufzeitumgebung die Eintragsdatei nicht auflösen kann oder der Server nie mit der Überwachung beginnt, schlägt die Initialisierung fehl und Anfragen an den Endpunkt schlagen fehl.  
Lambda überprüft nicht, ob Ihr Server mit der Überwachung beginnt, wenn er einen Endpunkt erstellt oder aktualisiert, um die Revision zu verwenden. Die Revision und der Endpunkt können `Active` in diesen Fällen immer noch angezeigt werden. Senden Sie nach jeder Bereitstellung eine Testanfrage und überprüfen Sie Ihre Anwendungsprotokolle.

Standort des Buckets  
Der Bucket kann sich in einem anderen AWS Konto und in einer anderen AWS Region als in der Webfunktion befinden. Der Bucket muss sich in derselben AWS Partition wie die Webfunktion befinden. Der Bucket darf sich nicht in einer Opt-in-Region befinden (einer Region, die standardmäßig nicht aktiviert ist). Wenn eine der Bedingungen nicht erfüllt ist, lehnt Lambda die Anfrage ab. Cross-Region Beim Abrufen von Objekten fallen zusätzliche Amazon S3 S3-Datenübertragungskosten an. Weitere Informationen zu Preisen finden Sie unter [Amazon-S3-Preise](https://aws.amazon.com/s3/pricing/).

## Erforderliche Berechtigungen
<a name="web-functions-code-s3-permissions"></a>

Um Webfunktionscode von Amazon S3 aus bereitzustellen, müssen Sie Berechtigungen sowohl für die aufrufende Identität als auch für den Lambda-Serviceprinzipal konfigurieren.

### Berechtigungen des Anrufers
<a name="web-functions-code-s3-caller-permissions"></a>

Um die Webfunktion oder Revision zu erstellen, benötigt Ihre IAM-Identität die folgenden Berechtigungen für das S3-Objekt:
+ `s3:GetObject`
+ `s3:GetObjectVersion`

Bei kontoübergreifenden Buckets muss die Bucket-Richtlinie auch der aufrufenden Identität Zugriff auf das Objekt gewähren.

### Bucket-Richtlinie für Lambda
<a name="web-functions-code-s3-bucket-policy"></a>

Die Bucket-Richtlinie muss dem Lambda-Service Principal (`lambda.amazonaws.com`) `s3:GetObject` und `s3:GetObjectVersion` Berechtigungen gewähren. Definieren Sie für die Richtlinie eine `aws:SourceArn` Bedingung, die dem ARN-Muster der Revision entspricht. Verwenden Sie es `ArnLike` mit einem Platzhalter für die Revisions-ID, da Lambda die Revisions-ID generiert, wenn Sie die Revision erstellen.

Wenn das Objekt mit einem AWS KMS Schlüssel (SSE-KMS) verschlüsselt ist, muss die Schlüsselrichtlinie auch den Aufruf `kms:Decrypt` dieses Schlüssels `lambda.amazonaws.com` ermöglichen. Lambda überprüft den Zugriff des Service Principal, wenn Sie die Revision erstellen, und lehnt die Anfrage ab, wenn der Zugriff fehlt.

Die folgende Beispiel-Bucket-Richtlinie gewährt Lambda Zugriff zum Lesen Ihrer Bereitstellungspakete für jede Version der angegebenen Webfunktion.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowLambdaWebFunctionCodeAccess",
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.amazonaws.com"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::{{my-bucket}}/*",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:lambda:{{us-east-1}}:{{111122223333}}:web-function/{{my-function}}/revision/*"
                }
            }
        }
    ]
}
```

Um den Zugriff auf das key prefix zu beschränken, das Ihre Bereitstellungspakete enthält, ändern Sie den `Resource` {{my-bucket}} Wert in`arn:aws:s3:::{{my-bucket}}/{{my-prefix}}/*`, wobei Ihr Bucket-Name und {{my-prefix}} das key prefix sind. Behalten Sie das `/*` Ende des Präfixes bei. Ändern Sie den `revision/*` Platzhalter nicht in`aws:SourceArn`.

## Erstellen einer Webfunktion mit Code aus Amazon S3
<a name="web-functions-code-s3-creating"></a>

Sie geben Ihr S3-Bereitstellungspaket im `codeConfig` Abschnitt von an`buildConfig`. Die folgenden Verfahren zeigen, wie Sie eine Webfunktion erstellen und wie Sie mit dem eine neue Revision erstellen AWS CLI.

**Um eine Webfunktion mit Code aus Amazon S3 zu erstellen (AWS CLI)**
+ Führen Sie den folgenden Befehl aus, um eine Webfunktion zu erstellen, die auf Ihr ZIP-Bereitstellungspaket in Amazon S3 verweist.

  ```
  aws lambda-web create-web-function \
      --function-name {{my-web-app}} \
      --revision-config '{
        "buildConfig": {
          "codeConfig": {
            "s3Object": { "bucket": "{{my-bucket}}", "key": "{{my-app.zip}}" }
          },
          "runtimeConfig": { "runtime": "nodejs24.x" }
        },
        "serviceConfig": {
          "executionRoleArn": "arn:aws:iam::{{111122223333}}:role/{{my-web-function-role}}"
        }
      }' \
      --endpoint-config '{
        "endpointName": "{{my-endpoint}}",
        "endpointType": "HomeRegion",
        "authType": "ApplicationManaged"
      }'
  ```

  Wenn Sie es weglassen`versionId`, verwendet Lambda die neueste Version des Objekts zum Zeitpunkt der Erstellung.

**Um eine neue Revision mit einer bestimmten Objektversion zu erstellen (AWS CLI)**
+ Führen Sie den folgenden Befehl aus, um eine neue Revision zu erstellen, die eine bestimmte Version Ihres Bereitstellungspakets verwendet.

  ```
  aws lambda-web create-web-function-revision \
      --function-name {{my-web-app}} \
      --build-config '{
        "codeConfig": {
          "s3Object": {
            "bucket": "{{my-bucket}}",
            "key": "{{my-app.zip}}",
            "versionId": "{{abc123def456}}"
          }
        },
        "runtimeConfig": { "runtime": "nodejs24.x" }
      }' \
      --service-config '{
        "executionRoleArn": "arn:aws:iam::{{111122223333}}:role/{{my-web-function-role}}"
      }'
  ```

  Durch die Angabe `versionId` binden Sie die Revision an eine exakte Version des Objekts und nicht an die neueste Version.

## Lebenszyklus eines Objekts
<a name="web-functions-code-s3-lifecycle"></a>

**Löschen Sie keine S3-Objekte und entfernen Sie den Lambda-Zugriff für aktive Revisionen nicht**  
Lambda verweist auf Ihren Code aus Ihrem Amazon S3 S3-Bucket. Wenn Sie das S3-Objekt löschen, das eine Revision verwendet, oder die spezifische Objektversion, die die Revision verwendet, wechselt die Revision in den `Failed` Zustand, in dem Lambda das nächste Mal den Zugriff auf das Objekt überprüft, und kann dann keinen Datenverkehr mehr bereitstellen. Behalten Sie die Objektversionen für alle Revisionen bei, die Sie noch verwenden.  
Das Entfernen des Zugriffs des Lambda-Serviceprinzipals auf den Bucket hat den gleichen Effekt. Wenn Sie die Bucket-Richtlinie so ändern, dass sie die `s3:GetObjectVersion` Berechtigungen verweigert oder entfernt `s3:GetObject``lambda.amazonaws.com`, werden bestehende Revisionen, die auf Objekte in diesem Bucket verweisen, in den `Failed` Status versetzt. Behalten Sie sowohl die Objekte als auch den Lesezugriff des Lambda-Serviceprinzipals bei, solange eine Revision auf diese Objekte verweist.  
Der `Failed` Zustand ist dauerhaft. Durch das Wiederherstellen des gelöschten Objekts oder der Bucket-Berechtigungen wird der `Active` Status einer Version nicht wiederhergestellt. Erstellen Sie zur Wiederherstellung eine neue Revision, die auf eine verfügbare Objektversion verweist, und aktualisieren Sie dann die Revisionsgewichte Ihrer Endpunkte, um den Datenverkehr dorthin weiterzuleiten. Informationen zu Bereitstellungsmustern finden Sie unter. [Bereitstellungsmuster](web-functions-deployment.md)

Lambda verlagert den Verkehr nicht automatisch von einer `Failed` Revision weg. Anfragen, die ein Endpunkt an eine `Failed` Revision weiterleitet, werden mit dem HTTP-Statuscode 409 und dem `lambda-web-error-type` Antwortheader von `Platform.RevisionNotActive` abgelehnt. Wenn der Endpunkt den Datenverkehr auf mehrere Revisionen verteilt, ist nur der Anteil der Anfragen betroffen, die an die `Failed` Revision weitergeleitet wurden. Anfragen, die an fehlerfreie Versionen weitergeleitet werden, werden normal bearbeitet. Um die Ausfälle zu verhindern, aktualisieren Sie die Revisionsgewichte des Endpunkts, um die Revision zu entfernen. `Failed`

Wenn Sie das Objekt mit einem neuen Upload überschreiben, wird eine neue S3-Version erstellt. Dies wirkt sich nicht auf bestehende Revisionen aus: Wenn Sie eine Revision erstellen, löst Lambda die genaue Objektversion auf und pinnt sie an, auch wenn Sie sie weglassen. `versionId` Wenn Sie jedoch eine alte Objektversion löschen, auf die eine Revision verweist, wechselt diese Revision in den Status. `Failed` Das Hochladen eines Ersatzobjekts hilft nicht, da es sich bei dem Ersatz um eine neue Version mit einer anderen Versions-ID handelt.

## Multi-Region Bereitstellungen
<a name="web-functions-code-s3-multi-region"></a>

Für Webfunktionen mit `MultiRegion` oder `PerRegion` Endpunkten liest Lambda Ihr Quellobjekt aus dem von Ihnen angegebenen Bucket, unabhängig davon, in welcher Region sich der Bucket befindet. Lambda repliziert dann das vorbereitete Codeartefakt, das es von diesem Objekt ableitet, in die anderen Regionen. Sie müssen Ihr Bereitstellungspaket nicht in Buckets in anderen Regionen kopieren. Weitere Informationen darüber, was Lambda repliziert, finden Sie unter. [Was Lambda repliziert](web-functions-endpoint-replication.md#web-functions-endpoint-replication-what)