Konfigurieren einer Warteschlange für unzustellNachrichten für einen Zeitplan für unzustellNachrichten Nachrichten Nachrichten - EventBridge Scheduler

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfigurieren einer Warteschlange für unzustellNachrichten für einen Zeitplan für unzustellNachrichten Nachrichten Nachrichten

Amazon EventBridge Scheduler unterstützt Dead-Letter Queues (DLQ) mithilfe des Amazon Simple Queue Service. Wenn ein Zeitplan sein Ziel nicht aufrufen kann, sendet EventBridge Scheduler eine JSON-Payload, die Aufrufdetails und alle vom Ziel empfangenen Antworten enthält, an eine von Ihnen angegebene Amazon SQS SQS-Standardwarteschlange.

Das folgende Thema bezieht sich auf diesen JSON als ein Dead-Letter-Ereignis. Mit einem Dead-Letter-Event können Sie Probleme mit Ihrem Zeitplan oder Ihren Zielen beheben. Wenn Sie eine Wiederholungsrichtlinie für Ihren Zeitplan konfigurieren, sendet der EventBridge Scheduler das Deadletter-Ereignis aus, das die von Ihnen festgelegte maximale Anzahl von Wiederholungsversuchen erschöpft.

In den folgenden Themen wird beschrieben, wie Sie eine Amazon SQS-Warteschlange als DLQ für Ihren Zeitplan konfigurieren, die Berechtigungen einrichten können, die EventBridge Scheduler für die Übermittlung von Nachrichten an Amazon SQS benötigt, und wie Sie Deadletter-Ereignisse vom DLQ empfangen können.

Erstellen einer Amazon-SQS-Warteschlange

Bevor Sie einen DLQ für Ihren Zeitplan konfigurieren, müssen Sie eine standardmäßige Amazon SQS SQS-Warteschlange erstellen. Anweisungen zum Erstellen einer Warteschlange mit der Amazon-SQS-Konsole finden Sie unter Erstellen einer Amazon-SQS-Warteschlange für Amazon-Simple-Warteschlangen.

Anmerkung

EventBridge Der Scheduler unterstützt nicht die Verwendung einer FIFO-Warteschlange als DLQ Ihres Zeitplans.

Verwenden Sie den folgendenAWS CLI Befehl, um eine Standardwarteschlange zu erstellen.

$ aws sqs create-queue --queue-name queue-name

Wenn der Befehl erfolgreich ausgeführt wurde, sehen Sie dasQueueURL in der Ausgabe.

{
    "QueueUrl": "https://sqs.us-west-2.amazonaws.com/123456789012/scheduler-dlq-test"
}

Nachdem Sie die Warteschlange erstellt haben, notieren Sie sich den Queue-ARN. Sie benötigen den ARN, wenn Sie einen DLQ für Ihren EventBridge Scheduler-Zeitplan angeben. Sie finden Ihren Queue-ARN in der Amazon SQS SQS-Konsole oder mithilfe des get-queue-attributesAWS CLIBefehls.

$ aws sqs get-queue-attributes --queue-url your-dlq-url --attribute-names QueueArn

Wenn dies erfolgreich ist, sehen Sie den Queue-ARN in der Ausgabe.

{
    "Attributes": {
        "QueueArn": "arn:aws:sqs:us-west-2:123456789012:scheduler-dlq-test"
    }
}

Im nächsten Abschnitt fügen Sie Ihrer Rolle zur Ausführung des Zeitplans die erforderlichen Berechtigungen hinzu, damit EventBridge Scheduler Deadlet-Ereignisse an Amazon SQS übermitteln kann.

Richten Sie Berechtigungen für Ausführungsrolle ein

Damit EventBridge Scheduler Deadlet-Ereignisse an Amazon SQS übermitteln kann, benötigt Ihre Rolle für die Ausführung von Terminplänen die folgende Berechtigungsrichtlinie. Weitere Informationen zum Anhängen einer neuen Berechtigungsrichtlinie an Ihre Rolle für die Ausführung des Zeitplans finden Sie unter Die Ausführungsrolle einrichten.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sqs:SendMessage" ], "Effect": "Allow", "Resource": "*" } ] }
Anmerkung

Ihre Rolle zur Ausführung von Zeitplänen verfügt möglicherweise bereits über die erforderlichen Berechtigungen, wenn Sie EventBridge Scheduler verwenden, um ein Amazon SQS SQS-API-Ziel aufzurufen.

Im nächsten Abschnitt verwenden Sie die EventBridge Scheduler-Konsole und geben eine DLQ für Ihren Zeitplan an.

Geben Sie eine Warteschlange für unzustellNachrichten Nachrichten an.

Um einen DLQ anzugeben, verwenden Sie die EventBridge Scheduler-Konsole oder die,AWS CLI um einen vorhandenen Zeitplan zu aktualisieren oder einen neuen zu erstellen.

Console
So geben Sie einen DLQ mithilfe der Konsole an
  1. Melden Sie sich bei derAWS Management Console an und wählen Sie dann den folgenden Link, um den EventBridge Scheduler-Bereich der EventBridge Konsole zu öffnen: https://console.aws.amazon.com/scheduler/home

  2. Erstellen Sie in der EventBridge Scheduler-Konsole einen neuen Zeitplan, oder wählen Sie einen vorhandenen Zeitplan aus der Liste der zu bearbeitenden Zeitpläne aus.

  3. Führen Sie auf der Seite Einstellungen für die Dead-Letter Queue (DLQ) einen der folgenden Schritte aus:

    • Wählen Sie in meinemAWS Konto als DLQ die Option Amazon SQS SQS-Warteschlange auswählen und wählen Sie dann den Warteschleifen-ARN für Ihre DLQ aus der Dropdown-Liste aus.

    • Wählen Sie „Amazon SQS SQS-Warteschlange in anderenAWS Konten als DLQ angeben“ und geben Sie dann den Queue-ARN für Ihre DLQ ein. Wenn Sie eine Warteschlange in einem anderenAWS Konto auswählen, kann die EventBridge Scheduler-Konsole die Warteschlange-ARNs nicht in einer Dropdown-Liste anzeigen.

  4. Überprüfen Sie Ihre Auswahl und wählen Sie dann Zeitplan erstellen oder Zeitplan speichern, um die Konfiguration eines DLQ abzuschließen.

  5. (Optional) Um die DLQ-Details eines Zeitplans anzuzeigen, wählen Sie den Namen des Zeitplans aus der Liste aus und wählen Sie dann auf der Seite mit den Zeitplandetails den Tab Warteschlange für tote Buchstaben.

AWS CLI
Um einen vorhandenen Zeitplan mit dem zu aktualisierenAWS CLI
  • Verwenden Sie den update-scheduleBefehl, um Ihren Zeitplan zu aktualisieren. Geben Sie die Amazon SQS SQS-Warteschlange, die Sie zuvor erstellt haben, als DLQ an. Geben Sie die IAM-Rolle ARN, der Sie die erforderlichen Amazon SQS SQS-Berechtigungen zugewiesen haben, als Ausführungsrolle an. Ersetzen Sie alle anderen Platzhalterwerte durch Ihre Informationen.

    $ aws scheduler update-schedule --name existing-schedule \ --schedule-expression 'rate(5 minutes)' \ --target '{"DeadLetterConfig": {"Arn": "DLQ_ARN"}, "RoleArn": "ROLE_ARN", "Arn":"QUEUE_ARN", "Input": "Hello world!" }' \ --flexible-time-window '{ "Mode": "OFF"}'
Um einen neuen Zeitplan mit einem DLQ zu erstellen, verwenden Sie denAWS CLI
  • Verwenden Sie den create-scheduleBefehl, um einen Zeitplan zu erstellen. Ersetzen Sie alle Platzhalterwerte durch Ihre Informationen.

    $ aws scheduler create-schedule --name new-schedule \ --schedule-expression 'rate(5 minutes)' \ --target '{"DeadLetterConfig": {"Arn": "DLQ_ARN"}, "RoleArn": "ROLE_ARN", "Arn":"QUEUE_ARN", "Input": "Hello world!" }' \ --flexible-time-window '{ "Mode": "OFF"}'

Im nächsten Abschnitt verwenden Sie die, um vom DLQ einAWS CLI unzustellungshandbuch für unzustellungshandbuch für unzustellungshandbuch für unzustellungshandbuch.

Ruft das Event für unzustellungshandbuch ab

Verwenden Sie den receive-messageBefehl, wie im Folgenden gezeigt, um ein Dead-Letter-Ereignis aus dem DLQ abzurufen. Mithilfe des--max-number-of-messages Attributs können Sie die Anzahl der abzurufenden Nachrichten festlegen.

$ aws sqs receive-message --queue-url your-dlq-url --attribute-names All --message-attribute-names All --max-number-of-messages 1

Wenn der Befehl erfolgreich ausgeführt wurde, wird eine Ausgabe ähnlich der Folgenden angezeigt.

{
    "Messages": [
        {
            "MessageId": "2aeg3510-fe3a-4f5a-ab6a-6906560eaf7e",
            "ReceiptHandle": "AQEBkNKTdOMrWgHKPoITRBwrPoK3eCSZIcZwVqCY0BZ+FfTcORFpopJbtCqj36VbBTlHreM8+qM/m5jcwqSlAlGmIJO/hYmMgn/+dwIty9izE7HnpvRhhEyHxbeTZ5V05RbeasYaBdNyi9WLcnAHviDh6MebLXXNWoFyYNsxdwJuG0f/w3htX6r3dxpXvvFNPGoQb8ihY37+u0gtsbuIwhLtUSmE8rbldEEwiUfi3IJ1zEZpUS77n/k1GWrMrnYg0Gx/BuaLzOrFi2F738XI/Hnh45uv3ca6OYwS1ojPQ1LtX2URg1haV5884FYlaRvY8jRlpCZabTkYRTZKSXG5KNgYZnHpmsspii6JNkjitYVFKPo0H91w5zkHlSx3REAuWk7m3r7PmOMvTNPMhctbD3CkTw==",
            "MD5OfBody": "07adc3fc889d6107d8bb8fda42fe0573",
            "Body": "{\"MessageBody\":\"Hello, world!",\"QueueUrl\":\"https://sqs.us-west-2.amazonaws.com/123456789012/does-not-exist\"}",
            "Attributes": {
                "SenderId": "AROA2DZE3W4CTL5ZR7EIN:ff00212d8c453aaaae644bc6846d4723",
                "ApproximateFirstReceiveTimestamp": "1652499058144",
                "ApproximateReceiveCount": "2",
                "SentTimestamp": "1652490733042"
            },
            "MD5OfMessageAttributes": "f72c1d78100860e00403d849831d4895",
            "MessageAttributes": {
                "ERROR_CODE": {
                    "StringValue": "AWS.SimpleQueueService.NonExistentQueue",
                    "DataType": "String"
                },
                "ERROR_MESSAGE": {
                    "StringValue": "The specified queue does not exist for this wsdl version.",
                    "DataType": "String"
                },
                "EXECUTION_ID": {
                    "StringValue": "ad06616e51cdf74a",
                    "DataType": "String"
                },
                "EXHAUSTED_RETRY_CONDITION": {
                    "StringValue": "MaximumEventAgeInSeconds",
                    "DataType": "String"
                }
                "IS_PAYLOAD_TRUNCATED": {
                    "StringValue": "false",
                    "DataType": "String"
                },
                "RETRY_ATTEMPTS": {
                    "StringValue": "0",
                    "DataType": "String"
                },
                "SCHEDULED_TIME": {
                    "StringValue": "2022-05-14T01:12:00Z",
                    "DataType": "String"
                },
                "SCHEDULE_ARN": {
                    "StringValue": "arn:aws:scheduler:us-west-2:123456789012:schedule/DLQ-test",
                    "DataType": "String"
                },
                "TARGET_ARN": {
                    "StringValue": "arn:aws:scheduler:::aws-sdk:sqs:sendMessage",
                    "DataType": "String"
                }
            }
        }
    ]
}

Beachten Sie die folgenden Attribute im Deadletter-Ereignis, damit Sie mögliche Gründe für das Scheitern der Zielinovation identifizieren und beheben können.

  • ERROR_CODE— Enthält den Fehlercode, den EventBridge Scheduler von der Service-API des Ziels empfängt. Im vorherigen Beispiel lautet der von Amazon SQS zurückgegebene FehlercodeAWS.SimpleQueueService.NonExistentQueue. Wenn der Zeitplan aufgrund eines Problems mit dem EventBridge Scheduler kein Ziel aufruft, wird stattdessen der folgende Fehlercode angezeigt:AWS.Scheduler.InternalServerError.

  • ERROR_MESSAGE— Enthält die Fehlermeldung, die EventBridge Scheduler von der Service-API des Ziels erhält. Im vorherigen Beispiel lautet die von Amazon SQS zurückgegebene FehlermeldungThe specified queue does not exist for this wsdl version. Wenn der Zeitplan aufgrund eines Problems mit dem EventBridge Scheduler fehlschlägt, wird stattdessen die folgende Fehlermeldung angezeigt:Unexpected error occurred while processing the request.

  • TARGET_ARN— Der ARN des Ziels, das Ihr Zeitplan aufruft, im folgenden Service-ARN-Format:arn:aws:scheduler:::aws-sdk:service:apiAction.

  • EXHAUSTED_RETRY_CONDITION— Gibt an, warum das Ereignis an den DLQ übermittelt wurde. Dieses Attribut ist vorhanden, wenn es sich bei dem Fehler der Ziel-API um einen wiederholbaren Fehler und nicht um einen permanenten Fehler handelt. Das Attribut kann die Werte enthalten,MaximumRetryAttempts wenn EventBridge Scheduler es an den DLQ gesendet hat, nachdem die maximale Anzahl von Wiederholungsversuchen, die Sie für den Zeitplan konfiguriert haben, überschritten wurdeMaximumEventAgeInSeconds, oder wenn das Ereignis älter als das im Zeitplan konfigurierte Höchstalter ist und immer noch nicht zugestellt werden kann.

Im vorherigen Beispiel können wir anhand des Fehlercodes und der Fehlermeldung feststellen, dass die Zielwarteschlange, die wir für den Zeitplan angegeben haben, nicht existiert.