Como soluciono problemas quando minhas notificações de eventos do Amazon S3 não invocam minha função do Lambda?
Eu configurei notificações de eventos do Amazon Simple Storage Service (Amazon S3) para invocar minha função do AWS Lambda. No entanto, a função não invoca quando ocorre o evento do Amazon S3.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Verifique se o tipo de evento do Amazon S3 está configurado corretamente
Ao configurar as notificações de eventos do S3, você deve especificar cada tipo de evento que faz com que o Amazon S3 envie a notificação. Se um tipo de evento que você não especificou ocorrer em seu bucket do Amazon S3, o Amazon S3 não enviará a notificação.
Por exemplo, você configura uma notificação de evento para invocar o Lambda com o tipo de evento s3:ObjectCreated:Put. Se você fizer upload de um arquivo grande, o Amazon S3 usará automaticamente o processo de upload multiparte para carregar o arquivo no bucket. Para invocar a função do Lambda para esse upload, você também deve configurar o tipo de evento s3:ObjectCreated:CompleteMultipartUpload. Ou use o tipo de evento s3:ObjectCreated:* para solicitar notificações para cada API que o Amazon S3 usa para criar um objeto.
Verifique se seus filtros de nome de chave de objeto incluem o nome do arquivo carregado
Se suas notificações de eventos do S3 usarem filtragem de nomes de chaves de objetos, o Amazon S3 publicará notificações somente para objetos com prefixos ou sufixos específicos. Certifique-se de que os filtros de prefixo ou sufixo especificados na notificação do evento incluam o nome da chave do objeto carregado.
Observação: não é possível usar um caractere curinga (*) nos filtros como prefixo ou sufixo para representar qualquer caractere.
Para filtrar nomes de chaves de objetos, determinados caracteres especiais em seus prefixos ou sufixos devem ser codificados em URL (codificados em porcentagem). Por exemplo, para definir o valor de um prefixo como test=abc/, digite o valor codificado por URL test%3Dabc/.
Para obter mais informações sobre o tratamento específico de caracteres em nomes de chaves de objetos, consulte Diretrizes de nomenclatura de chaves de objetos.
Verifique se a política baseada em recursos do IAM da sua função do Lambda tem as permissões necessárias para que o Amazon S3 invoque a função
Verifique a política baseada em recursos do AWS Identity and Access Management (AWS IAM) da sua função do Lambda para verificar se a política permite que seu bucket invoque a função. Se o bucket não conseguir invocar a função, adicione a política necessária.
Exemplo de política:
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "lambda-allow-s3-my-function", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "AWS:SourceAccount": "123456789012" }, "ArnLike": { "AWS:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket" } } } ] }
Para obter mais informações, consulte Gerenciamento de permissões no AWS Lambda.
Observação: Quando você usa o console do Amazon S3 para adicionar uma nova notificação de evento, o Amazon S3 adiciona automaticamente as permissões necessárias à política baseada em recursos da sua função. No entanto, se você usar o comando put-bucket-notification-configuration da AWS CLI para adicionar uma notificação de evento, então a política da sua função não será atualizada automaticamente.
Verifique se sua função do Lambda está configurada para lidar com invocações simultâneas de notificações de eventos do S3
Você deve configurar sua função do Lambda para lidar com invocações simultâneas das notificações de eventos do S3. Se as solicitações de invocação chegarem mais rápido do que sua função pode escalar, ou se sua função estiver na máxima simultaneidade, o Lambda limitará as solicitações.
Para obter mais informações, consulte Invocar uma função do Lambda de forma assíncrona.
Informações relacionadas
Processe notificações de eventos do Amazon S3 com o Lambda
Tutorial: usar um gatilho do Amazon S3 para invocar uma função do Lambda
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano