AllInfo

Comment utiliser AWS Object Lambda pour transformer des objets S3 sur demande

L'objet Lambda permet de placer une fonction Lambda devant les objets S3, ce qui permet de les transformer à la demande en votre propre code personnalisé. Comme il s'exécute automatiquement sur Lambda, vous n'avez pas à vous soucier de l'exécution de votre propre couche proxy.

Qu'est-ce que Object Lambda ?

Object Lambda prend essentiellement la place d'une API devant S3. Auparavant, vous deviez configurer une couche proxy sur votre propre infrastructure pour gérer la transformation des objets à la demande. Cela ajoute de la complexité, c'est pourquoi AWS a ajouté une meilleure solution.

CONNEXES : Que sont les fonctions Lambda et comment les utilisez-vous ?

Au lieu d'accéder directement aux objets, vous le ferez via un point d'accès Object Lambda. Lorsque vous effectuez une demande GET pour un fichier dans un compartiment S3, la fonction Lambda pour ce point d'accès est automatiquement appelée, autorisée à accéder à l'objet d'origine et renvoie un objet transformé à l'application.

Les utilisations pour cela peuvent être basiques, comme la rédaction d'informations ou la conversion de JSON en XML, mais comme il s'agit de votre propre code, vous pouvez faire ce que vous voulez. Vous pouvez, par exemple, exécuter une recherche dans la base de données et renvoyer un objet transformé avec de nouvelles données, ou envoyer des requêtes à des API externes.

Vous pouvez avoir plusieurs points d'accès par compartiment, qui peuvent chacun représenter plusieurs &#8220 ;vues” des données sous-jacentes. Pour utiliser différents points d'accès, vous n'aurez pas besoin de mettre à jour le code client. Remplacez simplement le nom du compartiment par l'ARN du point d'accès Object Lambda.

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

Vous n'avez pas non plus besoin d'accéder à l'objet d'origine par le nom exact. Par exemple, votre application peut demander picture_1920x1080.jpg, qui trouvera picture.jpg et la redimensionnera aux dimensions données. Dans ce cas, la fonction Lambda aurait besoin d'autorisations supplémentaires pour accéder au contenu du compartiment.

Bien sûr, vous devrez payer pour tout le temps passé à exécuter les fonctions Lambda. Si vous exécutez de nombreuses fonctions via un point d'accès utilisateur, cela peut commencer à s'accumuler. Si vos transformations sont statiques, vous pouvez envisager de mettre en cache les objets dans un compartiment S3 distinct. Par exemple, si vous disposez d'une fonction qui applique des filtres/une compression à une image, vous souhaiterez peut-être mettre en cache les résultats au lieu de reconstruire à chaque demande. Pour les choses qui dépendent de l'état externe, cependant, cela ne sera pas possible.

CONNEXES : Comment sauvegarder un compartiment S3 (et pourquoi vous voudriez Même envie)

Utilisation de l'objet Lambda

Rendez-vous sur la console de gestion S3 pour commencer. Chaque point d'accès Object Lambda a besoin d'un point d'accès régulier derrière lui. Vous devrez le créer à partir des points d'accès > Créez dans la barre latérale.

Entrez un nom et sélectionnez un compartiment, et assurez-vous de sélectionner “Internet” à moins que ce bucket ne soit limité à un seul VPC. Une fois qu'il est créé, copiez l'ARN du point d'accès.

Créer un point d'accès Objet Lambda :

Donnez-lui un nom et collez-le dans l'ARN du point d'accès, et la console devrait afficher le nom du compartiment sous-jacent.

À ce stade, vous devrez sélectionner une fonction Lambda. Si vous en avez un préparé, vous pouvez entrer l'ARN ou le sélectionner dans la liste. Sinon, vous devrez vous rendre sur la console de gestion Lambda pour en créer une.

< p>À ce stade, le code vous appartient, bien qu'AWS fournisse l'exemple suivant, qui prend l'objet d'origine et le transforme en majuscule. Quelle que soit la langue que vous utilisez, vous devrez saisir le contexte de l'événement, faire une demande à S3 à l'aide de l'URL, transformer l'objet, puis écrire la réponse à l'aide de la nouvelle API WriteGetObjectResponse, renvoyant un code d'état HTTP après.

import boto3 import request 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[“inputS3GetS3 objet de la réponse S3 = request.get(s3_url) original_object = response.content.decode('utf-8') # Transformer l'objet transform_object = original_object.upper() # Réécrire l'objet dans l'objet S3 Lambda s3 = boto3.client(' s3') s3.write_get_object_response( Body=transformed_object, RequestRoute=request_route, RequestToken=request_token) return {'status_code' : 200}

L'objet d'événement que Lambda reçoit ressemblera à ceci :

{ “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”: “IAMUser”, “principal” , “arn”: “arn:aws:iam::123412341234:user/myuser”, “accountId”: “123412341234”, “accessKeyId”: “…” }, “protocolVersion”: “1.00” }

Il y a deux informations importantes ici—la section userRequest, qui contient des informations sur la requête initiale, comme les en-têtes d'URL et HTTP, et la section userIdentity, qui peut être utilisée pour personnaliser la réponse en fonction de l'utilisateur IAM.

CONNEXION : Utilisateurs AWS IAM Contre. Rôles IAM : Lequel devriez-vous utiliser ?

Exit mobile version