So verwenden Sie AWS Object Lambda zum Transformieren von S3-Objekten auf Anfrage

0
163

Mit Object Lambda können Sie eine Lambda-Funktion vor S3-Objekten platzieren sie können auf Anfrage durch Ihren eigenen benutzerdefinierten Code umgewandelt werden. Da es automatisch auf Lambda ausgeführt wird, müssen Sie sich nicht um die Ausführung Ihres eigenen Proxy-Layers kümmern.

Was ist Object Lambda?

Object Lambda tritt grundsätzlich an die Stelle einer API vor S3. Zuvor mussten Sie in Ihrer eigenen Infrastruktur einen Proxy-Layer einrichten, um die Transformation von Objekten auf Anfrage zu verarbeiten. Dies erhöht die Komplexität, sodass AWS eine bessere Lösung hinzugefügt hat.

VERWANDTE: Was sind Lambda-Funktionen und wie werden sie verwendet?

Anstatt direkt auf Objekte zuzugreifen, tun Sie dies über einen Object Lambda Access Point. Wenn Sie eine GET-Anfrage für eine Datei in einem S3-Bucket stellen, wird die Lambda-Funktion für diesen Zugriffspunkt automatisch aufgerufen, darf auf das ursprüngliche Objekt zugreifen und ein transformiertes Objekt an die Anwendung zurückgeben.

Die Verwendungszwecke dafür können grundlegend sein, wie das Schwärzen von Informationen oder das Konvertieren von JSON in XML, aber da es sich um Ihren eigenen Code handelt, können Sie tun, was Sie möchten. Sie könnten beispielsweise eine Datenbanksuche ausführen und ein transformiertes Objekt mit neuen Daten zurückgeben oder Anfragen an externe APIs stellen.

Sie können mehrere Zugriffspunkte pro Bucket haben, die jeweils mehrere &#8220 . darstellen können ;Aufrufe” der zugrunde liegenden Daten. Um verschiedene Zugangspunkte zu verwenden, müssen Sie keinen Client-Code aktualisieren. Ändern Sie einfach den Bucket-Namen in den ARN des Object Lambda Access Point.

s3.get_object( Bucket='arn:aws:s3-object-lambda:us-east-1:123412341234:accesspoint/myolap', Key ='s3.txt' )

Sie müssen auch nicht über den genauen Namen auf das ursprüngliche Objekt zugreifen. Ihre Anwendung könnte beispielsweise picture_1920x1080.jpg anfordern, die picture.jpg findet und auf die angegebenen Abmessungen skaliert. In diesem Fall benötigt die Lambda-Funktion zusätzliche Berechtigungen, um auf den Bucket-Inhalt zuzugreifen.

Natürlich müssen Sie für die gesamte Zeit bezahlen, die Sie mit der Ausführung von Lambda-Funktionen verbringen. Wenn Sie viele Funktionen über einen benutzerorientierten Zugriffspunkt ausführen, kann sich dies summieren. Wenn Ihre Transformationen statisch sind, sollten Sie die Objekte in einem separaten S3-Bucket zwischenspeichern. Wenn Sie beispielsweise über eine Funktion verfügen, die Filter/Komprimierung auf ein Bild anwendet, möchten Sie die Ergebnisse möglicherweise zwischenspeichern, anstatt sie bei jeder Anforderung neu zu erstellen. Für Dinge, die vom externen Status abhängen, ist dies jedoch nicht möglich.

VERWANDTE: So sichern Sie einen S3-Bucket (und warum Sie dies tun sollten) Ich möchte sogar)

Objekt-Lambda verwenden

Rufen Sie die S3-Verwaltungskonsole auf, um zu beginnen. Jeder Object Lambda Access Point benötigt einen regulären Access Point dahinter. Sie müssen dies über Access Points > In der Seitenleiste erstellen.

Geben Sie einen Namen ein und wählen Sie a Bucket, und wählen Sie “Internet” es sei denn, dieser Bucket ist auf eine einzelne VPC beschränkt. Kopieren Sie nach der Erstellung den ARN für den Zugangspunkt.

Objekt-Lambda-Zugriffspunkt erstellen:

Geben Sie ihm einen Namen und fügen Sie ihn in den ARN des Access Points ein, und die Konsole sollte den Namen anzeigen display des zugrunde liegenden Buckets.

An dieser Stelle müssen Sie eine Lambda-Funktion auswählen. Wenn Sie einen vorbereitet haben, können Sie den ARN eingeben oder aus der Liste auswählen. Andernfalls müssen Sie zur Lambda Management Console wechseln, um eine zu erstellen.

An dieser Stelle liegt der Code bei Ihnen, obwohl AWS das folgende Beispiel bereitstellt, das das ursprüngliche Objekt in Großbuchstaben umwandelt. Unabhängig davon, welche Sprache Sie letztendlich verwenden, müssen Sie den Ereigniskontext erfassen, mithilfe der URL eine Anfrage an S3 stellen, das Objekt transformieren und dann die Antwort mit der neuen WriteGetObjectResponse-API schreiben und einen HTTP-Statuscode zurückgeben danach.

import boto3 import Requests def lambda_handler(event, context): print(event) object_get_context = event[“getObjectContext”] request_route = object_get_context[“outputRoute”] request_token = object_get_context[“outputToken”] s3_url = object_get_context[“inputS3Url Objekt aus S3 response = request.get(s3_url) original_object = response.content.decode('utf-8') # Objekt transformieren transform_object = original_object.upper() # Objekt zurück in S3 Object Lambda s3 = boto3.client(' s3') s3.write_get_object_response( Body=transformed_object, RequestRoute=request_route, RequestToken=request_token) return {'status_code': 200}

Das Ereignisobjekt, das Lambda empfängt, sieht in etwa so aus:

{ “xAmzRequestId”: “1a5ed718-5f53-471d-b6fe-5cf62d88d02a”, “getObjectContext”: { “inputS3Url”: “https://myap-123412341234.s3-accesspoint.us-east-1.amazonaws.com/s3 .txt?X-Amz-Security-Token=…”, “outputRoute”: “io-iad-cell001”, “outputToken”: “…” }, “configuration”: { “accessPointArn”: “arn :aws:s3-object-lambda:us-east-1:123412341234:accesspoint/myolap”, “supportingAccessPointArn”: “arn:aws:s3:us-east-1:123412341234:accesspoint/myap”, “payload”: “test” }, “userRequest”: { “url”: “/s3.txt”, “headers”: { “Host”: “myolap-123412341234.s3-object-lambda.us-east-1.amazonaws.com “, “Accept-Encoding”: “identity”, “X-Amz-Content-SHA256”: “e3b0c44297fc1c149afbf4c8995fb92427ae41e4649b934ca495991b7852b855” } }, “userIdentity”: { “type”: “IAMId”: “…” , “arn”: “arn:aws:iam::123412341234:user/myuser”, “accountId”: “123412341234”, “accessKeyId”: “…” }, “protocolVersion”: “1.00” }

Hier gibt es zwei wichtige Informationen: den Abschnitt “Benutzeranfrage”, der Informationen über . enthält die erste Anfrage, wie URL- und HTTP-Header, und der Abschnitt “userIdentity”, der verwendet werden kann, um die Antwort basierend auf dem IAM-Nutzer zu personalisieren.

VERWANDTE: AWS IAM-Nutzer Gegen. IAM-Rollen: Welche sollten Sie verwenden?