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
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'WriteGetObjectResponse
APIopé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 WriteGetObjectResponse
le 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'WriteGetObjectResponse
APIopé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 WriteGetObjectResponse
APId'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 WriteGetObjectResponse
en 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é).