J'utilise une fonction AWS Lambda pour traiter les notifications Amazon Simple Notification Service (Amazon SNS), mais ma rubrique Amazon SNS n'appelle pas la fonction. Comment résoudre les problèmes liés aux notifications Amazon SNS n'appelant pas ma fonction Lambda ?
Brève description
Il y a cinq raisons pour lesquelles un événement de message Amazon SNS n'invoque pas une fonction Lambda qui est abonnée à une rubrique SNS :
Solution
Important : si vous ne l'avez pas encore fait, configurez la journalisation de l'état de livraison Amazon CloudWatch pour votre rubrique Amazon SNS. Pour plus d'informations, consultez Surveillance des rubriques Amazon SNS avec CloudWatch.
Confirmez que la publication d'identité IAM dans la rubrique SNS dispose des autorisations requises pour publier dans la rubrique SNS
Consultez la mesure NumberOfMessagesPublished dans vos mesures Amazon CloudWatch pour Amazon SNS. Si les demandes de publication effectuées par l'entité IAM que vous utilisez pour appeler la fonction ne sont pas enregistrées dans la mesure NumberOfMessagesPublished , procédez comme suit :
1. Vérifiez que l'entité IAM effectuant la demande d'API de publication dispose des autorisations requises pour publier dans la rubrique SNS. Pour plus d'informations et des exemples d'énoncés de stratégie spécifiques, consultez Exemples de cas pour le contrôle d'accès Amazon SNS.
2. Vérifiez que la stratégie d'autorisations pour la rubrique SNS permet à l'entité IAM effectuant l'appel de l'API Publier d'utiliser l'action « SNS:Publier » . Pour plus d'informations et des exemples de politiques d'autorisation, consultez la rubrique Autorisations pour la rubrique Amazon SNS.
Confirmez que votre fonction Lambda dispose des autorisations requises pour permettre à Amazon SNS d'appeler la fonction
Pour afficher la stratégie d'autorisations de votre fonction, suivez les instructions de la section Utilisation des stratégies basées sur les ressources pour AWS Lambda. Si la stratégie de votre fonction n'inclut pas l'action « LAMBDA:invokeFunction » pour votre rubrique SNS, mettez à jour la stratégie pour y inclure les autorisations requises.
Vérifiez que la stratégie de filtrage de votre fonction Lambda correspond aux attributs de message envoyés à partir de la rubrique SNS
Consultez la mesure NumberOfNotificationsFilteredOut dans vos mesures CloudWatch pour Amazon SNS. Si les demandes de publication effectuées par l'entité IAM que vous utilisez pour appeler la fonction apparaissent dans la mesure NumberOfNotificationsFilteredOut , procédez comme suit :
1. Consultez la stratégie de filtre d'abonnement de rubrique SNS de votre fonction Lambda en procédant comme suit :
Ouvrez la console Amazon SNS.
Dans le panneau de navigation de gauche, choisissez Abonnements.
Sur la page Modifier, développez la section Stratégie de filtre d'abonnement .
2. Vérifiez la stratégie de filtre d'abonnement pour confirmer que les attributs de message de demande de publication correspondent aux attributs requis par la stratégie de filtrage. Si les attributs ne correspondent pas, mettez à jour vos attributs de message de demande de publicationafin qu'ils correspondent aux attributs requis par la stratégie de filtre.
Remarque : Pour plus d'informations, consultez les politiques de filtrage d'abonnement Amazon SNS.
Confirmez que votre fonction Lambda n'est pas réduite ou limitée
Suivez les instructions dans Comment puis-je résoudre les problèmes de limitation de la fonction Lambda avec les erreurs « Taux dépassé » et 429 « TooManyRequestsException » ?
Confirmez que votre fonction Lambda est hébergée dans la même région que votre rubrique SNS
Une rubrique Amazon SNS hébergée dans une région AWS ne peut pas appeler une fonction Lambda qui ne se trouve pas dans la région. Pour obtenir la liste actuelle des régions AWS supportées par Amazon SNS, consultez les points de terminaison et quotas Amazon Simple Notification Service.
Consultez les Amazon Resource Names (ARN) de votre fonction Lambda et votre rubrique Amazon SNS. Si la rubrique Amazon SNS est hébergée dans une région AWS commerciale et que la fonction est hébergée dans une région opt-in, procédez comme suit :
1. Créez une nouvelle fonction Lambda dans la même région que votre rubrique Amazon SNS.
2. Configurez les paramètres de la fonction de sorte qu'elle effectue un appel d'API Invoke à la fonction hébergée dans la région opt-in.
Important : Assurez-vous de mettre à jour les paramètres de la région SDK.
Exemple de commande Python (Boto 3) pour modifier les paramètres de région
#us-east-1 client
lambda_us_east_1_client = boto3.client('lambda', region_name='us-east-1')
#us_west_1 client
lambda_us_west_1_client = boto3.client('lambda', region_name='us-west-1')
Exemple de commande JavaScript/Node.js pour modifier les paramètres de région
//us-east-1 client
var lambda_us_east_1_client = new AWS.Lambda({apiVersion: '2015-03-31',region: 'us-east-1'});
//us_west_1 client
var lambda_us_east_1_client = new AWS.Lambda({apiVersion: '2015-03-31', region: 'us-west-1'});