Wie kann ich erreichen, dass mein Amazon SQS-Abonnement erfolgreich eine Benachrichtigung von meinem Amazon SNS-Thema erhält?

Lesedauer: 6 Minute
0

Mein Amazon Simple Queue Service (Amazon SQS)-Abonnement erhält keine Benachrichtigung von meinem Amazon Simple Notification Service (Amazon SNS)-Thema.

Kurzbeschreibung

Bevor Sie beginnen, konfigurieren Sie die Protokollierung des Amazon CloudWatch-Zustellungsstatus für Ihr SNS-Thema. Weitere Informationen finden Sie unter Überwachung von Amazon SNS-Themen mit CloudWatch.

Hinweis:

Lösung

Bestätigen des Abonnementstatus

Stellen Sie sicher, dass sich das Abonnement im Status Bestätigt und nicht im Status Ausstehende Bestätigung oder Gelöscht befindet. Wenn der Status Ausstehende Bestätigung lautet, bestätigen Sie das Abonnement. Wenn der Status Gelöscht lautet, erstellen Sie das gelöschte Abonnement erneut.

Aus den folgenden Gründen kann sich ein Abonnement im Status Bestätigt befinden, während die Nachrichten dennoch nicht an die Warteschlangen zugestellt werden:

  • Sie haben die Zugriffsrichtlinie Ihrer SQS-Warteschlange oder die AWS Key Management Service (AWS KMS)-Schlüsselrichtlinie nicht konfiguriert.
  • Die Nachrichten werden herausgefiltert.
  • Bei den Nachrichten handelt es sich um deduplizierte First-in-First-Out-Themen (FIFO).
  • Sie haben die Zustellung von unformatierten Nachrichten für die Abonnements aktiviert.
  • Die Nachrichten wurden zugestellt, aber Sie sehen sie nicht in Amazon SQS.

Sie erhalten die Fehlermeldung „Zugriff verweigert“

Konfigurieren der Zugriffsrichtlinie Ihrer SQS-Warteschlange, damit sie Amazon SNS erlaubt, Nachrichten zu senden

Um die Zugriffsrichtlinie Ihrer SQS-Warteschlange anzuzeigen, konfigurieren Sie Ihre Zugriffsrichtlinie.

Wenn die Zugriffsrichtlinie Ihrer SQS-Warteschlange die API-Aktion SendMessage für Ihr SNS-Thema nicht enthält, aktualisieren Sie Ihre Richtlinie mit den nötigen Berechtigungen. Die Berechtigungen müssen es Amazon SNS ermöglichen, Nachrichten an die SQS-Warteschlange zu senden.

Konfigurieren Ihrer AWS-KMS-Schlüsselrichtlinie, damit sie mit SSE in Ihrer SQS-Warteschlange funktioniert

Wenn serverseitige Verschlüsselung (SSE) für Ihre SQS-Warteschlange aktiviert ist, gehen Sie wie folgt vor:

  1. Stellen Sie sicher, dass der AWS-KMS-Schlüssel aktiviert ist.

  2. Prüfen Sie, ob Ihre SQS-Warteschlange einen vom Kunden verwalteten KMS-Schlüssel verwendet. Falls ja, muss die Schlüsselrichtlinie die Berechtigungen kms:Decrypt und kms:GenerateDataKey für das SNS-Thema gewähren.

**Hinweis:**Sie können von AWS verwaltete Schlüssel nicht in kontoübergreifenden Abonnements verwenden.

  1. Damit der Amazon SNS-Service die API-Aktionen kms:GenerateDataKey und kms:Decrypt ausführen kann, fügen Sie der KMS- Schlüsselrichtlinie die folgende Anweisung hinzu:
{    "Sid": "Allow Amazon SNS to use this key",
    "Effect": "Allow",
    "Principal": {
        "Service": "sns.amazonaws.com"

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

Wenn die entsprechende KMS-Schlüsselrichtlinie dem Amazon SNS-Prinzipal keinen Zugriff gewährt, zeigen die Protokolle des Status von Nachrichtenzustellungen den Fehler KMS.AccessDeniedException an:

{    "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"
}

Weitere Informationen finden Sie unter Warum werden Nachrichten, die ich unter meinem Amazon SNS-Thema veröffentliche, nicht an meine abonnierte Amazon SQS-Warteschlange zugestellt, für die serverseitige Verschlüsselung aktiviert ist?

Nachrichten werden herausgefiltert

Überprüfen Sie in der CloudWatch-Konsole die CloudWatch-Metriken für Amazon SNS. Überprüfen Sie die Metrik NumberOfNotificationsFilteredOut, um Bestätigung zu erhalten, dass die Nachrichten herausgefiltert wurden. Wenn die Nachrichten herausgefiltert wurden, überprüfen Sie die Abonnement-Filterrichtlinie Ihrer SQS-Warteschlange für SNS-Themen.

Gehen Sie wie folgt vor, um die Abonnement-Richtlinie für SNS-Themen zu überprüfen:

1.Öffnen Sie die Amazon-SNS-Konsole.

  1. Wählen Sie im Navigationsbereich Abonnements aus.

  2. Wählen Sie Ihr Abonnement aus und wählen Sie dann Bearbeiten.

  3. Erweitern Sie den Abschnitt **Abonnement-Filterrichtlinie**. Prüfen Sie, ob die **Nachrichtenattribute** oder der **Nachrichtentext** dem ](https://docs.aws.amazon.com/sns/latest/dg/sns-message-filtering-scope.html)Geltungsbereich der Filterrichtlinie für SNS-Abonnements[ entspricht. Wenn die Attribute oder der Textteil nicht übereinstimmen, aktualisieren Sie die Filterrichtlinie.
    
  4. Wählen Sie **Änderungen** **speichern**.
    

Weitere Informationen finden Sie unter Amazon SNS Nachrichtenfilterung.

Nachrichten werden dedupliziert

Amazon-SNS-FIFO-Themen und Amazon-SQS-FIFO-Warteschlangen unterstützen die Nachrichtendeduplizierung basierend auf Nachrichteninhalten oder einer Deduplizierungs-ID. Wenn für das Thema ContentBasedDeduplication eingestellt ist, generiert das System eine MessageDeduplicationId auf Basis des Inhalts der Nachricht. Wenn ContentBasedDeduplication nicht eingestellt ist, muss jede Nachricht, die zu dem Thema veröffentlicht wird, eine eindeutige MessageDeduplicationId haben.

Verwenden Sie den Parameter MessageDeduplicationId, um Nachrichten zu deduplizieren, die innerhalb des 5-minütigen Deduplizierungsintervalls in den SNS-Themen veröffentlicht werden. Weitere Informationen finden Sie unter Nachrichtendeduplizierung für FIFO-Themen.

Sie haben die Zustellung von unformatierten Nachrichten für die Abonnements aktiviert

Wenn Sie die Zustellung von unformatierten Nachrichten verwenden, stellen Sie sicher, dass Sie in der veröffentlichten Benachrichtigung nicht mehr als 10 Nachrichtenattribute senden. Für Nachrichten, die Sie mit Zustellung von unformatierten Nachrichten aktivieren, ordnet Amazon SNS die Nachrichtenattribute den SQS-Nachrichtenattributen zu.

Das folgende Beispiel ist ein Protokoll eines Zustellungsstatus mit mehr als 10 Nachrichtenattributen:

{    "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"
}

Die Nachrichten wurden zugestellt, aber Sie sehen sie nicht in Amazon SQS

Eine Nachricht kann aus folgenden Gründen nicht für Abfragen verfügbar sein, obwohl sie an die Warteschlange zugestellt wurde:

Das SNS-Abonnement ist in der SQS-Konsole nicht sichtbar

Wenn Sie das SQS-Abonnement über das SNS-Themenkonto erstellt haben, können Sie das Abonnement in der SQS-Konsole nicht sehen. Der Grund ist, dass das Abonnement dem SNS-Konto gehört, sodass Sie das Abonnement nur in der SNS-Konsole sehen können.

Wenn Sie das SNS-Abonnement von der Amazon SQS-Konsole aus erstellt haben, ist das SQS-Themenkonto Eigentümer des Abonnements. Sie können das SNS-Abonnement dann von der SNS-Konsole und der SQS-Konsole aus sehen.

Das SQS-Abonnement ist unter dem SNS-Themenabonnement nicht sichtbar

Dieses Problem tritt auf, wenn Sie das SNS-Thema löschen und mit demselben Namen neu erstellen, ohne das SQS-Abonnement zu löschen. Sie können das SQS-Abonnement in der SNS-Konsole auf der Liste Abonnements oder im SNS-API-Aufruf ListSubscriptions sehen. Um den Zeitstempel zu überprüfen, zu dem die Vorgänge ausgeführt wurden, überprüfen Sie die AWS-CloudTrail-Ereignisse für die SNS-API-Aufrufe DeleteTopic und CreateTopic.

Verwandte Informationen

Wie konfiguriere ich meinen kontoübergreifenden Amazon SQS-Endpunkt für das Amazon SNS-Thema?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 7 Monaten