Je souhaite résoudre le problème d’une simultanéité supérieure aux ID de groupe de messages ou à la valeur de simultanéité maximale sur une source d'événement FIFO (First in, First out) AWS Lambda Amazon Simple Queue Service (Amazon SQS).
Brève description
Lorsque vous utilisez Lambda avec une source d'événement FIFO Amazon SQS, la simultanéité est égale ou inférieure au nombre de MessageGroupIds dans la file d'attente.
Les raisons suivantes peuvent faire en sorte que la simultanéité de la fonction soit supérieure au nombre de MessageGroupIds uniques et actifs dans la file d'attente :
- Plusieurs sources d'événements utilisent la même fonction.
- La durée de conservation est inférieure à la durée d'exécution de la fonction.
- Les métriques de simultanéité Lambda sont supérieures au nombre de MessageGroupIds.
- Vous utilisez des extensions Lambda.
Résolution
Plusieurs sources d'événements utilisent la même fonction
Assurez-vous que la fonction ne possède qu'une seule source d'événement. Lorsqu'une fonction comporte plusieurs sources d'événements, une autre source d'événements peut utiliser la fonction et entraîner une augmentation de la simultanéité.
La durée de conservation est inférieure à la durée d'exécution de la fonction
Si la période de rétention configurée pour la file d'attente est inférieure à la durée d'exécution de la fonction, augmentez-la.
En outre, la simultanéité augmente car Lambda ne suit pas les messages provenant du même MessageGroupID et interroge les messages dès qu'ils sont disponibles.Pour vous assurer que les messages n'expirent pas pendant le fonctionnement de la fonction Lambda, augmentez la période de rétention de la file d'attente SQS FIFO. Les messages sont traités dans l'ordre FIFO pour le MessageGroupId.
Les métriques de simultanéité Lambda sont supérieures au nombre de MessageGroupIds
Les métriques de simultanéité Lambda peuvent être supérieures au nombre de MessageGroupIds en raison de la façon dont les métriques sont générées. D'autres messages ne sont pas invoqués simultanément. Au lieu de cela, pour chaque message invoqué, Lambda augmente le compteur de simultanéité d'une unité, puis le diminue lorsque l'appel est terminé avec une réponse renvoyée.
Pour les mappages de sources d'événements, la simultanéité est le nombre d'opérations du gestionnaire Lambda en parallèle. Pour le backend Lambda, les fonctions qui effectuent une opération de code de gestionnaire et qui sont actuellement en phase de post-traitement sont prises en compte dans la simultanéité totale.
En outre, Lambda traite la simultanéité réservée de la même manière que les mappages de sources d'événements. Il est recommandé de ne pas définir de simultanéité réservée. Si vous devez définir la simultanéité réservée, définissez-la sur une valeur légèrement supérieure au nombre de MessageGroupIds.
Remarque : Les nouveaux messages ne sont invoqués que lorsque le message précédent est terminé. Les messages sont toujours traités dans l'ordre.
Les extensions Lambda provoquent une forte simultanéité
Une simultanéité élevée peut se produire lorsque vous utilisez des extensions Lambda, car les extensions continuent de s'exécuter une fois l'opération Lambda terminée. Par exemple, une extension est attachée et n'a pas appelé /next, mais le moteur d'exécution a appelé /next.
Pour vérifier si vos extensions Lambda provoquent un taux de simultanéité élevé, procédez comme suit :
- Surveillez la métrique de performance PostRuntimeExtensionsDuration pour déterminer le temps cumulé entre l'API Suivant de l’exécution et l’API Suivante de la dernière extension.
- Vérifiez si vos extensions Lambda s'exécutent toujours et conservent l'environnement une fois qu'une fonction Lambda est terminée.
- Vérifiez si vos instances Lambda dépassent la simultanéité des fonctions. Lorsque deux instances se trouvent dans le même environnement en même temps, une limitation se produit. Pour plus d'informations, consultez la section Utilisation de l'API Lambda Extensions pour créer des extensions.
- Comparez la métrique ConcurrentExecutions à la métrique PostRuntimeExtensionsDuration. Vérifiez si le nombre maximal de ConcurrentExecutions est supérieur au quota de la source d'événements Amazon SQS. Pour plus d'informations, consultez la section Surveillance de la simultanéité.
Informations connexes
Utilisation de Lambda avec Amazon SQS