Memecahkan Masalah Amazon Scheduler EventBridge - EventBridge Penjadwal

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

Memecahkan Masalah Amazon Scheduler EventBridge

Anda dapat menggunakan topik di bagian ini untuk memecahkan masalah umum Amazon EventBridge Scheduler.

Jadwal saya gagal dengan kesalahan target

Kegagalan pemanggilan target adalah salah satu masalah paling umum dengan EventBridge Scheduler. Kegagalan ini dapat terjadi karena beberapa alasan:

Penyebab umum:

  • Parameter target yang hilang atau salah.

  • Masalah konektivitas jaringan.

  • Pelambatan API.

  • Konfigurasi target salah.

Langkah pemecahan masalah

  1. Mengatur Antrian Surat Mati (DLQ)

    • DLQ membantu Anda menangkap dan menganalisis pemanggilan yang gagal.

    • Pemanggilan yang gagal dikirim ke DLQ dengan pesan kesalahan terperinci.

    • Untuk mengonfigurasi DLQ, tambahkan ke konfigurasi jadwal Anda:

    { "DeadLetterConfig": { "Arn": "arn:aws:sqs:region:account-id:MyDLQ" } }

    Catatan: Jika DLQ Anda dienkripsi dengan kunci KMS, pastikan kebijakan kunci memungkinkan EventBridge Scheduler untuk menggunakannya:

    { "Sid": "Allow EventBridge Scheduler to use the key", "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
  2. Verifikasi parameter API

    • Pastikan semua parameter yang diperlukan untuk panggilan API target Anda ada dan diformat dengan benar.

    • Periksa apakah nilai parameter berada dalam rentang yang diizinkan.

    • Verifikasi bahwa titik akhir API dapat diakses dari VPC Anda jika menggunakan titik akhir VPC.

  3. Tinjau konfigurasi jaringan

    • Jika panggilan gagal karena masalah jaringan sementara, terapkan logika coba lagi.

    • Contoh kebijakan coba lagi:

    { "RetryPolicy": { "MaximumRetryAttempts": 3, "MaximumEventAgeInSeconds": 3600 } }
  4. Periksa konfigurasi khusus target

    • Untuk target template (seperti tugas ECS), pastikan Anda memberikan penggantian melalui Target.Input parameter API pembuatan jadwal.

    • Verifikasi bahwa layanan target Anda didukung dan dikonfigurasi dengan benar.

Jadwalkan masalah izin peran eksekusi

Masalah izin peran IAM adalah alasan umum untuk kegagalan eksekusi jadwal. Berikut cara memecahkan masalah dan mengatasi masalah ini:

Penyebab umum

  • Izin yang diperlukan tidak ada untuk layanan target

  • Konfigurasi peran yang salah dalam jadwal

  • Hubungan kepercayaan yang hilang dengan layanan EventBridge Scheduler

  • Izin tidak memadai untuk mengakses sumber daya terenkripsi

Gejala

  • Peningkatan TargetErrorCount metrik di CloudWatch

  • Jadwal gagal dijalankan tanpa masalah yang jelas dalam konfigurasi jadwal

Langkah pemecahan masalah

  1. Monitor CloudWatch metrik

    • Periksa TargetErrorCount metrik di CloudWatch.

  2. Gunakan Dead-Letter Queue (DLQ) untuk mengonfirmasi masalah izin

    • Konfigurasikan DLQ untuk jadwal Anda.

    • Jika ada masalah izin dengan target Anda, dan DLQ dikonfigurasi dengan benar, Anda akan melihat pemanggilan gagal di DLQ dengan pesan kesalahan terkait izin.

    • Jika DLQ tetap kosong meskipun eksekusi gagal ditampilkan dalam CloudWatch metrik, ini kemungkinan menunjukkan masalah izin yang mencegah EventBridge Scheduler menulis ke DLQ itu sendiri.

    catatan

    Pastikan DLQ itu sendiri memiliki izin yang benar. Jika dienkripsi, pastikan EventBridge Scheduler memiliki izin untuk menggunakan kunci KMS.

  3. Verifikasi hubungan kepercayaan

    • Pastikan peran IAM Anda memiliki hubungan kepercayaan yang benar dengan EventBridge Scheduler:

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": "sts:AssumeRole" }] }
  4. Periksa izin peran eksekusi jadwal

    • Peran eksekusi jadwal memerlukan izin khusus untuk memanggil jenis target yang berbeda.

    • Contoh izin untuk disertakan dalam kebijakan peran eksekusi jadwal Anda:

    // For Lambda function targets - add to schedule execution role { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:region:account-id:function:function-name" }] } // For SQS queue targets - add to schedule execution role { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": "arn:aws:sqs:region:account-id:queue-name" }] }
  5. Periksa akses sumber daya terenkripsi

    • Jika target Anda menggunakan sumber daya terenkripsi (misalnya, antrian SQS terenkripsi KMS), pastikan peran Anda memiliki izin untuk menggunakan kunci KMS:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:account-id:key/key-id" } ] }
  6. Verifikasi konfigurasi ARN peran

    • Pastikan peran ARN dalam konfigurasi jadwal Anda sudah benar.

    • Verifikasi peran ada di wilayah yang sama Akun AWS dan sesuai dengan jadwal Anda.

Memahami dan mengelola kuota layanan

Jika Anda mengalami masalah saat membuat jadwal atau melihat pemanggilan yang dibatasi, Anda mungkin mencapai batas kuota layanan. EventBridge Scheduler memiliki kuota untuk jumlah jadwal, grup jadwal, dan tingkat pemanggilan, yang dapat bervariasi menurut wilayah.

Mengidentifikasi masalah kuota

Untuk menentukan apakah Anda mencapai batas kuota:

  1. Monitor CloudWatch metrik

    • Periksa InvocationThrottleCount metriknya. Peningkatan metrik ini menunjukkan Anda melebihi batas tingkat pemanggilan Anda.

    • Tinjau InvocationAttemptCount metrik untuk memahami penggunaan Anda saat ini.

  2. Perhatikan pesan kesalahan tertentu

    • Saat membuat atau memodifikasi jadwal, a LimitExceededException menunjukkan bahwa Anda telah mencapai jumlah maksimum jadwal atau grup jadwal.

    • Panggilan API yang mengembalikan kesalahan pelambatan menyarankan Anda melebihi kuota permintaan API.

Menyelesaikan masalah kuota

Jika Anda menentukan Anda mencapai batas kuota:

  1. Tinjau dan optimalkan jadwal Anda saat ini. Pertimbangkan untuk mengkonsolidasikan jadwal serupa atau menghapus yang tidak terpakai.

  2. Untuk pelambatan API, terapkan coba lagi dengan backoff dalam panggilan API Anda.

  3. Jika Anda membutuhkan kuota yang lebih tinggi, mintalah peningkatan melalui konsol Service Quotas. Pilih EventBridge Scheduler, pilih kuota yang perlu Anda tingkatkan, dan kirimkan permintaan dengan justifikasi bisnis Anda.

Pola jadwal dan memicu masalah waktu

Pengguna terkadang mengalami masalah di mana jadwal tidak terpicu pada waktu yang diharapkan. Ini paling sering disebabkan oleh kesalahpahaman tentang pola jadwal, perubahan waktu musim panas, atau jendela waktu yang fleksibel.

Penyebab umum

  • Salah tafsir ekspresi cron.

  • Perilaku tak terduga selama perubahan waktu musim panas.

  • Kebingungan tentang jendela waktu yang fleksibel.

  • Kesalahpahaman ekspresi tingkat.

Langkah pemecahan masalah

  1. Verifikasi ekspresi cron

    • Pastikan ekspresi cron Anda diformat dengan benar.

    • Perhatikan bahwa Anda tidak dapat menentukan keduanya day-of-month dan day-of-week bidang secara bersamaan dalam ekspresi cron.

  2. Pertimbangan zona waktu

    • Pilih zona waktu pilihan Anda saat membuat jadwal.

    • Pahami bagaimana daylight saving time memengaruhi jadwal Anda karena penyesuaian ini didasarkan pada UTC.

    Contoh dampak musim panas: Jika Anda mengonfigurasi jadwal untuk berjalan pada pukul 7:00 GMT:

    • Selama musim dingin: Jadwal berjalan pada 7:00 AM GMT (sebagai GMT = UTC)

    • Selama musim panas: Jadwal masih berjalan pada 7:00 AM UTC, yang sekarang 6:00 AM GMT/BST

    Jika Anda membutuhkan jadwal untuk berjalan pada waktu lokal yang sama sepanjang tahun, pastikan untuk memilih zona waktu yang sesuai saat membuat jadwal dan bagaimana penghematan siang hari dapat memengaruhi zona waktu tersebut.

  3. Memahami jendela waktu yang fleksibel

    • Jendela waktu yang fleksibel memungkinkan EventBridge Scheduler untuk mengoptimalkan pemanggilan.

    • Jadwal mungkin tidak terpicu tepat di awal jendela.

    • Pantau waktu doa yang sebenarnya untuk memahami perilaku.

  4. Tingkat ulasan dan ekspresi cron

    • Pastikan ekspresi tingkat diformat dengan benar (misalnya,rate(5 minutes),rate(1 hour)).

    • Untuk ekspresi rate dan cron, ketahuilah bahwa pemanggilan jadwal tidak dijepit ke detik ke-0 dalam satu menit.

    • Jadwal dapat memicu dalam menit yang ditentukan, tetapi tidak harus pada awal menit yang tepat.

    Contoh:

    • Jadwal dengan rate(1 hour) mungkin berjalan pada 14:00:45, 15:00:32, 16:00:18, dll.

    • Jadwal cron yang ditetapkan untuk 0 * * * ? * (setiap jam) mungkin berjalan pada pukul 14:00:15, 15:00:07, 16:00:52, dll.

  5. Monitor CloudWatch metrik

    • Gunakan InvocationAttemptCount metrik untuk memverifikasi apakah jadwal Anda memicu.

    • Periksa TargetErrorCount apakah pemanggilan gagal.

    • Jika Anda telah mengonfigurasi Antrian Surat Mati, pantau InvocationsSentToDeadLetterCount untuk melacak pemanggilan yang gagal.

Membuat pola jadwal dan ekspresi cron

Pengguna sering mengalami masalah saat membuat pola jadwal, terutama dengan ekspresi cron. Berikut adalah beberapa masalah umum dan cara mengatasinya:

Masalah umum

  • Sintaks cron salah

  • Mencoba menggunakan fitur cron yang tidak didukung

  • Kebingungan tentang bidang mana yang dapat digunakan bersama

Langkah pemecahan masalah

  1. Tinjau sintaks ekspresi cron

    • Pastikan ekspresi cron Anda mengikuti format yang benar:Minutes Hours Day-of-month Month Day-of-week Year.

    • Ingat bahwa EventBridge Scheduler menggunakan standar cron dengan bidang Tahun tambahan.

  2. Memahami keterbatasan

    • Anda tidak dapat menentukan kedua day-of-week bidang day-of-month dan secara bersamaan seperti yang dibahas di sini.

    • Ekspresi cron yang mengarah ke tingkat lebih cepat dari 1 menit tidak didukung.

  3. Gunakan fitur pratinjau jadwal

    • Saat membuat atau mengedit jadwal, EventBridge Scheduler menyediakan pratinjau 10 kali eksekusi berikutnya.

    • Gunakan pratinjau ini untuk memverifikasi bahwa jadwal Anda akan berjalan pada waktu yang ditentukan.

    • Jika pratinjau tidak sesuai dengan harapan Anda, tinjau dan sesuaikan ekspresi cron Anda.

Apakah target saya sedang dipicu?

Untuk mengonfirmasi apakah target Anda sedang dipicu:

  1. Periksa CloudWatch metrik:

    • InvocationAttemptCountmenunjukkan jumlah percobaan pemanggilan

    • TargetErrorCountmenunjukkan jika ada pemanggilan yang gagal

    • TargetErrorThrottledCountmenunjukkan apakah target Anda sedang dibatasi

    • InvocationDroppedCountmenunjukkan jika ada pemanggilan yang dijatuhkan

  2. Konfigurasikan Dead-Letter Queue (DLQ) untuk menangkap dan menganalisis pemanggilan yang gagal.

Target template vs universal

Jika Anda menerima kesalahan seperti “Permintaan tidak valid disediakan: [layanan] bukan layanan yang didukung untuk target”, Anda mungkin mencoba menggunakan layanan yang tidak didukung sebagai target templat.

Untuk mengatasi ini:

  1. Periksa apakah layanan yang Anda inginkan didukung sebagai target template.

  2. Jika tidak didukung, gunakan target universal sebagai gantinya dan konfigurasikan untuk membuat panggilan API yang sesuai ke layanan Anda.

Konfigurasi input target universal tidak valid

Saat Anda membuat jadwal dengan target universal, EventBridge Scheduler memvalidasi format ARN target tetapi tidak memvalidasi konten Input bidang terhadap API layanan hilir. Ini berarti jadwal dapat dibuat dengan sukses bahkan jika Input berisi nilai yang akan ditolak oleh layanan target pada waktu pemanggilan.

Jadwal dengan konfigurasi input target yang tidak valid dipicu pada ekspresi yang dikonfigurasi tetapi gagal pada setiap pemanggilan. Anda mungkin tidak menemukan kesalahan konfigurasi sampai jadwal dipanggil, yang bisa berjam-jam atau berhari-hari setelah pembuatan.

Gejala

  • Jadwal dibuat tanpa kesalahan, tetapi TargetErrorCount CloudWatch metrik meningkat pada setiap pemanggilan.

  • Pesan DLQ berisi kode kesalahan dari layanan target (misalnya, InvalidParameterValueException atauValidationException), tidak. AWS.Scheduler.InternalServerError

  • ERROR_MESSAGEDalam pesan DLQ mereferensikan kegagalan validasi parameter input tertentu.

Contoh

Contoh berikut menunjukkan konfigurasi input umum yang tidak valid untuk target AWS Lambda universal (). arn:aws:scheduler:::aws-sdk:lambda:invoke

Kualifikasi ketidakcocokan

Jadwal dengan masukan berikut menentukan versi 2 dalam FunctionName dan versi 1 di Qualifier bidang:

{ "FunctionName": "MyFunction:2", "Qualifier": "1" }

Jadwal ini berhasil dibuat, tetapi setiap pemanggilan gagal. Pesan DLQ berisi:

  • ERROR_CODE: InvalidParameterValueException

  • ERROR_MESSAGE: The derived qualifier from the function name does not match the specified qualifier.

Nama fungsi tidak valid

Jadwal dengan masukan berikut menentukan nilai spasi khusus untuk: FunctionName

{ "FunctionName": " " }

Pesan DLQ berisi:

  • ERROR_CODE: ValidationException

  • ERROR_MESSAGE: Kesalahan validasi yang menunjukkan nama fungsi tidak cocok dengan pola yang diperlukan.

Cara mengatasinya

  1. Konfigurasikan DLQ. Selalu konfigurasikan antrian huruf mati untuk jadwal yang menggunakan target universal. Atribut pesan DLQ (ERROR_CODEdanERROR_MESSAGE) berisi kesalahan spesifik yang dikembalikan oleh layanan target, yang mengidentifikasi parameter input yang tidak valid.

  2. Validasi parameter input terhadap API layanan target. Sebelum membuat jadwal, verifikasi bahwa JSON di Input bidang Anda berisi nilai yang valid dengan memanggil API target secara langsung. Misalnya, panggil AWS Lambda fungsi Anda dengan parameter yang sama menggunakan AWS Lambda Invoke API untuk mengonfirmasi permintaan berhasil.

  3. Tes dengan jadwal satu kali. Buat jadwal satu kali untuk memverifikasi bahwa pemanggilan target berhasil sebelum mengonfigurasi jadwal berulang.

  4. Tinjau referensi API layanan target. Periksa referensi API untuk layanan yang Anda targetkan untuk mengonfirmasi parameter yang diperlukan, rentang nilai yang valid, dan batasan. Untuk AWS Lambda Invoke, lihat Memanggil di Panduan AWS Lambda Pengembang.

Jadwalkan pembaruan yang memicu pemanggilan yang tidak terduga

Saat Anda mengubah jadwal, pemanggilan mungkin tidak langsung mencerminkan jadwal yang diperbarui. Tunggu sebentar hingga perubahan diterapkan. Misalnya, jika Anda memperbarui jadwal mendekati waktu pemicu aslinya, Anda mungkin melihat pemanggilan berdasarkan konfigurasi jadwal asli.

Menonaktifkan atau mengaktifkan jadwal satu kali

Ketika mengaktifkan kembali jadwal satu kali setelah waktu yang dijadwalkan semula telah berlalu, jadwal dapat segera memanggil targetnya. Ini dapat terjadi bahkan jika jadwal dinonaktifkan sebelum waktu eksekusi aslinya.

Contoh:

  • Waktu sekarang: 13:15 UTC

  • Jadwal satu kali dibuat untuk: 13:30 UTC

  • Jadwal dinonaktifkan sebelum 13:30 UTC

  • Jadwal diaktifkan kembali pada pukul 14:00 UTC

  • Hasil: Target dapat dipanggil segera setelah mengaktifkan kembali