Automatisez la configuration de S3 Object Lambda à l'aide d'un modèle CloudFormation - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Automatisez la configuration de S3 Object Lambda à l'aide d'un modèle CloudFormation

Vous pouvez utiliser un AWS CloudFormation modèle pour créer rapidement un point d'accès Amazon S3 Object Lambda. Le CloudFormation modèle crée automatiquement les ressources pertinentes, configure AWS Identity and Access Management (IAM) les rôles et met en place une AWS Lambda fonction qui gère automatiquement les demandes via le point d'accès Object Lambda. Ce CloudFormation modèle vous permet de mettre en œuvre les meilleures pratiques, d'améliorer votre niveau de sécurité et de réduire les erreurs causées par les processus manuels.

Ce GitHub référentiel contient le CloudFormation modèle et le code source de la fonction Lambda. Pour obtenir des instructions sur l'utilisation de ce modèle, consultez Création de points d'accès Object Lambda.

La fonction Lambda fournie dans ce modèle n'exécute aucune transformation. Au lieu de cela, elle renvoie vos objets en l'état à partir de votre compartiment S3. Vous pouvez cloner la fonction et ajouter votre propre code de transformation pour modifier et traiter les données lorsqu'elles sont renvoyées vers une application. Pour plus d'informations sur la modification de votre fonction, consultez Modification de la fonction Lambda et Écriture de fonctions Lambda pour les points d'accès S3 Object Lambda.

Modification du modèle.

Création d'un nouveau point d'accès de prise en charge

S3 Object Lambda utilise deux points d'accès, un point d'accès Object Lambda et un point d'accès S3 standard, appelé point d'accès de prise en charge. Lorsque vous effectuez une demande auprès d'un point d'accès Object Lambda, S3 appelle Lambda en votre nom ou délègue la demande au point d'accès de prise en charge, en fonction de la configuration S3 Object Lambda. Vous pouvez créer un nouveau point d'accès de prise en charge en transmettant le paramètre suivant dans le cadre de la commande aws cloudformation deploy lors du déploiement du modèle.

CreateNewSupportingAccessPoint=true
Configuration d'une charge utile de fonction

Vous pouvez configurer une charge utile de manière à fournir des données supplémentaires à la fonction Lambda en transmettant le paramètre suivant dans le cadre de la commande aws cloudformation deploy lors du déploiement du modèle.

LambdaFunctionPayload="format=json"
Activation de la CloudWatch surveillance d'Amazon

Vous pouvez activer la CloudWatch surveillance en transmettant le paramètre suivant dans le cadre de la aws cloudformation deploy commande lors du déploiement du modèle.

EnableCloudWatchMonitoring=true

Ce paramètre active votre point d'accès Object Lambda pour les métriques de demande Amazon S3 et crée deux CloudWatch alarmes pour surveiller les erreurs côté client et côté serveur.

Note

CloudWatch L'utilisation d'Amazon entraînera des coûts supplémentaires. Pour plus d'informations sur les métriques de demande Amazon S3, consultez Surveillance et journalisation des points d'accès.

Pour plus d'informations sur la tarification, consultez Tarification CloudWatch .

Configuration de la simultanéité provisionnée

Pour réduire la latence, vous pouvez configurer la simultanéité provisionnée pour la fonction Lambda qui soutient le point d'accès Object Lambda, en modifiant le modèle afin d'inclure les lignes suivantes sous Resources.

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

Des frais supplémentaires pour le provisionnement simultané vous seront facturés. Pour plus d'informations sur la simultanéité provisionnée, consultez Gestion de la simultanéité provisionnée Lambda dans le Guide du développeur AWS Lambda .

Pour plus d'informations sur la tarification, consultez Tarification AWS Lambda.

Modification de la fonction Lambda

Modification des valeurs d'en-tête d'une requête GetObject

Par défaut, la fonction Lambda transmet tous les en-têtes, sauf Content-Length etETag, de la URL demande présignée au client. GetObject En fonction de votre code de transformation dans la fonction Lambda, vous pouvez choisir d'envoyer de nouvelles valeurs d'en-tête à la demande GetObject du client.

Vous pouvez mettre à jour votre fonction Lambda pour envoyer de nouvelles valeurs d'en-tête en les transmettant dans l'WriteGetObjectResponseAPIopération.

Par exemple, si votre fonction Lambda traduit du texte dans des objets Amazon S3 vers une autre langue, vous pouvez transmettre une nouvelle valeur dans l'en-tête Content-Language. Pour ce faire, vous pouvez modifier la fonction writeResponse comme suit :

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(); }

Pour obtenir la liste complète des en-têtes pris en charge, consultez WriteGetObjectResponsele Amazon Simple Storage Service API Reference.

Renvoi des en-têtes de métadonnées

Vous pouvez mettre à jour votre fonction Lambda pour envoyer de nouvelles valeurs d'en-tête en les transmettant dans la demande d'WriteGetObjectResponseAPIopération.

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(); }
Renvoi d'un nouveau code de statut

Vous pouvez renvoyer un code d'état personnalisé au GetObject client en le transmettant dans la demande WriteGetObjectResponseAPId'opération.

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(); }

Pour obtenir la liste complète des codes d'état pris WriteGetObjectResponseen charge, consultez le Amazon Simple Storage Service API Reference.

Application des paramètres Range et partNumber à l'objet source

Par défaut, le point d'accès Object Lambda créé par le CloudFormation modèle peut gérer les paramètres Range etpartNumber. La fonction Lambda applique la plage ou le numéro de partie demandé à l'objet transformé. Pour ce faire, la fonction doit télécharger l'objet entier et exécuter la transformation. Dans certains cas, vos plages d'objets transformés peuvent correspondre exactement à vos plages d'objets source. Cela signifie que la demande de plage d'octets A-B sur votre objet source et l'exécution de la transformation peuvent fournir le même résultat que la demande de l'objet entier, l'exécution de la transformation et le renvoi de la plage d'octets A-B sur l'objet transformé.

Dans ce cas, vous pouvez modifier l'implémentation de la fonction Lambda pour appliquer la plage ou le numéro de partie directement à l'objet source. Cette approche réduit la latence globale de la fonction ainsi que la mémoire requise. Pour plus d’informations, consultez Travailler avec Range and partNumber headers.

Désactivation de la gestion de Range et partNumber

Par défaut, le point d'accès Object Lambda créé par le CloudFormation modèle peut gérer les paramètres Range etpartNumber. Si vous n'avez pas besoin de ce comportement, vous pouvez le désactiver en supprimant les lignes suivantes du modèle :

AllowedFeatures: - GetObject-Range - GetObject-PartNumber - HeadObject-Range - HeadObject-PartNumber
Transformation de large objets

Par défaut, la fonction Lambda traite l'ensemble de l'objet en mémoire avant de pouvoir commencer à diffuser la réponse vers S3 Object Lambda. Vous pouvez modifier la fonction pour diffuser la réponse au fur et à mesure qu'elle effectue la transformation. Cela permet de réduire la latence de transformation et la mémoire de la fonction Lambda. Pour obtenir un exemple de mise en œuvre, consultez Stream compressed content example (Exemple de diffusion de contenu compressé).