Comment puis-je résoudre les problèmes de filtrage de messages dans Amazon SNS ?

Lecture de 5 minute(s)
0

Mes messages sont filtrés au moment de la publication à partir d'une rubrique Amazon Simple Notification Service (Amazon SNS).

Brève description

Un abonné à une rubrique Amazon SNS reçoit par défaut tous les messages publiés dans cette rubrique. Un abonné qui souhaite recevoir uniquement un sous-ensemble de messages doit attribuer une politique de filtrage à l'abonnement à une rubrique. Pour plus d'informations, reportez-vous à Filtrage des messages Amazon SNS.

L'attribut d'abonnement FilterPolicyScope vous offre la possibilité de choisir l'étendue du filtrage en définissant l'une des valeurs suivantes :

  • MessageAttributes : La politique de filtrage est appliquée aux attributs de message. Il s'agit d'une option par défaut.
  • MessageBody : La politique de filtrage est appliquée au corps du message.

Remarque : Si le champ d'application de la politique de filtrage n'est pas défini lors de la mise en œuvre de la politique de filtrage des abonnements, le champ d'application par défaut sera MessageAttributes.

Résolution

Voici quelques problèmes courants liés au filtrage des messages et des pistes pour les résoudre :

Les abonnements Amazon SNS ont une politique de filtrage avec un temps d'attente de 15 minutes

AWS Identity and Access Management (IAM) et Amazon SNS utilisent un modèle informatique distribué appelé cohérence à terme. Les ajouts ou modifications apportés à une politique de filtrage des abonnements prennent jusqu'à 15 minutes pour produire tous leurs effets. Cette durée ne peut pas être réduite.

Erreur : La combinaison totale de valeurs (120) ne doit pas dépasser 100

En ce qui concerne les politiques de filtrage des abonnements Amazon SNS, la limite par défaut par rubrique, par compte AWS, est de 200. La limite des politiques de filtrage par compte AWS est de 10 000.

L’augmentation de la limite de la politique de filtrage des abonnements Amazon SNS nécessite l'approbation d'une équipe de service interne. Cette approbation est fondée sur des facteurs comme le cas d'utilisation, la Région, le nombre de messages publiés et le nombre de détails relatifs aux abonnements.

Si vous prévoyez une augmentation de vos besoins en matière de politique de filtrage des abonnements Amazon SNS, envisagez une autre option.

Solutions possibles

  • Avoir plusieurs conditions (ou filtres) dans la même politique de filtrage associée à l'abonnement à la rubrique.
  • Souscrire à une fonction AWS Lambda à une rubrique Amazon SNS et gérer la logique de filtrage dans le code de la fonction Lambda. La Fonction Lambda gère la logique de filtrage et la publie en fonction des attributs du message dans une autre rubrique SNS avec des abonnements.

Erreur : AuthorizationErrorException

Cette erreur se produit lorsque l'utilisateur ou le rôle à l'origine de la requête SetSubscriptionAttributes ne dispose pas des autorisations suffisantes.

Ajoutez les autorisations SetSubscriptionAttributes à l'utilisateur, puis modifiez la politique de filtrage des abonnements. Pour plus d'informations sur l'ajout des autorisations, reportez-vous à Utilisation de politiques basées sur l'identité avec Amazon SNS.

Cette erreur se produit aussi en cas de problème d'autorisation, généralement dans un environnement inter-comptes. Par exemple, vous créez un environnement inter-comptes avec Amazon SNS. Les utilisateurs qui ajoutent une politique de filtrage à l'abonnement à l'aide de l'appel d'API SetSubscriptionAttributes reçoivent le message d'erreur « Non autorisé à accéder à cet abonnement».

La fonction **SetSubscriptionAttributes ** permet au propriétaire d'un abonnement de définir une politique de filtrage de type attribut pour l'abonnement. Dans une configuration inter-comptes avec SNS (exemple : inter-comptes Amazon SNS-Amazon Simple Queue Service), le propriétaire de l'abonnement est le compte AWS utilisé pour effectuer l'appel d'API S'abonner afin de créer l'abonnement. Un utilisateur d'un autre compte (qui n'est pas propriétaire de l'abonnement) peut essayer d'ajouter une politique de filtrage à l'abonnement à l'aide de l'appel d'API SetSubscriptionAttributes. Cet utilisateur voit désormais apparaître un message d'erreur « Accès interdit à cet abonnement».

Les notifications ne sont pas envoyées à une rubrique SNS même après avoir adopté la bonne politique de filtrage

Un abonnement peut recevoir un message dans les conditions suivantes :

  • Le champ de la politique de filtrage est défini sur MessageAttributes
  • Le champ de la politique de filtrage est défini sur MessageBody

Remarque : Pour plus d'informations sur la politique de filtrage, voir Politiques de filtrage des abonnements Amazon SNS.

Pour diagnostiquer le problème et le résoudre, vérifiez les points suivants :

  • Assurez-vous que les attributs du message transmis sont corrects.
  • Pour le filtrage du corps du message, assurez-vous que la charge utile du message est un objet JSON bien formé. Pour plus d'informations, reportez-vous à ce blog sur le filtrage des messages basé sur la charge utile.
  • Consultez les métriques SNS Amazon CloudWatch affichées ici pour vous assurer que le point de données est renseigné pour elles :

NumberOfNotificationsFilteredOut : Le nombre de messages rejetés par les politiques de filtrage des abonnements. Une politique de filtrage rejette un message lorsque ses attributs ne correspondent pas à celle de la politique.

NumberOfNotificationsFilteredOut-MessageAttributes : Le nombre de messages rejetés par les politiques de filtrage des abonnements dans le cadre du filtrage basé sur les attributs.

NumberOfNotificationsFilteredOut-MessageBody : Le nombre de messages rejetés par les politiques de filtrage des abonnements dans le cadre du filtrage basé sur les données utiles.

NumberOfNotificationsFilteredOut-InvalidAttributes : Le nombre de messages rejetés par les politiques de filtrage des abonnements en raison de l'invalidité de leurs attributs. Par exemple, le message a été rejeté parce que l'attribut JSON est mal formaté.

NumberOfNotificationsFilteredOut-NoMessageAttributes: Le nombre de messages rejetés par les politiques de filtrage des abonnements faute d'attributs.

NumberOfNotificationsFilteredOut-InvalidMessageBody : Le nombre de messages rejetés par les politiques de filtrage des abonnements en raison de la non-validité du corps du message dans le cadre du filtrage. À titre d'illustration, le corps du message est JSON non valide.

Pour plus d'informations, reportez-vous aux métriques Amazon SNS.

Informations connexes

Ressource Amazon SNS

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