Usar o AWS Lambda com operações em lote do Amazon S3 - AWS Lambda

Usar o AWS Lambda com operações 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 trabalho de operações em lote do Amazon S3. 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 que é chamado customerImage1.jpg no bucket examplebucket.

exemplo Evento de solicitação de 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:us-east-1:0123456788:examplebucket" } ] }

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. É possível retornar uma string no resultString. O Amazon S3 salva os valores resultString no relatório de conclusão.

exemplo Resposta de solicitação 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é o limite de simultaneidade da função. O Amazon S3 limita a expansão gradual 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 as operações em lote do Amazon S3, consulte Realizar 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.