

# Invocar uma função do Lambda com eventos em lote do Amazon S3
<a name="services-s3-batch"></a>

É 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 S3[trabalho de operações em lote](https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-operations.html). 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](invocation-sync.md) 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**.

**Example 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 no `resultString`. O Amazon S3 salva o`resultString`no relatório de conclusão. 

**Example 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
<a name="invoking"></a>

É 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 \$1LATEST, o trabalho em lote começará imediatamente a chamar a nova versão da função se o alias ou \$1LATEST 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](access-control-resource-based.md) 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-iam-role-policies.html) 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](lambda-concurrency.md)da 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](https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops.html) 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](https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-invoke-lambda.html) no *Guia do desenvolvedor do Amazon S3*. 