ス EventBridge ケジューラでスケジュールのデッドレターキューを設定する - EventBridge スケジューラ

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ス EventBridge ケジューラでスケジュールのデッドレターキューを設定する

Amazon EventBridge スケジューラは、Amazon Simple Queue Service を使用してデッドレターキュー (DLQ) をサポートします。スケジュールがターゲットの呼び出しに失敗すると、ス EventBridge ケジューラは、呼び出しの詳細とターゲットから受信したレスポンスを含むJSONペイロードを、指定した Amazon SQS標準キューに配信します。

次のトピックでは、これをデッドレターイベント JSONと呼びます。デッドレターイベントを使用すると、スケジュールやターゲットに関する問題をトラブルシューティングできます。スケジュールに再試行ポリシーを設定すると、ス EventBridge ケジューラは設定した最大再試行回数を使い果たしたデッドレターイベントを配信します。

以下のトピックでは、スケジュールDLQの として Amazon SQSキューを設定し、ス EventBridge ケジューラが Amazon にメッセージを配信するために必要なアクセス許可を設定しSQS、 からデッドレターイベントを受信する方法について説明しますDLQ。

Amazon SQSキューを作成する

スケジュールDLQに を設定する前に、標準の Amazon SQSキューを作成する必要があります。Amazon SQSコンソールを使用してキューを作成する手順については、「Amazon Simple Queue Service デベロッパーガイドSQS」の「Amazon キューの作成」を参照してください。

注記

EventBridge スケジューラは、スケジュールの としてのFIFOキューの使用をサポートしていませんDLQ。

次の AWS CLI コマンドを使用して、標準キューを作成します。

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

成功すると、出力に QueueURL が表示されます。

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

キューを作成したら、キュー を書き留めますARN。ス EventBridge ケジューラのスケジュールDLQに を指定するARN場合は、 が必要です。キューは Amazon SQSコンソールARNで、または get-queue-attributes AWS CLI コマンドを使用して見つけることができます。

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

成功すると、ARN出力にキューが表示されます。

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

次のセクションでは、スケジュール実行ロールに必要なアクセス許可を追加して、ス EventBridge ケジューラがデッドレターイベントを Amazon に配信できるようにしますSQS。

実行ロールのアクセス許可を設定する

ス EventBridge ケジューラがデッドレターイベントを Amazon に配信できるようにするにはSQS、スケジュール実行ロールに次のアクセス許可ポリシーが必要です。スケジュール実行ロールに新しいアクセス権限ポリシーをアタッチする方法の詳細については、「実行ロールの設定」を参照してください。

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

ス EventBridge ケジューラを使用して Amazon SQSAPIターゲットを呼び出す場合、スケジュール実行ロールに必要なアクセス許可が既にアタッチされている可能性があります。

次のセクションでは、ス EventBridge ケジューラコンソールを使用して、スケジュールDLQに を指定します。

デッドレターキューを指定する

を指定するにはDLQ、ス EventBridge ケジューラコンソールまたは AWS CLI を使用して既存のスケジュールを更新するか、新しいスケジュールを作成します。

Console
コンソールDLQを使用して を指定するには
  1. にサインインし AWS Management Console、次のリンクを選択して EventBridge 、conosle のス EventBridge ケジューラセクションを開きます。https://console.aws.amazon.com/scheduler/ホーム

  2. ス EventBridge ケジューラコンソールで、新しいスケジュールを作成するか、編集するスケジュールのリストから既存のスケジュールを選択します。

  3. 「設定」ページの「デッドレターキュー (DLQ)」で、次のいずれかを実行します。

    • AWS アカウント内の Amazon SQSキューを としてDLQ選択 を選択し、ドロップダウンリストから ARNのキューDLQを選択します。

    • 他の AWS アカウントの Amazon SQSキューを として指定 を選択しDLQ、 のキューARNを入力しますDLQ。別の AWS アカウントでキューを選択すると、ス EventBridge ケジューラコンソールはキューをドロップダウンリストARNsに表示できなくなります。

  4. 選択内容を確認し、スケジュールの作成またはスケジュールの保存を選択して、 の設定を完了しますDLQ。

  5. (オプション) スケジュールDLQの詳細を表示するには、リストからスケジュールの名前を選択し、スケジュールの詳細ページのデッドレターキュータブを選択します。

AWS CLI
を使用して既存のスケジュールを更新するには AWS CLI
  • update-schedule コマンドを使用してスケジュールを更新します。以前に作成した Amazon SQSキューを として指定しますDLQ。必要な Amazon アクセスSQS許可ARNをアタッチしたIAMロールを実行ロールとして指定します。他のすべてのプレースホルダー値を、ユーザー自身の情報に置き換えます。

    $ 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"}'
DLQ を使用して で新しいスケジュールを作成するには AWS CLI
  • スケジュールを作成するには、create-schedule コマンドを使用します。すべてのプレースホルダー値を、ユーザー自身の情報に置き換えます。

    $ 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"}'

次のセクションでは、 を使用して AWS CLI からデッドレターイベントを受信しますDLQ。

デッドレターイベントの取得

以下に示すように receive-message コマンドを使用して、 からデッドレターイベントを取得しますDLQ。--max-number-of-messages 属性を使用して、取得するメッセージの数を設定できます。

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

成功すると、次のような出力が表示されます。

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

デッドレターイベントの以下の属性に注目しておくと、ターゲットの呼び出しが失敗した原因として考えられるものの特定とトラブルシューティングに役立ちます。

  • ERROR_CODE – ス EventBridge ケジューラがターゲットのサービス から受け取るエラーコードが含まれますAPI。前の例では、Amazon によって返されるエラーコードは SQSですAWS.SimpleQueueService.NonExistentQueue。ス EventBridge ケジューラの問題によりスケジュールがターゲットの呼び出しに失敗した場合、代わりに というエラーコードが表示されますAWS.Scheduler.InternalServerError

  • ERROR_MESSAGE – ス EventBridge ケジューラがターゲットのサービス から受け取るエラーメッセージが含まれますAPI。前の例では、Amazon から返されるエラーメッセージSQSは ですThe specified queue does not exist for this wsdl version。ス EventBridge ケジューラの問題が原因でスケジュールが失敗した場合、代わりに というエラーメッセージが表示されますUnexpected error occurred while processing the request

  • TARGET_ARN - スケジュールが呼び出すターゲットARNの を、次のサービスARN形式で指定します: arn:aws:scheduler:::aws-sdk:service:apiAction

  • EXHAUSTED_RETRY_CONDITION – イベントが に配信された理由を示しますDLQ。この属性は、ターゲットからのエラーAPIが再試行可能なエラーであり、永続的なエラーではない場合に表示されます。属性には、スケジュールに設定した最大再試行回数を超えたDLQ後にスMaximumRetryAttempts EventBridge ケジューラがそれを に送信した場合、またはイベントがスケジュールに設定した最大期間より古くMaximumEventAgeInSeconds、まだ配信に失敗している場合、 の値を含めることができます。

前の例では、エラーコードとエラーメッセージに基づいて、スケジュールに指定したターゲットキューが存在しないと判断できます。