Invocar uma função do Lambda com eventos em lote do Amazon S3
É possível usar operações em lote do Amazon S3 para invocar uma função do Lambda em um grande conjunto de objetos do Amazon S3. O Amazon S3 rastreia o andamento das operações em lote, envia notificações e armazena um relatório de conclusão que mostra o status de cada ação.
Para executar uma operação em lote, crie um Amazon S3trabalho de operações em lote. Ao criar o trabalho, forneça um manifesto (a lista de objetos) e configure a ação a ser executada nesses objetos.
Quando o trabalho em lote é iniciado, o Amazon S3 invoca a função do Lambda de forma síncrona para cada objeto no manifesto. O parâmetro do evento inclui os nomes do bucket e do objeto.
O exemplo a seguir mostra o evento que o Amazon S3 envia à função do Lambda para um objeto denominado customerImage1.jpg no bucket amzn-s3-demo-bucket.
exemplo Eventos de solicitação em lote do Amazon S3
{ "invocationSchemaVersion": "1.0", "invocationId": "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "job": { "id": "f3cc4f60-61f6-4a2b-8a21-d07600c373ce" }, "tasks": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "s3Key": "customerImage1.jpg", "s3VersionId": "1", "s3BucketArn": "arn:aws:s3:::amzn-s3-demo-bucket" } ] }
A função do Lambda deve retornar um objeto JSON com os campos, conforme mostrado no exemplo a seguir. É possível copiar o invocationId
e taskId
do parâmetro do evento. Você pode retornar uma string noresultString
. O Amazon S3 salva oresultString
no relatório de conclusão.
exemplo Resposta em lote do Amazon S3
{ "invocationSchemaVersion": "1.0", "treatMissingKeysAs" : "PermanentFailure", "invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "results": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "resultCode": "Succeeded", "resultString": "[\"Alice\", \"Bob\"]" } ] }
Invocar funções do Lambda de operações em lote do Amazon S3
É possível invocar a função do Lambda com um ARN de função qualificado ou não qualificado. Se você quiser usar a mesma versão de função para todo o trabalho em lote, configure uma versão de função específica no parâmetro FunctionARN
ao criar o trabalho. Se você configurar um alias ou o qualificador $LATEST, o trabalho em lote começará imediatamente a chamar a nova versão da função se o alias ou $LATEST for atualizado durante a execução do trabalho.
Observe que não é possível reutilizar uma função baseada em evento do Amazon S3 para operações em lote. Isso ocorre, pois a operação em lote do Amazon S3 transmite um parâmetro de evento diferente para a função do Lambda e espera uma mensagem de retorno com uma estrutura JSON específica.
Na política baseada em recursos criada para o trabalho em lote do Amazon S3, verifique se você definiu a permissão para o trabalho invocar a função do Lambda.
Na função de execução da função, defina uma política de confiança para que o Amazon S3 assuma a função quando ele executar a função.
Se a função usar o AWS SDK para gerenciar recursos do Amazon S3, será necessário adicionar permissões do Amazon S3 na função de execução.
Quando o trabalho é executado, o Amazon S3 inicia várias instâncias de função para processar os objetos do Amazon S3 em paralelo, até oLimite de simultaneidadeda função do. O Amazon S3 limita a aceleração de instâncias para evitar custo em excesso para trabalhos menores.
Se a função do Lambda retornar um código de resposta TemporaryFailure
, o Amazon S3 tentará novamente realizar a operação.
Para obter mais informações sobre como gerenciar operações em lote do Amazon S3, consulte Executar operações em lote no Guia do desenvolvedor do Amazon S3.
Para obter um exemplo de como usar uma função do Lambda nas operações em lote do Amazon S3, consulte Invocar uma função do Lambda de operações em lote do Amazon S3 no Guia do desenvolvedor do Amazon S3.