Por que minha função do Lambda configurada com SQS como origem do evento não é invocada?

6 minuto de leitura
0

Eu configurei minha função do AWS Lambda para processar mensagens em uma fila do Amazon Simple Queue Service (Amazon SQS). Porém, a função do Lambda não é invocada e não processa mensagens na fila.

Resolução

Pré-requisitos

  • Confirme se a função do Lambda está configurada com o Amazon SQS como origem do evento.
  • Confirme se o perfil do AWS Identity and Access Management (IAM) da função do Lambda tem as permissões necessárias para buscar mensagens da fila SQS.
  • Verifique as métricas do Amazon CloudWatch relativas à função em busca de invocações e a fila SQS para confirmar se há mensagens disponíveis na fila. Se as mensagens não estiverem visíveis ou não tiverem sido enviadas para a fila SQS, certifique-se de que o produtor tenha as permissões necessárias. O usuário ou perfil deve ter as seguintes permissões do Amazon SQS e do AWS Key Management Service (AWS KMS):
    sqs:SendMessage
    kms:GenerateDataKey
    kms:Decrypt

Observação: se a fila não estiver criptografada, você não precisará de permissões do AWS KMS.

Verifique se a função do Lambda e os URLs da fila SQS estão corretos

Confirme se o nome do recurso da Amazon (ARN) da função do Lambda e o URL da fila SQS no mapeamento da origem do evento na função do Lambda estão corretos. Além disso, ative o mapeamento da origem do evento.

  1. Abra o console do Lambda.
  2. No painel de navegação, escolha Funções.
  3. Selecione a função que você deseja verificar.
  4. Escolha o gatilho do SQS e expanda-o para verificar se o URL da fila SQS está correto. Além disso, confirme se o status do gatilho está ativado. Para obter mais informações, consulte Por que meu gatilho do Lambda Amazon SQS foi desativado?

Para realizar essas verificações, você também pode executar o comando list-event-source-mapping.

Exemplo:

aws lambda list-event-source-mappings --function-name <my-function> --region <region-name>

Observação: substitua <my-function> pelo nome da sua função do Lambda e substitua <region name> pela sua região da AWS.

Verifique as permissões da função do Lambda

Se o perfil do IAM do Lambda tiver permissões para pesquisar mensagens da fila SQS, verifique a política de acesso da fila SQS. Procure regras de negação que possam restringir a função do Lambda.

  1. Abra o console do Amazon SQS.
  2. No painel de navegação, selecione Filas.
  3. Selecione a fila SQS e, em seguida, selecione a guia Política de acesso.
  4. Examine as políticas em busca de políticas de negação que possam bloquear o tráfego do Lambda. Se houver uma política que bloqueie o tráfego, adicione uma condição na instrução de negação para ignorar solicitações provenientes do Lambda.

O perfil do IAM da sua função do Lambda deve ter as seguintes permissões:

  • DeleteMessage
  • GetQueueAttributes
  • ReceiveMessage

Verifique as configurações de criptografia da fila

Se a fila estiver criptografada, o perfil do IAM da função do Lambda precisará das permissões para realizar ações do AWS KMS. Sem as permissões necessárias, a função do Lambda não pode consumir mensagens da fila SQS. Se a fila do Amazon SQS estiver configurada com a criptografia do AWS KMS, conclua as seguintes tarefas:

  • Certifique-se de que a chave do AWS KMS exista.
  • Certifique-se de que a função do Lambda tenha permissões kms:Decrypt.
  • Certifique-se de que as permissões da política de chave do AWS KMS estejam configuradas para permitir ações da função do Lambda.

Observação: as filas do Amazon SQS com a chave padrão (chave do AWS KMS para Amazon SQS) não podem invocar uma função do Lambda em uma conta diferente da AWS.

Verifique se a função do Lambda específica está sofrendo controle de utilização

O Lambda tem um limite de simultaneidade regional. Se outras funções na região da AWS usarem ativamente essa capacidade ao máximo, a função poderá sofrer controle de utilização. Isso pode acontecer mesmo que a função em si não atinja a capacidade máxima.

Se você definir uma simultaneidade reservada como 0 na função, nenhuma invocação ocorrerá na função. Todas as mensagens do Amazon SQS sofrem controle de utilização. Verifique a métrica regional ConcurrentExecutions (máximo) e as métricas Throttle (SUM) da função no Amazon CloudWatch. Verifique se a capacidade regional foi atingida e se há algum controle de utilização na função. Verifique se há capacidade suficiente para invocar a função e processar mensagens SQS.

Confirme se não há outros consumidores ativos na mesma fila SQS

Se houver mais de um cliente ativo na fila SQS, esses clientes poderão consumir suas mensagens. As mensagens SQS são projetadas para que um cliente as consuma por vez. Se outro cliente consumir a fila SQS, sua função do Lambda pode não receber nenhuma mensagem ao pesquisar a fila SQS. Use o console do Amazon SQS para verificar se não há nenhuma outra invocação do Lambda ou do Amazon SQS ativa.

Observação: outros clientes podem extrair mensagens da fila SQS de forma programática. Essas extrações não aparecem no console.

Verifique se a origem do evento SQS está configurada com filtros

Verifique se a origem do evento SQS está configurada com algum filtro. Se fonte do evento SQS estiver configurada com filtros, certifique-se de não filtrar nenhuma mensagem do Amazon SQS.

  1. Abra o console do Lambda.
  2. No painel de navegação, escolha Funções.
  3. Selecione a função que você deseja verificar.
  4. Escolha o gatilho do SQS e, em seguida, verifique os critérios do filtro. Se a configuração do gatilho não mostrar o nome da chave, nenhum filtro será configurado. Se um critério de filtro estiver configurado, examine o filtro para confirmar se ele permite que o Lambda processe mensagens válidas. Para remover os critérios do filtro temporariamente, selecione Editar.
  5. Se a função for invocada após a remoção do filtro, modifique os critérios do filtro para que correspondam ao seu caso de uso.

Para obter mais informações, consulte Filtragem com o Amazon SQS e Best practices for implementing Lambda event filtering.

Informações relacionadas

Usar o Lambda com o Amazon SQS

Why isn't my Lambda function with an Amazon SQS event source scaling optimally?

Por que minha função do Lambda está repetindo mensagens válidas do Amazon SQS e colocando-as na minha fila de mensagens não entregues?

AWS OFICIAL
AWS OFICIALAtualizada há 6 meses