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 é invocada quando o evento do Amazon S3 ocorre.
Descrição breve
Para solucionar problemas, use o runbook do AWSSupport-TroubleshootLambdaS3Event para AWS Systems Manager Automation. Ou solucione manualmente os problemas da função do Lambda.
Resolução
Execute o runbook do Systems Manager Automation
Pré-requisito: Antes de iniciar o runbook, certifique-se de que seu usuário ou perfil do AWS Identity and Access Management (IAM) tenha as permissões necessárias. Para obter mais informações, consulte a seção Permissões obrigatórias do IAM em AWSSupport-TroubleshootLambdaS3Event.
Conclua as seguintes etapas:
-
Abra o console do Systems Manager.
-
No painel de navegação, escolha Documentos.
-
Na barra de pesquisa, digite AWSSupport-TroubleshootLambdaS3Event.
-
Selecione AWSSupport-TroubleshootLambdAS3Event.
-
Escolha Executar automação.
-
Escolha Executar.
Observação: O teste pode demorar até 15 minutos para ser concluído. Para obter uma lista das etapas executadas pelo runbook, consulte a seção Etapas do documento do AWSSupport-TroubleshootLambdaS3Event.
Solucionar manualmente os problemas da função do Lambda
Observação: Se você receber mensagens de erro ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Confirmar se os tipos de evento do Amazon S3 estão configurados 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. Outra opção é usar o tipo de evento s3:ObjectCreated:* para solicitar notificações para cada API utilizada pelo Amazon S3 para criar um objeto.
Confirmar 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. Além disso, certifique-se de que sua função do Lambda esteja na mesma região da AWS que seu bucket do S3.
Observação: Não é possível usar um caractere curinga (*) nos filtros como prefixo ou sufixo para representar um caractere.
Para filtrar nomes de chaves de objetos, determinados caracteres especiais em seus prefixos ou sufixos devem ser codificados em URL ou 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.
Confirme 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 IAM da sua função do Lambda para confirmar 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 Gerenciar 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, a política da sua função não será atualizada automaticamente.
Confirme se suas funções do Lambda estão configuradas 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
Como posso usar o AWS Systems Manager Automation para solucionar problemas quando minha notificação de evento do Amazon S3 não invoca uma função do Lambda?
Processar notificações de eventos do Amazon S3 com o Lambda
Tutorial: Usar um gatilho do Amazon S3 para invocar uma função do Lambda
Por que recebo a mensagem de erro "Não é possível validar as configurações de destino a seguir" quando uso as Notificações de evento do Amazon S3 com buckets de uso geral?
Como configuro uma notificação de eventos do Amazon S3 para invocar uma função do Lambda que está em outra conta da AWS?