Pourquoi ma fonction Lambda configurée avec SQS comme source d'événements n'est-elle pas invoquée ?

Lecture de 6 minute(s)
0

J'ai configuré ma fonction AWS Lambda pour traiter les messages dans une file d'attente Amazon Simple Queue Service (Amazon SQS). Mais ma fonction Lambda n'est pas invoquée et ne traite pas les messages de la file d'attente.

Résolution

Prérequis

  • Vérifiez que la fonction Lambda est configurée avec Amazon SQS comme source d'événement.
  • Vérifiez que le rôle Gestion des identités et des accès AWS (AWS IAM) de la fonction Lambda dispose des autorisations nécessaires pour récupérer les messages à partir de la file d'attente SQS.
  • Vérifiez les métriques Amazon CloudWatch de votre fonction concernant les invocations et la file d'attente SQS pour vous assurer que des messages sont disponibles dans la file d'attente. Si les messages ne sont pas visibles ou envoyés à la file d'attente SQS, assurez-vous que le producteur dispose des autorisations nécessaires. L'utilisateur ou le rôle doit disposer des autorisations Amazon SQS et AWS Key Management Service (AWS KMS) suivantes :
    sqs:SendMessage
    kms:GenerateDataKey
    kms:Decrypt

Remarque : Si la file d'attente n'est pas chiffrée, vous n'avez pas besoin d'autorisations AWS KMS.

Vérifier que les URL de la fonction Lambda et de la file d'attente SQS sont correctes

Vérifiez que l'URL de la fonction Lambda Amazon Resource Name (ARN) et celle de la file d'attente SQS dans le mappage des sources d'événements sont correctes sur la fonction Lambda. Activez également le mappage des sources d'événements.

  1. Ouvrez la console Lambda.
  2. Dans le volet de navigation, choisissez Fonctions.
  3. Sélectionnez la fonction que vous souhaitez vérifier.
  4. Choisissez le déclencheur SQS et développez-le pour vérifier que l'URL de la file d'attente SQS est correcte. Vérifiez également que le statut du déclencheur est activé. Pour en savoir plus, consultez la page Pourquoi mon déclencheur Lambda Amazon SQS a-t-il été désactivé ?

Pour effectuer ces vérifications, vous pouvez également exécuter la commande list-event-source-mapping.

Exemple :

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

Remarque : Remplacez <my-function> par le nom de votre fonction Lambda, et remplacez <region name> par votre région AWS.

Vérifier les autorisations de la fonction Lambda

Si le rôle IAM Lambda est autorisé à interroger les messages de la file d'attente SQS, vérifiez la stratégie d'accès de la file d'attente SQS. Déterminez s'il existe des règles de refus susceptibles de restreindre la fonction Lambda.

  1. Ouvrez la console Amazon SQS.
  2. Dans le volet de navigation, choisissez Files d'attente.
  3. Sélectionnez la file d'attente SQS, puis sélectionnez l'onglet Stratégie d'accès.
  4. Passez en revue les stratégies de rejet susceptibles de bloquer le trafic Lambda. Si une stratégie bloque le trafic, ajoutez une condition dans l'instruction de rejet pour ignorer les demandes provenant de Lambda.

Votre fonction Lambda IAM doit disposer des autorisations suivantes :

  • DeleteMessage
  • GetQueueAttributes
  • ReceiveMessage

Vérifiez les paramètres de chiffrement de la file d'attente

Si la file d'attente est chiffrée, le rôle IAM de la fonction Lambda doit disposer des autorisations nécessaires pour effectuer des actions AWS KMS. Sans ces autorisations, la fonction Lambda ne peut pas consommer les messages issus de la file d'attente SQS. Si la file d'attente Amazon SQS est configurée avec le chiffrement AWS KMS, procédez comme suit :

  • Assurez-vous que la clé AWS KMS existe.
  • Assurez-vous que le rôle de la fonction Lambda dispose des autorisations kms:Decrypt.
  • Assurez-vous que les autorisations de stratégie de clé AWS KMS sont configurées pour autoriser les actions à partir du rôle Lambda.

Remarque : les files d'attente Amazon SQS dotées de la clé par défaut (clé AWS KMS pour Amazon SQS) ne peuvent pas invoquer de fonction Lambda dans un autre compte AWS.

Vérifier si la fonction Lambda spécifique est limitée

Lambda présente une limite de simultanéité régionale. Si d'autres fonctions de la région AWS utilisent activement cette capacité au niveau maximal, des restrictions peuvent survenir sur la fonction. Cela peut se produire même si la fonction n'atteint pas elle-même sa capacité maximale.

Si vous définissez une simultanéité réservée sur 0 pour la fonction, aucune invocation ne se produit sur la fonction. Tous les messages issus d'Amazon SQS sont limités. Vérifiez la métrique régionale ConcurrentExecutions (maximum) et les métriques de la fonction Limitation (SUM) dans Amazon CloudWatch. Vérifiez si la capacité régionale est atteinte et si la fonction est limitée. Assurez-vous que la capacité est suffisante pour invoquer la fonction et traiter les messages SQS.

Vérifiez qu'aucun autre consommateur actif n'apparaît dans la même file d'attente SQS

Si plusieurs clients actifs figurent dans la file d'attente SQS, il est possible que ces clients consomment vos messages. Les messages SQS sont conçus pour être consommés par un seul client à la fois. Si un autre client consomme la file d'attente SQS, il est possible que votre fonction Lambda ne reçoive aucun message lorsqu'elle interroge la file SQS. Utilisez la console Amazon SQS pour vérifier qu'aucune autre invocation Lambda ou Amazon SQS n'est active.

Remarque : d'autres clients peuvent extraire des messages de la file d'attente SQS par programmation. Ces extractions n'apparaissent pas dans la console.

Vérifier si la source d'événements SQS est configurée avec des filtres

Vérifier si la source d'événements SQS est configurée avec des filtres. Si votre source d'événements SQS est configurée avec des filtres, assurez-vous de ne filtrer aucun message Amazon SQS.

  1. Ouvrez la console Lambda.
  2. Dans le volet de navigation, choisissez Fonctions.
  3. Sélectionnez la fonction que vous souhaitez vérifier.
  4. Choisissez le déclencheur SQS, puis vérifiez les critères de filtre. Si la configuration du déclencheur n'indique pas le nom de la clé, cela signifie qu'aucun filtre n'est configuré. Si un critère de filtre est configuré, vérifiez le filtre pour vous assurer qu'il permet à Lambda de traiter les messages valides. Pour supprimer temporairement les critères de filtre, choisissez Modifier.
  5. Si la fonction est invoquée après la suppression du filtre, modifiez les critères de filtre en fonction de votre cas d'utilisation.

Pour en savoir plus, consultez les pages Filtrage avec Amazon SQS et Bonnes pratiques pour l'implémentation du filtrage des événements Lambda.

Informations connexes

Utilisation de Lambda avec Amazon SQS

Pourquoi ma fonction Lambda associée à une source d'événements Amazon SQS ne s'adapte-t-elle pas de manière optimale ?

Pourquoi ma fonction Lambda réessaie-t-elle des messages Amazon SQS valides et les place-t-elle dans ma file d'attente de lettres mortes ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 6 mois