Quiero usar eventos S3 para publicar en AWS Lambda cada vez que se carga un archivo de video (.mp4), para que pueda comprimirse. El problema es que la ruta al archivo de video se almacena en RDS, por lo que quiero que la ruta siga siendo la misma después de la compresión. Por lo que he leído, reemplazar el archivo volverá a llamar al evento Object Created que conduce a un bucle infinito.
¿Hay alguna forma de reemplazar el archivo sin desencadenar ningún evento? ¿Cuáles son mis opciones?
Tienes razón en que no puedes distinguir completamente. De la documentación se admiten los siguientes eventos:
s3:ObjectCreated:Put se creó un objeto mediante una operación HTTP PUT.s3:ObjectCreated:Post la operación HTTP POST creó un objeto.s3:ObjectCreated:Copy se creó un objeto en una operación de copia de S3.s3:ObjectCreated:CompleteMultipartUpload se creó un objeto al completar una carga de varias partes de S3.s3:ObjectCreated:* : un objeto fue creado por uno de los tipos de eventos enumerados anteriormente o por un evento de creación de objetos similar agregado en el futuro.s3:ReducedRedundancyObjectLost se ha perdido un objeto de S3 almacenado con Redundancia reducida.La arquitectura que generalmente vería para este tipo de problema es tener 2 cubos S3
Al hacer esto, puede almacenar el original y volver a ejecutarlo si es necesario para la autocorrección.
Hay una solución desagradable a este problema, que no está documentada en ninguna parte.
El parámetro de event en la función Lambda contiene un dict userIdentity que contiene principalId . Para un evento que se originó debido a AWS Lambda (como actualizar el objeto S3 como se menciona en la pregunta), este principalId contiene el nombre de la función lambda adjunta al final.
Por lo tanto, al verificar el principalId se puede deducir si el evento proviene de Lambda o no y, en consecuencia, si se comprime o no.