Mengkonfigurasi antrian surat mati jadwal di Scheduler EventBridge - EventBridge Penjadwal

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengkonfigurasi antrian surat mati jadwal di Scheduler EventBridge

Amazon EventBridge Scheduler mendukung antrian huruf mati (DLQ) menggunakan Amazon Simple Queue Service. Ketika jadwal gagal menjalankan targetnya, EventBridge Scheduler mengirimkan payload JSON yang berisi detail pemanggilan dan respons apa pun yang diterima dari target ke antrian standar Amazon SQS yang Anda tentukan.

Topik berikut mengacu pada JSON ini sebagai peristiwa surat mati. Acara surat mati memungkinkan Anda memecahkan masalah dengan jadwal atau target Anda. Jika Anda mengonfigurasi kebijakan coba lagi untuk jadwal Anda, EventBridge Scheduler akan mengirimkan peristiwa surat mati yang telah menghabiskan jumlah maksimum percobaan ulang yang Anda tetapkan.

Topik berikut menjelaskan bagaimana Anda dapat mengonfigurasi antrean Amazon SQS sebagai DLQ untuk jadwal Anda, mengatur izin yang dibutuhkan EventBridge Penjadwal untuk mengirimkan pesan ke Amazon SQS, dan menerima peristiwa surat mati dari DLQ.

Buat antrean Amazon SQS

Sebelum Anda mengonfigurasi DLQ untuk jadwal Anda, Anda harus membuat antrian Amazon SQS standar. Untuk petunjuk cara membuat antrean menggunakan konsol Amazon SQS, lihat Membuat antrean Amazon SQS di Panduan Pengembang Layanan Antrian Sederhana Amazon.

catatan

EventBridge Scheduler tidak mendukung penggunaan antrian FIFO sebagai DLQ jadwal Anda.

Gunakan AWS CLI perintah berikut untuk membuat antrian standar.

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

Jika berhasil, Anda akan melihat QueueURL di output.

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

Setelah Anda membuat antrian, perhatikan antrian ARN. Anda akan memerlukan ARN saat menentukan DLQ untuk jadwal Scheduler Anda. EventBridge Anda dapat menemukan ARN antrian Anda di konsol Amazon SQS, atau dengan menggunakan perintah. get-queue-attributes AWS CLI

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

Jika berhasil, Anda akan melihat antrian ARN di output.

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

Di bagian berikutnya, Anda akan menambahkan izin yang diperlukan ke peran eksekusi jadwal Anda untuk memungkinkan EventBridge Scheduler mengirimkan peristiwa surat mati ke Amazon SQS.

Siapkan izin peran eksekusi

Agar EventBridge Scheduler dapat mengirimkan peristiwa surat mati ke Amazon SQS, peran eksekusi jadwal Anda memerlukan kebijakan izin berikut. Untuk informasi selengkapnya tentang melampirkan kebijakan izin baru ke peran eksekusi jadwal Anda, lihat Menyiapkan peran eksekusi.

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

Peran eksekusi jadwal Anda mungkin sudah memiliki izin yang diperlukan yang dilampirkan jika Anda menggunakan EventBridge Scheduler untuk memanggil target Amazon SQS API.

Di bagian berikutnya, Anda akan menggunakan konsol EventBridge Scheduler dan menentukan DLQ untuk jadwal Anda.

Tentukan antrian huruf mati

Untuk menentukan DLQ, gunakan konsol EventBridge Scheduler atau AWS CLI untuk memperbarui jadwal yang ada, atau buat yang baru.

Console
Untuk menentukan DLQ menggunakan konsol
  1. Masuk ke AWS Management Console, lalu pilih tautan berikut untuk membuka bagian EventBridge Scheduler pada EventBridge conosle: home https://console.aws.amazon.com/scheduler/

  2. Di konsol EventBridge Scheduler, buat jadwal baru, atau pilih jadwal yang ada dari daftar jadwal yang akan diedit.

  3. Pada halaman Pengaturan, untuk antrian Dead-letter (DLQ), lakukan salah satu hal berikut:

    • Pilih Pilih antrian Amazon SQS di AWS akun saya sebagai DLQ, lalu pilih antrian ARN untuk DLQ Anda dari daftar tarik-turun.

    • Pilih Tentukan antrean Amazon SQS di AWS akun lain sebagai DLQ, lalu masukkan ARN antrian untuk DLQ Anda. Jika Anda memilih antrian di AWS akun lain, konsol EventBridge Scheduler tidak akan dapat menampilkan antrian ARNs dalam daftar tarik-turun.

  4. Tinjau pilihan Anda, lalu pilih Buat jadwal atau Simpan jadwal untuk menyelesaikan konfigurasi DLQ.

  5. (Opsional) Untuk melihat detail DLQ jadwal, pilih nama jadwal dari daftar, lalu pilih tab antrian Dead-letter pada halaman detail Jadwal.

AWS CLI
Untuk memperbarui jadwal yang ada menggunakan AWS CLI
  • Gunakan update-scheduleperintah untuk memperbarui jadwal Anda. Tentukan antrean Amazon SQS yang Anda buat sebelumnya sebagai DLQ. Tentukan ARN peran IAM yang Anda lampirkan izin Amazon SQS yang diperlukan sebagai peran eksekusi. Ganti semua nilai placeholder lainnya dengan informasi Anda.

    $ 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"}'
Untuk membuat jadwal baru dengan DLQ menggunakan AWS CLI
  • Gunakan create-scheduleperintah untuk membuat jadwal. Ganti semua nilai placeholder dengan informasi Anda.

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

Di bagian berikutnya, Anda akan menggunakan AWS CLI untuk menerima peristiwa surat mati dari DLQ.

Ambil acara surat mati

Gunakan receive-messageperintah, seperti yang ditunjukkan dalam berikut ini, untuk mengambil peristiwa huruf mati dari DLQ. Anda dapat mengatur jumlah pesan yang akan diambil menggunakan --max-number-of-messages atribut.

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

Jika berhasil, Anda akan melihat output yang mirip dengan berikut ini.

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

Perhatikan atribut berikut dalam peristiwa dead-letter untuk membantu Anda mengidentifikasi dan memecahkan masalah kemungkinan alasan mengapa inovasi target gagal.

  • ERROR_CODE— Berisi kode kesalahan yang diterima EventBridge Scheduler dari API layanan target. Pada contoh sebelumnya, kode kesalahan yang dikembalikan oleh Amazon SQS adalah. AWS.SimpleQueueService.NonExistentQueue Jika jadwal gagal memanggil target karena masalah dengan EventBridge Scheduler, Anda akan melihat kode kesalahan berikut sebagai gantinya:. AWS.Scheduler.InternalServerError

  • ERROR_MESSAGE— Berisi pesan kesalahan yang diterima EventBridge Scheduler dari API layanan target. Dalam contoh sebelumnya, pesan kesalahan yang dikembalikan oleh Amazon SQS adalah. The specified queue does not exist for this wsdl version Jika jadwal gagal karena masalah dengan EventBridge Scheduler, Anda akan melihat pesan galat berikut:Unexpected error occurred while processing the request.

  • TARGET_ARN— ARN dari target yang dipanggil jadwal Anda, dalam format ARN layanan berikut:. arn:aws:scheduler:::aws-sdk:service:apiAction

  • EXHAUSTED_RETRY_CONDITION— Menunjukkan mengapa acara dikirim ke DLQ. Atribut ini akan hadir jika kesalahan dari API target adalah kesalahan yang dapat dicoba ulang, dan bukan kesalahan permanen. Atribut dapat berisi nilai MaximumRetryAttempts jika EventBridge Scheduler mengirimkannya ke DLQ setelah melebihi upaya percobaan ulang maksimum yang Anda konfigurasikan untuk jadwal, atauMaximumEventAgeInSeconds, jika acara lebih tua dari usia maksimum yang Anda konfigurasikan pada jadwal dan masih gagal dikirimkan.

Pada contoh sebelumnya, kita dapat menentukan, berdasarkan kode kesalahan, dan pesan kesalahan, bahwa antrian target yang kita tentukan untuk jadwal tidak ada.