Que puis-je faire pour que mon abonnement Amazon SQS reçoive les notifications de ma rubrique Amazon SNS ?

Lecture de 7 minute(s)
0

Mon abonnement Amazon Simple Queue Service (Amazon SQS) ne reçoit pas les notifications de ma rubrique Amazon Simple Notification Service (Amazon SNS).

Brève description

Avant de commencer, vous devez configure la journalisation du statut de diffusion d'Amazon CloudWatch pour votre rubrique SNS. Pour en savoir plus, consultez la section Surveillance des rubriques Amazon SNS à l'aide de CloudWatch.

Remarque :

Résolution

Validation du statut de l'abonnement

Vérifiez que le statut de l'abonnement indique bien Confirmé et non En attente de confirmation ou Supprimé. S’il indique En attente de confirmation, vous devez confirmer l'abonnement. S’il indique Supprimé, vous devez recréer l'abonnement supprimé.

Les raisons suivantes expliquent pourquoi un abonnement peut être Confirmé sans que les messages ne soient envoyés aux files d'attente :

  • Vous n'avez configuré ni la stratégie d'accès de votre file d'attente SQS ni la stratégie de clé AWS Key Management Service (AWS KMS).
  • Les messages sont filtrés.
  • Les messages sont dédupliqués dans les rubriques « premier entré, premier sorti » (FIFO).
  • Vous avez activé la diffusion de messages bruts pour les abonnements.
  • Les messages ont été diffusés, mais ne s'affichent pas dans Amazon SQS.

Vous recevez le message d'erreur Accès refusé

Configurez la politique d'accès de votre file d'attente SQS pour autoriser Amazon SNS à envoyer des messages

Pour consulter la stratégie d'accès de votre file d'attente SQS, configurez votre stratégie d'accès.

Si la stratégie d'accès de votre file d'attente SQS n'inclut pas l'action d'API SendMessage pour votre rubrique SNS, mettez-la à jour avec les autorisations appropriées. Les autorisations doivent permettre à Amazon SNS d'envoyer des messages à la file d'attente SQS.

Configurez votre stratégie de clés AWS KMS pour qu'elle fonctionne avec SSE sur votre file d'attente SQS

Si le chiffrement côté serveur (SSE) est activé pour votre file d'attente SQS, procédez comme suit :

1.    Assurez-vous que la clé AWS KMS est activée.

2.    Vérifiez si votre file d'attente SQS utilise une ](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)clé KMS gérée par le client[. La stratégie de clé doit accorder les autorisations kms:Decrypt et kms:GenerateDataKey des autorisations à la rubrique SNS.

Remarque : vous ne pouvez pas utiliser les clés gérées par AWS dans le cadre d'un abonnement intercompte.

3.    Pour permettre au service Amazon SNS d'effectuer les actions d'API kms:GenerateDataKey et kms:Decrypt, ajoutez cette déclaration à la stratégie de clé KMS :

{    "Sid": "Allow Amazon SNS to use this key",
    "Effect": "Allow",
    "Principal": {
        "Service": "sns.amazonaws.com"

    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*"
    ],
    "Resource": "*"
}

Si la stratégie de clé KMS n'autorise pas l'accès au principal Amazon SNS, les journaux du statut de diffusion des messages affichent l'erreur KMS.AccessDeniedException :

{    "notification": {
        "messageMD5Sum": "9ecb1c62c0de86ac894c5fd6c447fe1f",
        "messageId": "f762cbcb-8643-5ef3-95c8-9739fe5f07f6",
        "topicArn": "arn:aws:sns:::",
        "timestamp": "2023-06-01 10:41:32.114"
    },
    "delivery": {
        "deliveryId": "f7a48fb3-1d98-5fe8-ae45-d34165842b39",
        "destination": "arn:aws:sqs:::",
        "providerResponse": "{\"ErrorCode\":\"KMS.AccessDeniedException\",\"ErrorMessage\":\"null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: 00df5c7d-1834-4cfb-bc05-e5a7fccfa816; Proxy: null)\",\"sqsRequestId\":\"Unrecoverable\"}",
        "dwellTimeMs": 59,
        "statusCode": 400
    },
    "status": "FAILURE"
}

Pour en savoir plus, reportez-vous à la section Pourquoi les messages que je publie sur ma rubrique Amazon SNS ne sont-ils pas envoyés à la file d'attente Amazon SQS à laquelle je suis abonnée et sur laquelle le chiffrement côté serveur est activé ?

Les messages sont filtrés

Dans la console CloudWatch, consultez les métriques CloudWatch pour Amazon SNS. Pour savoir si les messages sont filtrés, vérifiez la métrique NumberOfNotificationsFilteredOut. Si les messages sont filtrés, vérifiez la stratégie de filtrage des abonnements aux rubriques SNS de votre file d'attente SQS.

Pour vérifier la stratégie d'abonnement aux rubriques SNS, procédez comme suit :

1.    Ouvrez la console Amazon SNS.

2.    Dans le volet de navigation, sélectionnez Abonnements.

3.    Sélectionnez votre abonnement, puis choisissez Modifier.

4.    Développez la section Stratégie de filtre d'abonnement. Vérifiez que les valeurs Attributs du message ou Corps du message correspondent à la portée de la stratégie de filtre des abonnements SNS. Si les attributs ou le corps ne correspondent pas, mettez à jour la stratégie du filtre.

5.    Choisissez Enregistrer les modifications.

Pour en savoir plus, reportez-vous à la section Filtrage des messages Amazon SNS.

Les messages sont dédupliqués

En fonction du contenu du message ou d'un identifiant de déduplication, les rubriques Amazon SNS FIFO et les files d'attente Amazon SQS FIFO prennent en charge la déduplication des messages. Si ContentBasedDeduplication est défini sur la rubrique, le système génère un MessageDeduplicationId en fonction du contenu du message. Si ContentBasedDeduplication n'est pas défini, chaque message publié dans la rubrique doit avoir un MessageDeduplicationId unique.

Utilisez le paramètre MessageDeduplicationId pour dédupliquer les messages publiés dans les rubriques SNS pendant l'intervalle de déduplication de 5 minutes. Pour en savoir plus d'informations, consultez la sectionDéduplication de messages pour les rubriques FIFO.

Vous avez activé la diffusion de messages bruts pour les abonnements

Si vous utilisez la diffusion de messages bruts, vérifiez que vous n'envoyez pas plus de 10 attributs de message dans la notification publiée. Pour les messages activés avec la diffusion de messages bruts, Amazon SNS associe les attributs des messages aux attributs des messages SQS.

L'exemple suivant est un journal du statut de diffusion contenant plus de 10 attributs de message :

{    "notification": {
        "messageMD5Sum": "8fa14cdd754f91cc6554c9e71929cce7",
        "messageId": "22540375-973d-5c6d-8d9e-5f870de34c49",
        "topicArn": "arn:aws:sns:<region>:<account>:<topic name>",
        "timestamp": "2023-06-01 13:09:50.947"
    },
    "delivery": {
        "deliveryId": "9ccf7066-19e5-5bbb-a973-2c94833bc5fc",
        "destination": "arn:aws:sqs:<region>:<account>:<queue name>",
        "providerResponse": "{\\"ErrorCode\\":\\"InvalidParameterValue\\",\\"ErrorMessage\\":\\"Number of message attributes \[13\] exceeds the allowed maximum \[10\].\\",\\"sqsRequestId\\":\\"Unrecoverable\\"}",
        "dwellTimeMs": 31,
        "statusCode": 400
    },
    "status": "FAILURE"
}

Les messages ont été diffusés, mais n’apparaissent pas dans Amazon SQS

Un message peut être envoyé à la file d'attente, mais ne peut pas être interrogé pour les raisons suivantes :

L'abonnement SNS n'est pas visible dans la console SQS

Si vous avez créé l'abonnement SQS à partir du compte de rubrique SNS, il n’apparaîtra pas dans la console SQS. Cela est dû au fait que le compte SNS est propriétaire de l'abonnement. Vous ne pouvez donc voir l'abonnement que dans la console SNS.

Si vous avez créé l'abonnement SNS depuis la console Amazon SQS, le compte de rubrique SQS est propriétaire de l'abonnement. Vous pouvez donc consulter l'abonnement SNS dans la console SNS et la console SQS.

L'abonnement SQS n'est pas visible sous l'abonnement à la rubrique SNS

Ce problème survient lorsque vous supprimez puis recréez la rubrique SNS avec le même nom, et que vous ne supprimez pas l'abonnement SQS. Vous pouvez voir l'abonnement SQS sur la console SNS dans la liste des abonnements ou à partir de l'appel d'API SNS ListSubscriptions. Pour vérifier l'horodatage des opérations, consultez les événements AWS CloudTrail relatifs aux appels d'API SNS DeleteTopic et CreateTopic.

Informations connexes

Comment puis-je configurer un point de terminaison Amazon SQS entre comptes en fonction de la rubrique Amazon SNS ?

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