Pemecahan Masalah CloudWatch Events - Amazon CloudWatch Peristiwa

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

Pemecahan Masalah CloudWatch Events

catatan

Amazon EventBridge adalah cara pilihan untuk mengelola peristiwa Anda. CloudWatch Events dan EventBridge adalah layanan dan API dasar yang sama, tetapi EventBridge menyediakan lebih banyak fitur. Perubahan yang Anda buat di CloudWatch atau EventBridge akan muncul di setiap konsol. Untuk informasi selengkapnya, lihat Amazon EventBridge.

Anda dapat menggunakan langkah-langkah dalam bagian ini untuk memecahkan masalah CloudWatch Events.

Aturan saya dipicu tapi fungsi Lambda saya tidak dipanggil

Pastikan Anda memiliki izin yang tepat untuk fungsi Lambda Anda. Jalankan perintah berikut dengan menggunakan AWS CLI (ganti nama fungsi dengan fungsi Anda dan gunakan Wilayah AWS fungsi Anda):

aws lambda get-policy --function-name MyFunction --region us-east-1

Anda akan melihat output yang serupa dengan yang berikut:

{ "Policy": "{\"Version\":\"2012-10-17\", \"Statement\":[ {\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:us-east-1:123456789012:rule/MyRule\"}}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:MyFunction\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Sid\":\"MyId\"} ], \"Id\":\"default\"}" }

Jika Anda melihat pesan berikut:

A client error (ResourceNotFoundException) occurred when calling the GetPolicy operation: The resource you requested does not exist.

Atau, Anda melihat output tetapi Anda tidak dapat menemukan events.amazonaws.com sebagai entitas terpercaya dalam kebijakan, jalankan perintah berikut:

aws lambda add-permission \ --function-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule
catatan

Jika kebijakannya salah, Anda juga dapat mengedit aturan di konsol CloudWatch Events dengan menghapus lalu menambahkannya kembali ke aturan. Konsol CloudWatch Events kemudian menetapkan izin yang benar pada target.

Jika Anda menggunakan alias atau versi Lambda tertentu, tambahkan parameter --qualifier di perintah aws lambda get-policy dan aws lambda add-permission.

aws lambda add-permission \ --function-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule --qualifier alias or version

Alasan lain fungsi Lambda akan gagal untuk memicu adalah jika kebijakan yang Anda lihat ketika menjalankan get-policy berisi bidang SourceAccount. Pengaturan SourceAccount mencegah CloudWatch Events meminta fungsi.

Saya baru saja membuat atau memodifikasi aturan, tetapi tidak cocok dengan peristiwa pengujian

Saat Anda membuat perubahan aturan atau perubahan targetnya, kejadian yang masuk mungkin tidak langsung mulai atau berhenti cocok dengan aturan baru atau yang diperbarui. Tunggu sebentar hingga perubahan diterapkan. Jika, setelah periode singkat ini, peristiwa masih tidak cocok, Anda juga dapat memeriksa metrik CloudWatch untuk aturan Anda seperti TriggeredRules, Invocations, dan FailedInvocations untuk debugging lebih lanjut. Untuk informasi selengkapnya tentang metrik ini, lihat Metrik dan Dimensi Amazon CloudWatch Events di Panduan Pengguna Amazon CloudWatch.

Jika aturan dipicu oleh sebuah peristiwa dari layanan AWS, Anda juga dapat menggunakan tindakan TestEventPattern untuk menguji pola peristiwa aturan Anda dengan peristiwa pengujian untuk memastikan pola peristiwa aturan Anda sudah diatur dengan benar. Untuk informasi selengkapnya, lihat TestEventPattern di Referensi API Amazon CloudWatch Events.

Aturan saya tidak memicu sendiri pada waktu yang ditentukan dalam ScheduleExpression

ScheduleExpressions ada dalam UTC. Pastikan Anda telah mengatur jadwal untuk aturan agar memicu sendiri di zona waktu UTC. Jika ScheduleExpression benar, ikuti langkah-langkah di bawah Saya baru saja membuat atau memodifikasi aturan, tetapi tidak cocok dengan peristiwa pengujian.

Aturan saya tidak memicu pada waktu yang saya harapkan

CloudWatch Events tidak mendukung pengaturan waktu mulai yang tepat saat Anda membuat aturan untuk dijalankan setiap periode waktu. Hitung mundur untuk waktu aktif dimulai segera setelah Anda membuat aturan.

Anda dapat menggunakan ekspresi cron untuk memanggil target pada waktu tertentu. Misalnya, Anda dapat menggunakan ekspresi cron untuk membuat aturan yang dipicu setiap 4 jam tepat pada 0 menit. Di konsol CloudWatch, Anda akan menggunakan ekspresi cron 0 0/4 * * ? *, dan dengan AWS CLI Anda akan menggunakan ekspresi cron cron(0 0/4 * * ? *). Misalnya, untuk membuat aturan bernama TestRule yang dipicu setiap 4 jam menggunakan AWS CLI, Anda akan mengetik berikut ini pada prompt perintah:

aws events put-rule --name TestRule --schedule-expression 'cron(0 0/4 * * ? *)'

Anda dapat menggunakan ekspresi cron 0/5 * * * ? * untuk memicu aturan setiap 5 menit. Misalnya:

aws events put-rule --name TestRule --schedule-expression 'cron(0/5 * * * ? *)'

CloudWatch Events tidak memberikan presisi tingkat kedua dalam ekspresi jadwal. Resolusi terbaik untuk penggunaan ekspresi cron adalah satu menit. Karena sifat terdistribusi CloudWatch Events dan layanan target, dapat terjadi penundaan beberapa detik antara waktu ketika aturan dijadwalkan dipicu dan waktu ketika layanan target menjalankan sumber daya target. Aturan terjadwal Anda akan dipicu di menit itu tetapi tidak tepat pada detik ke-0.

Aturan saya cocok dengan panggilan API IAM tapi aturan saya tidak dipicu

Layanan IAM hanya tersedia di Wilayah US East (N. Virginia), sehingga peristiwa Panggilan API AWS dari IAM hanya tersedia di wilayah tersebut. Untuk informasi selengkapnya, lihat CloudWatchContoh Peristiwa dari Layanan yang Didukung.

Aturan saya tidak bekerja karena IAM role yang terkait dengan aturan diabaikan ketika aturan dipicu

IAM role untuk aturan hanya digunakan untuk peristiwa terkait dengan pengaliran Kinesis. Untuk fungsi Lambda atau topik Amazon SNS, Anda perlu memberikan Izin berbasis sumber daya.

Pastikan titik akhir AWS STS wilayah Anda diaktifkan. CloudWatch Events berbicara dengan titik akhir AWS STS wilayah saat mengambil IAM role yang Anda berikan. Untuk informasi selengkapnya, lihat Mengaktifkan dan Menonaktifkan AWS STS di Wilayah AWS di Panduan Pengguna IAM.

Saya membuat aturan dengan EventPattern yang seharusnya cocok dengan sumber daya, tapi saya tidak melihat peristiwa yang cocok dengan aturan

Sebagian besar layanan di AWS menganggap tanda titik dua (:) atau garis miring (/) sebagai karakter yang sama di Amazon Resource Names (ARNs). Namun, CloudWatch Events menggunakan pencarian yang sama persis di pola peristiwa dan aturan. Pastikan untuk menggunakan karakter ARN yang benar saat membuat pola peristiwa sehingga cocok dengan sintaks ARN di peristiwa yang dicocokkan.

Selain itu, tidak setiap peristiwa mempunyai field sumber daya yang diisi (seperti peristiwa panggilan API AWS dari CloudTrail).

Pengiriman peristiwa saya ke target tertunda

CloudWatch Events mencoba untuk mengirimkan peristiwa ke target hingga 24 jam, kecuali jika sumber daya target Anda dibatasi. Upaya pertama dilakukan segera setelah kejadian tiba di alur kejadian. Jika layanan target mengalami masalah, CloudWatch Events secara otomatis menjadwal ulang pengiriman lain. Jika 24 jam telah berlalu sejak datangnya peristiwa, tidak ada lagi upaya yang dijadwalkan dan metrik FailedInvocations diterbitkan di CloudWatch. Kami menyarankan Anda untuk membuat alarm CloudWatch di metrik FailedInvocations.

Beberapa kejadian tidak pernah dikirimkan ke target saya

Jika target aturan CloudWatch Events dibatasi untuk waktu yang lebih lama, CloudWatch Events mungkin tidak mencoba ulang pengiriman. Sebagai contoh, jika target tidak ditetapkan untuk menangani lalu lintas peristiwa yang masuk dan layanan target membatasi permintaan yang dibuat CloudWatch Events atas nama Anda, CloudWatch Events mungkin tidak mencoba ulang pengiriman.

Aturan saya dipicu lebih dari sekali dalam menanggapi satu peristiwa. Jaminan apa yang ditawarkan CloudWatch Events untuk memicu aturan atau menyampaikan peristiwa ke target?

Dalam kasus yang jarang terjadi, aturan yang sama dapat dipicu lebih dari sekali untuk satu peristiwa atau waktu yang dijadwalkan, atau target yang sama dapat diminta lebih dari sekali untuk sebuah aturan tertentu yang dipicu.

Mencegah Loop Tak Terbatas

Di CloudWatch Events, aturan yang dibuat mungkin menyebabkan loop tak terbatas, di mana aturan dijalankan berulang kali. Misalnya, aturan mungkin mendeteksi bahwa ACL telah berubah di bucket S3, dan memicu perangkat lunak untuk mengubahnya ke keadaan yang diinginkan. Jika aturan tidak ditulis dengan hati-hati, perubahan berikutnya pada ACL akan mengaktifkan kembali aturan, yang membuat loop tak terbatas.

Untuk mencegah hal ini, tulis aturan agar tindakan yang dipicu tidak mengaktifkan kembali aturan yang sama. Misalnya, aturan Anda hanya dapat berlaku jika keadaan ACL buruk, bukan setelah perubahan apa pun.

Loop tak terbatas dapat dengan cepat mengakibatkan biaya yang lebih tinggi dari yang diperkirakan. Kami menyarankan agar Anda menggunakan penganggaran, yang akan memberi tahu Anda saat biaya melebihi kuota yang ditentukan. Untuk informasi selengkapnya, lihat Mengelola Biaya Anda dengan Anggaran.

Kejadian saya tidak dikirim ke antrean Amazon SQS target

Antrean Amazon SQS dapat dienkripsi. Jika Anda membuat aturan dengan antrean Amazon SQS dienkripsi sebagai target, Anda harus memiliki bagian berikut yang disertakan dalam kebijakan kunci KMS agar peristiwa berhasil dikirim ke antrean yang terenkripsi .

{ "Sid": "Allow CWE to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }

Aturan saya dipicu, tapi saya tidak melihat pesan yang diterbitkan ke topik Amazon SNS saya

Pastikan Anda memiliki izin yang tepat ditetapkan untuk topik Amazon SNS Anda. Jalankan perintah berikut dengan menggunakan AWS CLI (ganti topik ARN dengan topik Anda dan gunakan Wilayah AWS topik Anda):

aws sns get-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic"

Anda akan melihat atribut kebijakan yang mirip dengan berikut ini:

"{\"Version\":\"2012-10-17\", \"Id\":\"__default_policy_ID\", \"Statement\":[{\"Sid\":\"__default_statement_ID\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"*\"}, \"Action\":[\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\", \"SNS:DeleteTopic\", \"SNS:GetTopicAttributes\", \"SNS:Publish\", \"SNS:RemovePermission\", \"SNS:AddPermission\", \"SNS:Receive\", \"SNS:SetTopicAttributes\"], \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\", \"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789012\"}}},{\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"}]}"

Jika Anda melihat kebijakan yang mirip dengan berikut ini, Anda hanya memiliki kumpulan kebijakan default:

"{\"Version\":\"2008-10-17\", \"Id\":\"__default_policy_ID\", \"Statement\":[{\"Sid\":\"__default_statement_ID\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"*\"}, \"Action\":[\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\", \"SNS:DeleteTopic\", \"SNS:GetTopicAttributes\", \"SNS:Publish\", \"SNS:RemovePermission\", \"SNS:AddPermission\", \"SNS:Receive\", \"SNS:SetTopicAttributes\"], \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\", \"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789012\"}}}]}"

Jika Anda tidak melihat events.amazonaws.com dengan Mempublikasikan izin dalam kebijakan Anda, gunakan AWS CLI untuk mengatur atribut kebijakan topik.

Salin kebijakan saat ini dan tambahkan pernyataan berikut ke daftar pernyataan:

{\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"}

Kebijakan baru akan terlihat seperti yang dijelaskan sebelumnya.

Tetapkan atribut topik dengan AWS CLI:

aws sns set-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic" --attribute-name Policy --attribute-value NEW_POLICY_STRING
catatan

Jika kebijakannya salah, Anda juga dapat mengedit aturan di konsol CloudWatch Events dengan menghapus lalu menambahkannya kembali ke aturan. CloudWatch Events menetapkan izin yang benar pada target.

Topik Amazon SNS saya masih memiliki izin untuk CloudWatch Events bahkan setelah saya menghapus aturan yang terkait dengan topik Amazon SNS

Saat Anda membuat aturan dengan Amazon SNS sebagai target, CloudWatch Events menambahkan izin ke topik Amazon SNS atas nama Anda. Jika Anda menghapus aturan segera setelah Anda membuatnya, CloudWatch Events mungkin tidak menghapus izin dari topik Amazon SNS Anda. Jika ini terjadi, Anda dapat menghapus izin dari topik menggunakan perintah set-topic-attributes Amazon SNS.

Kunci syarat IAM mana yang dapat saya gunakan dengan CloudWatch Events?

CloudWatch Events mendukung kunci syarat seluruh AWS (lihat Kunci yang Tersedia di Panduan Pengguna IAM), ditambah kunci syarat khusus layanan berikut.

Bagaimana saya bisa tahu saat aturan CloudWatch Events rusak?

Anda dapat menggunakan alarm berikut untuk memberi tahu Anda ketika aturan CloudWatch Events rusak.

Membuat alarm untuk menginformasikan saat aturan rusak

  1. Buka konsol CloudWatch di https://console.aws.amazon.com/cloudwatch/.

  2. Pilih Buat Alarm. Di panel Metrik CloudWatch berdasarkan Kategori, pilih Metrik Kejadian.

  3. Di daftar metrik, pilih FailedInvocations.

  4. Di atas grafik, pilih Statistik, Sum.

  5. Untuk Periode, pilih satu nilai, misalnya 5 menit. Pilih Selanjutnya.

  6. Di bawah Ambang Batas Alarm, untuk Nama, masukkan nama yang unik untuk alarm, misalnya myFailedRules. Untuk Deskripsi, masukkan deskripsi alarm, misalnya Aturan tidak mengirimkan peristiwa ke target.

  7. Untuk is, pilih >= dan 1. Untuk for, masukkan 10.

  8. Di Tindakan, untuk Setiap kali alarm ini, pilih Status adalah ALARM.

  9. Untuk Kirim notifikasi ke, pilih topik Amazon SNS yang sudah ada atau buat topik baru. Untuk membuat topik SNS baru, pilih Daftar baru. Masukkan nama untuk topik Amazon SNS baru, misalnya: myFailedRules.

  10. Untuk Daftar email, ketik daftar alamat email yang dipisahkan dengan tanda koma untuk menerima pemberitahuan ketika alarm berubah ke status ALARM.

  11. Pilih Buat Alarm.