Voyant que certaines sources d'événements envoient plusieurs enregistrements d'événements dans un lot 1, et qu'un seul Lambda peut être mis à la disposition à la fois d'une source d'événements à enregistrements multiples (par exemple SQS, SES) et d'une seule source d'événement de demande (par exemple, API Gateway), est-ce que quelqu'un a des exemples de gestion à la fois d'un Demande d'API et enregistrement multiple SQS ou autres événements source avec le même Lambda?

C'est un peu plus compliqué que de limiter la taille du lot, car les objets événement de différents services n'ont pas toujours une liste d'enregistrements, par exemple API Gateway envoie une seule charge utile d'événement d'objet de requête, plutôt qu'une liste d'enregistrements.

J'ai pu comprendre comment analyser les événements en fonction de la clé eventSource; cependant, je ne comprends pas comment Lambda répond aux événements à enregistrements multiples.

Existe-t-il un enregistrement d'appel par enregistrement d'événement ou existe-t-il un seul enregistrement d'appel, c'est-à-dire que le code Lambda s'exécute une fois par lot ou plusieurs fois?

Mon code Lambda est-il responsable de la formation des enregistrements d'appel ou simplement de la charge utile de la réponse?

Comment former ma (mes) charge (s) de réponse à partir d'un lot d'événements à enregistrements multiples?

Dois-je répondre à chaque enregistrement individuellement et créer une seule charge utile avec les réponses pour chaque enregistrement individuel, puis renvoyer la charge utile globale?

D'une part, je peux simplement vouloir que Lambda fasse quelque chose et ne renvoie rien, comme une invocation asynchrone qui n'attend pas de réponse. D'autre part, une demande de passerelle API synchrone attend une réponse, ou un autre appel asynchrone peut s'attendre à ce que les réponses soient publiées dans une autre file d'attente.

Je suppose que chaque enregistrement d'un lot d'événements SQS Queue à plusieurs enregistrements équivaut à un événement de demande unique d'API Gateway. Est-ce incorrect?

1
scottmains 21 oct. 2020 à 19:51

3 réponses

Meilleure réponse

Un Lambda est appelé une fois par événement, que l'événement contienne une seule demande ou un lot de plusieurs enregistrements comme pour les appels de file d'attente SQS. Utilisation d'AWS Lambda avec Amazon SQS ou en tant qu'Alex DeBrie of Serverless Blog écrit: "Avec l'intégration SQS / Lambda, un lot de messages réussit ou échoue ensemble." Utilisation de SQS avec AWS Lambda et sans serveur

Vous pouvez coder votre fonction Lambda pour traiter chaque enregistrement d'un lot dans une boucle et effectuer une action pour chacun. Une fois tous les enregistrements traités, la fonction peut renvoyer une charge utile de réponse. Cela peut être la chaîne "Succès" ou un autre message ou données ou Aucun. La manière dont vous formatez la charge utile et les données que vous renvoyez dépend de ce qui doit être fait avec elle. Sinon, la fonction Lambda peut générer une erreur ou quitter sans rien renvoyer; cependant, dans ces cas, les messages du lot resteront visibles dans la file d'attente.

Pour autant que je sache, ce que vous renvoyez dans votre charge utile de réponse ne signifie rien pour SQS. La réussite ou l'échec détermine si une nouvelle tentative est nécessaire ou si le lot de messages peut être supprimé ou déplacé vers une file d'attente de lettres mortes. Vous pouvez trouver utile de renvoyer un message significatif ou d'autres données car cela sera enregistré; cependant, SQS n'en fait rien.

Si des messages individuels d'un lot informent des processus en aval, votre code Lambda peut transmettre des réponses individuelles à un autre service, tel qu'une autre file d'attente SQS ou une API, une à la fois pendant le traitement des enregistrements.

0
scottmains 22 oct. 2020 à 19:36

Vous recevrez un tableau d'un ou plusieurs enregistrements.

Lors du développement de votre code, partez toujours de l'hypothèse que plusieurs enregistrements sont soumis pour la demande (itérez sur eux en boucle) et traitez-les un enregistrement à la fois.

Avec les lots, les services attendront généralement un court laps de temps pour voir si la taille totale du lot peut être atteinte, puis le transmet en tant qu'événement à votre Lambda.

L'appel de la passerelle API de Lambda contiendra un format complètement différent pour l'événement, comme on peut le voir dans cet exemple. Cela ne devrait cependant pas poser de problème, car vous vous attendez généralement à développer une passerelle Lambda pour API Gateway, plutôt que de l'implémenter pour plusieurs services en même temps.

0
Chris Williams 21 oct. 2020 à 17:53

Vous obtiendrez toujours un tableau d'enregistrements, vous pouvez voir la structure des événements dans la documentation pour Lambda

0
Martin Trenker 21 oct. 2020 à 17:00