Automatisieren Sie das S3 Object Lambda-Setup mit einer Vorlage CloudFormation - Amazon Simple Storage Service

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.

Automatisieren Sie das S3 Object Lambda-Setup mit einer Vorlage CloudFormation

Sie können eine AWS CloudFormation Vorlage verwenden, um schnell einen Amazon S3 Object Lambda Access Point zu erstellen. Die CloudFormation Vorlage erstellt automatisch relevante Ressourcen, konfiguriert AWS Identity and Access Management (IAM) -Rollen und richtet eine AWS Lambda Funktion ein, die Anfragen automatisch über den Object Lambda Access Point verarbeitet. Mit der CloudFormation Vorlage können Sie bewährte Verfahren implementieren, Ihre Sicherheitslage verbessern und Fehler reduzieren, die durch manuelle Prozesse verursacht werden.

Dieses GitHub Repository enthält die CloudFormation Vorlage und den Quellcode der Lambda-Funktion. Anweisungen zur Verwendung der Vorlage finden Sie unter Erstellen von Objekt-Lambda-Zugriffspunkten.

Die in der Vorlage bereitgestellte Lambda-Funktion führt keine Transformation aus. Stattdessen gibt sie Ihre Objekte im Ist-Zustand aus Ihrem S3-Bucket zurück. Sie können die Funktion klonen und Ihren eigenen Transformationscode hinzufügen, um Daten zu ändern und zu verarbeiten, wenn sie an eine Anwendung zurückgegeben werden. Weitere Informationen zum Anpassen Ihrer Funktion finden Sie unter Ändern der Lambda-Funktion und Schreiben von Lambda-Funktionen für S3 Object Lambda Access Points.

Ändern der Vorlage

Erstellen eines neuen unterstützenden Zugriffspunkts

S3 Object Lambda verwendet zwei Zugriffspunkte, einen Object Lambda Access Point und einen standardmäßigen S3-Zugriffspunkt, der als unterstützender Zugriffspunkt bezeichnet wird. Wenn Sie eine Anforderung an einen Object Lambda Access Point ausführen, ruft S3 entweder Lambda in Ihrem Namen auf oder delegiert die Anforderung an den unterstützenden Zugriffspunkt, abhängig von der Konfiguration von S3 Object Lambda. Sie können einen neuen unterstützenden Zugriffspunkt erstellen, indem Sie den folgenden Parameter als Teil des aws cloudformation deploy-Befehls, der beim Bereitstellen der Vorlage erstellt werden soll, übergeben.

CreateNewSupportingAccessPoint=true
Konfigurieren einer Nutzlast-Funktion

Sie können eine Nutzlast konfigurieren, um der Lambda-Funktion zusätzliche Daten bereitzustellen, indem Sie beim Bereitstellen der Vorlage den folgenden Parameter als Teil des aws cloudformation deploy-Befehls übergeben.

LambdaFunctionPayload="format=json"
CloudWatch Amazon-Überwachung aktivieren

Sie können die CloudWatch Überwachung aktivieren, indem Sie bei der Bereitstellung der Vorlage den folgenden Parameter als Teil des aws cloudformation deploy Befehls übergeben.

EnableCloudWatchMonitoring=true

Dieser Parameter aktiviert die Anforderungsmetriken Ihres Object Lambda Access Point für Amazon S3 und erstellt zwei CloudWatch Alarme zur Überwachung von clientseitigen und serverseitigen Fehlern.

Anmerkung

Für die CloudWatch Nutzung durch Amazon fallen zusätzliche Kosten an. Weitere Informationen zu Amazon-S3-Anforderungsmetriken finden Sie unter Überwachen und Protokollieren von Zugriffspunkten.

Details zu den Preisen finden Sie unter CloudWatch -Preise.

Konfigurieren von Provisioned Concurrency

Zur Reduzierung der Latenz können Sie bereitgestellte Parallelität für die Lambda-Funktion konfigurieren, die den Object Lambda Access Point unterstützt, indem Sie die Vorlage so bearbeiten, dass sie die folgenden Zeilen unter Resources einschließt.

LambdaFunctionVersion: Type: AWS::Lambda::Version Properties: FunctionName: !Ref LambdaFunction ProvisionedConcurrencyConfig: ProvisionedConcurrentExecutions: Integer
Anmerkung

Für die Bereitstellung von Nebenläufigkeit fallen zusätzliche Gebühren an. Weitere Informationen zur bereitgestellten Parallelität finden Sie unter Verwalten der von Lambda bereitgestellten Parallelität im AWS Lambda -Entwicklerhandbuch.

Details zu den Preisen finden Sie unter AWS Lambda -Preise.

Ändern der Lambda-Funktion

Ändern der Header-Werte für eine GetObject-Anforderung

Standardmäßig leitet die Lambda-Funktion alle Header außer Content-Length und ETag von der vorsignierten URL Anfrage an den Client weiter. GetObject Basierend auf Ihrem Transformationscode in der Lambda-Funktion können Sie wählen, ob Sie neue Header-Werte an den GetObject-Client senden.

Sie können Ihre Lambda-Funktion aktualisieren, um neue Header-Werte zu senden, indem Sie sie in der WriteGetObjectResponse API Operation übergeben.

Wenn Ihre Lambda-Funktion beispielsweise den Text in Amazon-S3-Objekten in eine andere Sprache übersetzt, können Sie einen neuen Wert im Content-Language-Header bestätigen. Ändern Sie die writeResponse-Funktion dazu wie folgt:

async function writeResponse (s3Client: S3, requestContext: GetObjectContext, transformedObject: Buffer, headers: Headers): Promise<PromiseResult<{}, AWSError>> { const { algorithm, digest } = getChecksum(transformedObject); return s3Client.writeGetObjectResponse({ RequestRoute: requestContext.outputRoute, RequestToken: requestContext.outputToken, Body: transformedObject, Metadata: { 'body-checksum-algorithm': algorithm, 'body-checksum-digest': digest }, ...headers, ContentLanguage: 'my-new-language' }).promise(); }

Eine vollständige Liste der unterstützten Header finden Sie WriteGetObjectResponsein der Amazon Simple Storage Service API Reference.

Zurückgeben von Metadaten Headern

Sie können Ihre Lambda-Funktion aktualisieren, um neue Header-Werte zu senden, indem Sie sie in der WriteGetObjectResponseAPIOperationsanforderung übergeben.

async function writeResponse (s3Client: S3, requestContext: GetObjectContext, transformedObject: Buffer, headers: Headers): Promise<PromiseResult<{}, AWSError>> { const { algorithm, digest } = getChecksum(transformedObject); return s3Client.writeGetObjectResponse({ RequestRoute: requestContext.outputRoute, RequestToken: requestContext.outputToken, Body: transformedObject, Metadata: { 'body-checksum-algorithm': algorithm, 'body-checksum-digest': digest, 'my-new-header': 'my-new-value' }, ...headers }).promise(); }
Einen neuen Statuscode zurückgeben

Sie können einen benutzerdefinierten Statuscode an den GetObject Client zurückgeben, indem Sie ihn in der WriteGetObjectResponseAPIBetriebsanforderung übergeben.

async function writeResponse (s3Client: S3, requestContext: GetObjectContext, transformedObject: Buffer, headers: Headers): Promise<PromiseResult<{}, AWSError>> { const { algorithm, digest } = getChecksum(transformedObject); return s3Client.writeGetObjectResponse({ RequestRoute: requestContext.outputRoute, RequestToken: requestContext.outputToken, Body: transformedObject, Metadata: { 'body-checksum-algorithm': algorithm, 'body-checksum-digest': digest }, ...headers, StatusCode: Integer }).promise(); }

Eine vollständige Liste der unterstützten Statuscodes finden Sie WriteGetObjectResponsein der Amazon Simple Storage Service API Reference.

Anwenden der Parameter Range und partNumber auf das Quellobjekt

Standardmäßig kann der von der CloudFormation Vorlage erstellte Object Lambda Access Point die partNumber Parameter Range und verarbeiten. Die Lambda-Funktion wendet den Bereich oder die Teilenummer an, die auf das transformierte Objekt angefordert wird. Dazu muss die Funktion das gesamte Objekt herunterladen und die Transformation ausführen. In einigen Fällen werden Ihre transformierten Objektbereiche möglicherweise genau Ihren Quellobjektbereichen zugeordnet. Dies bedeutet, dass das Anfordern des Bytebereichs A-B für Ihr Quellobjekt und das Ausführen der Transformation zum gleichen Ergebnis führen kann, wie das Anfordern des gesamten Objekts, das Ausführen der Transformation und das Zurückgeben des Bytebereichs A-B für das transformierte Objekt.

In solchen Fällen können Sie die Implementierung der Lambda-Funktion ändern, um den Bereich oder die Teilenummer direkt auf das Quellobjekt anzuwenden. Dieser Ansatz verbessert die allgemeine Funktionslatenz und den erforderlichen Speicher. Weitere Informationen finden Sie unter Arbeitet mit Range and partNumber Header.

Deaktivieren der Verarbeitung von Range und partNumber

Standardmäßig kann der von der CloudFormation Vorlage erstellte Object Lambda Access Point die partNumber Parameter Range und verarbeiten. Wenn Sie dieses Verhalten nicht benötigen, können Sie es deaktivieren, indem Sie die folgenden Zeilen aus der Vorlage entfernen.

AllowedFeatures: - GetObject-Range - GetObject-PartNumber - HeadObject-Range - HeadObject-PartNumber
Transformieren von großen Objekten

Standardmäßig verarbeitet die Lambda-Funktion das gesamte Objekt im Speicher, bevor es mit dem Streamen der Antwort auf S3 Object Lambda beginnen kann. Sie können die Funktion ändern, um die Antwort zu streamen, während sie die Transformation durchführt. Dies hilft, die Transformationslatenz und die Speichergröße der Lambda-Funktion zu reduzieren. Eine Beispielimplementierung finden Sie unter Beispiel für komprimierte Inhalte streamen.