스케줄러에서 스케줄의 데드레터 대기열 구성하기 EventBridge - EventBridge 스케줄러

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

스케줄러에서 스케줄의 데드레터 대기열 구성하기 EventBridge

Amazon EventBridge Scheduler는 Amazon 심플 큐 서비스를 DLQ 사용하여 데드레터 큐 () 를 지원합니다. EventBridge 스케줄이 대상 호출에 실패할 경우 Scheduler는 호출 세부 정보 및 대상으로부터 수신한 모든 응답이 포함된 JSON 페이로드를 사용자가 지정하는 Amazon SQS 표준 대기열로 전달합니다.

다음 주제에서는 이를 JSON 데드레터 이벤트라고 합니다. Dead Letter 이벤트를 사용하면 일정이나 목표와 관련된 문제를 해결할 수 있습니다. 일정에 맞게 재시도 정책을 구성하면 EventBridge Scheduler는 설정한 최대 재시도 횟수를 모두 사용하여 데드레터 이벤트를 전달합니다.

다음 주제에서는 일정에 맞게 Amazon SQS 대기열을 구성하고, EventBridge Scheduler가 DLQ Amazon에 메시지를 전송하는 데 필요한 권한을 설정하고SQS, Amazon으로부터 데드레터 이벤트를 수신하는 방법을 설명합니다. DLQ

아마존 SQS 대기열 생성

일정에 DLQ 맞게 구성하기 전에 표준 Amazon SQS 대기열을 생성해야 합니다. Amazon SQS 콘솔을 사용하여 대기열을 생성하는 방법에 대한 지침은 Amazon 단순 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 ARN SQS 콘솔에서 또는 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 Scheduler가 데드레터 이벤트를 Amazon에 전송할 수 있도록 합니다. SQS

실행 역할 권한 설정

EventBridge Scheduler가 SQS Amazon에 데드레터 이벤트를 전송하도록 하려면 일정 실행 역할에 다음과 같은 권한 정책이 필요합니다. 일정 실행 역할에 새 권한 정책을 연결하는 방법에 대한 자세한 내용은 실행 역할 설정을 참조하세요.

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

EventBridge Scheduler를 사용하여 Amazon SQS API 대상을 호출하는 경우 스케줄 실행 역할에 필요한 권한이 이미 첨부되어 있을 수 있습니다.

다음 섹션에서는 EventBridge Scheduler 콘솔을 사용하여 일정에 DLQ 맞는 콘솔을 지정해 보겠습니다.

DLQ(Dead Letter Queue) 지정

를 지정하려면 EventBridge Scheduler 콘솔 또는 AWS CLI 를 사용하여 기존 일정을 업데이트하거나 새 일정을 만드십시오. DLQ

Console
콘솔 DLQ 사용을 지정하려면
  1. 에 AWS Management Console로그인한 후 다음 링크를 선택하여 EventBridge 콘솔의 EventBridge 스케줄러 섹션을 엽니다. 홈 https://console.aws.amazon.com/scheduler/

  2. EventBridge Scheduler 콘솔에서 새 일정을 만들거나 일정 목록에서 편집할 기존 일정을 선택합니다.

  3. 설정 페이지에서 데드레터 큐 (DLQ) 에 대해 다음 중 하나를 수행하십시오.

    • 내 AWS 계정의 Amazon SQS 대기열을 DLQ a로 선택을 선택한 다음 드롭다운 목록에서 해당 DLQ 대기열을 ARN 선택합니다.

    • 다른 AWS 계정의 Amazon SQS 대기열을 DLQ a로 지정을 선택한 다음 해당 대기열을 ARN 입력합니다DLQ. 다른 AWS 계정에서 대기열을 선택하는 경우 EventBridge Scheduler 콘솔은 해당 대기열을 ARNs 드롭다운 목록에 표시할 수 없습니다.

  4. 선택 항목을 검토한 다음 일정 만들기 또는 일정 저장을 선택하여 구성을 완료합니다. DLQ

  5. (선택 사항) 일정의 DLQ 세부 정보를 보려면 목록에서 일정 이름을 선택한 다음 일정 세부 정보 페이지에서 Dead-letter queue 탭을 선택합니다.

AWS CLI
를 사용하여 기존 일정을 업데이트하려면 AWS CLI
  • update-schedule명령을 사용하여 일정을 업데이트하십시오. 이전에 생성한 Amazon SQS 대기열을 로 지정합니다DLQ. 필수 Amazon SQS 권한을 연결한 IAM 역할을 ARN 실행 역할로 지정합니다. 다른 모든 자리 표시자 값을 해당 정보로 바꿉니다.

    $ 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

dead-letter 이벤트 검색

다음 그림과 같이 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"
                }
            }
        }
    ]
}

대상 간접 호출이 실패한 가능한 원인을 식별하고 문제를 해결하는 데 도움이 되도록 dead-letter 이벤트의 다음 속성을 기록해 두십시오.

  • ERROR_CODE— EventBridge Scheduler가 대상 서비스로부터 받는 오류 코드를 포함합니다. API 위 예제에서 Amazon에서 반환한 오류 코드는 SQS 입니다AWS.SimpleQueueService.NonExistentQueue. EventBridge 스케줄러 문제로 인해 스케줄이 대상을 호출하지 못하는 경우 대신 다음 오류 코드가 표시됩니다. AWS.Scheduler.InternalServerError

  • ERROR_MESSAGE— EventBridge Scheduler가 대상 서비스로부터 받는 오류 메시지를 포함합니다. API 위 예제에서 Amazon에서 반환한 오류 메시지는 SQS 입니다The specified queue does not exist for this wsdl version. EventBridge Scheduler 문제로 인해 일정이 실패하는 경우 대신 다음 오류 메시지가 표시됩니다. Unexpected error occurred while processing the request

  • TARGET_ARN— 스케줄이 호출하는 ARN 대상의 서비스 형식으로, 다음과 같은 서비스 ARN 형식:. arn:aws:scheduler:::aws-sdk:service:apiAction

  • EXHAUSTED_RETRY_CONDITION— 이벤트가 에 전달된 이유를 나타냅니다. DLQ 이 속성은 대상의 API 오류가 영구적인 오류가 아니라 재시도 가능한 오류인 경우 나타납니다. 속성에는 EventBridge 스케줄에 대해 구성한 최대 재시도 횟수를 DLQ 초과한 후 Scheduler에서 전송한 경우 또는 MaximumEventAgeInSeconds 이벤트가 일정에 구성한 최대 기간보다 오래되었는데도 전송에 실패한 경우 값이 MaximumRetryAttempts 포함될 수 있습니다.

위 예제에서는 오류 코드와 오류 메시지를 기반으로 일정에 지정한 대상 대기열이 존재하지 않음을 확인할 수 있습니다.