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. Jika jadwal gagal menjalankan targetnya, EventBridge Scheduler mengirimkan JSON muatan yang berisi detail pemanggilan dan respons apa pun yang diterima dari target ke antrian standar Amazon yang Anda tentukan. SQS

Topik berikut mengacu pada ini JSON 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 SQS antrian Amazon sebagai DLQ jadwal Anda, mengatur izin yang dibutuhkan EventBridge Penjadwal untuk mengirimkan pesan ke AmazonSQS, dan menerima peristiwa surat mati dari. DLQ

Buat SQS antrian Amazon

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

catatan

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

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 ARN antrean. Anda akan memerlukan ARN ketika Anda menentukan jadwal EventBridge Scheduler Anda. DLQ Anda dapat menemukan antrian Anda ARN di SQS konsol Amazon, atau dengan menggunakan get-queue-attributes AWS CLI perintah.

$ 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 AmazonSQS, 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 jika Anda menggunakan EventBridge Scheduler untuk memanggil target Amazon. SQS API

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

Tentukan antrian huruf mati

Untuk menentukanDLQ, 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 SQS antrian Amazon di AWS akun saya sebagai DLQ, lalu pilih antrian ARN untuk Anda DLQ dari daftar tarik-turun.

    • Pilih Tentukan SQS antrian Amazon di AWS akun lain sebagai a DLQ, lalu masukkan antrean ARN untuk Anda. DLQ 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 DLQ detail jadwal, pilih nama jadwal dari daftar, lalu pilih tab Antrian huruf mati di halaman Detail jadwal.

AWS CLI
Untuk memperbarui jadwal yang ada menggunakan AWS CLI
  • Gunakan update-scheduleperintah untuk memperbarui jadwal Anda. Tentukan SQS antrian Amazon yang Anda buat sebelumnya sebagai. DLQ Tentukan IAM peran ARN yang Anda lampirkan SQS izin Amazon 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 acara 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 EventBridge Scheduler terima dari layanan API 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 layanan API 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— Target yang dipanggil jadwal Anda, dalam ARN format layanan berikut:arn:aws:scheduler:::aws-sdk:service:apiAction. ARN

  • EXHAUSTED_RETRY_CONDITION— Menunjukkan mengapa acara dikirim keDLQ. Atribut ini akan hadir jika kesalahan dari target API 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.