Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memecahkan Masalah Amazon EventBridge
Anda dapat menggunakan topik di bagian ini untuk memecahkan masalah Amazon EventBridge .
Topik
- Aturan saya berjalan tetapi fungsi Lambda saya tidak dipanggil
- Saya baru saja membuat atau memodifikasi aturan, tetapi tidak cocok dengan kejadian pengujian
- Aturan saya tidak berjalan pada waktu yang saya tentukan di ScheduleExpression
- Aturan saya tidak berjalan pada waktu yang saya harapkan
- Aturan saya cocok dengan API panggilan layanan AWS global tetapi tidak berjalan
- IAMPeran yang terkait dengan aturan saya diabaikan saat aturan berjalan
- Aturan saya memiliki pola kejadian yang seharusnya cocok dengan sumber daya, tapi tidak ada kejadian yang cocok
- Pengiriman kejadian saya ke target tertunda
- Beberapa kejadian tidak pernah dikirimkan ke target saya
- Aturan saya berjalan lebih dari sekali dalam menanggapi satu kejadian
- Mencegah loop tak terbatas
- Acara saya tidak dikirim ke SQS antrian Amazon target
- Aturan saya berjalan, tetapi saya tidak melihat pesan apa pun yang dipublikasikan ke SNS topik Amazon saya
- SNSTopik Amazon saya masih memiliki izin EventBridge bahkan setelah saya menghapus aturan yang terkait dengan topik Amazon SNS
- Kunci IAM kondisi apa yang dapat saya gunakan EventBridge?
- Bagaimana saya bisa tahu kapan EventBridge aturan dilanggar?
Aturan saya berjalan tetapi fungsi Lambda saya tidak dipanggil
Salah satu alasan mengapa fungsi Lambda Anda tidak berjalan adalah Anda tidak memiliki izin yang tepat.
Memeriksa izin Anda untuk fungsi Lambda
-
Menggunakan AWS CLI, jalankan perintah berikut dengan fungsi Anda dan AWS Wilayah Anda:
aws lambda get-policy --function-name
MyFunction
--regionus-east-1
Anda akan melihat output 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-idMyId
\ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012
:rule/MyRule
-
Jika output berisi bidang
SourceAccount
, maka Anda harus menghapusnya.SourceAccount
Pengaturan EventBridge mencegah agar tidak dapat menjalankan fungsi.
catatan
Jika kebijakan salah, Anda dapat mengedit aturan di EventBridge konsol dengan menghapus dan kemudian menambahkannya kembali ke aturan. EventBridge Konsol 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
, seperti yang ditunjukkan dalam perintah berikut
aws lambda add-permission \ --function-name
MyFunction
\ --statement-idMyId
\ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012
:rule/MyRule
--qualifieralias or version
Saya baru saja membuat atau memodifikasi aturan, tetapi tidak cocok dengan kejadian 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 peristiwa masih tidak cocok setelah periode waktu yang singkat, periksa CloudWatch metrik TriggeredRules
Invocations
, dan FailedInvocations
untuk aturan Anda. Untuk informasi selengkapnya tentang metrik ini, lihat Memantau Amazon EventBridge.
Jika aturan dimaksudkan untuk mencocokkan acara dari AWS layanan, lakukan salah satu dari hal-hal ini:
Gunakan
TestEventPattern
tindakan untuk menguji pola acara aturan Anda cocok dengan peristiwa pengujian. Untuk informasi selengkapnya, lihat TestEventPatterndi EventBridge APIReferensi Amazon.Gunakan Sandbox di EventBridge konsol
.
Aturan saya tidak berjalan pada waktu yang saya tentukan di ScheduleExpression
Pastikan Anda telah mengatur jadwal aturan di zona waktu UTC +0. Jika ScheduleExpression
benar, ikuti langkah-langkah di Saya baru saja membuat atau memodifikasi aturan, tetapi tidak cocok dengan kejadian pengujian.
Aturan saya tidak berjalan pada waktu yang saya harapkan
EventBridge menjalankan aturan dalam satu menit dari waktu mulai yang Anda tetapkan. Hitung mundur untuk waktu aktif dimulai segera setelah Anda membuat aturan.
catatan
Aturan terjadwal memiliki jenis pengiriman guaranteed
makna peristiwa akan dipicu untuk setiap waktu yang diharapkan setidaknya sekali.
Anda dapat menggunakan ekspresi cron untuk memanggil target pada waktu tertentu. Untuk membuat aturan yang berjalan setiap empat jam di menit ke-0, lakukan salah satu dari langkah berikut:
-
Di EventBridge konsol, Anda menggunakan ekspresi
0 0/4 * * ? *
cron. -
Menggunakan AWS CLI, Anda menggunakan ekspresi
cron(0 0/4 * * ? *)
.
Misalnya, untuk membuat aturan bernama TestRule
yang berjalan setiap 4 jam dengan menggunakan AWS CLI, Anda menggunakan perintah berikut.
aws events put-rule --name
TestRule
--schedule-expression 'cron(0 0/4 * * ? *)'
Untuk menjalankan aturan setiap lima menit, gunakan ekspresi cron berikut.
aws events put-rule --name
TestRule
--schedule-expression 'cron(0/5 * * * ? *)'
Resolusi terbaik untuk EventBridge aturan yang menggunakan ekspresi cron adalah satu menit. Aturan terjadwal Anda berjalan di menit itu tetapi tidak tepat pada detik ke-0.
Karena EventBridge dan layanan target didistribusikan, mungkin ada penundaan beberapa detik antara waktu aturan terjadwal berjalan dan waktu layanan target melakukan tindakan pada sumber daya target.
Aturan saya cocok dengan API panggilan layanan AWS global tetapi tidak berjalan
AWS layanan global; seperti, IAM dan Amazon Route 53 hanya tersedia di Wilayah AS Timur (Virginia N.), sehingga acara dari AWS API panggilan dari layanan global hanya tersedia di wilayah tersebut. Untuk informasi selengkapnya, lihat Acara dari AWS layanan di Amazon EventBridge.
IAMPeran yang terkait dengan aturan saya diabaikan saat aturan berjalan
EventBridge hanya menggunakan IAM peran untuk aturan yang mengirim peristiwa ke aliran Kinesis. Untuk aturan yang memanggil fungsi Lambda atau topik SNS Amazon, Anda harus memberikan izin berbasis sumber daya.
Pastikan AWS STS titik akhir regional Anda diaktifkan, sehingga EventBridge dapat menggunakannya saat mengambil IAM peran yang Anda berikan. Untuk informasi selengkapnya, lihat Mengaktifkan dan Menonaktifkan AWS STS di AWS Wilayah di Panduan Pengguna. IAM
Aturan saya memiliki pola kejadian yang seharusnya cocok dengan sumber daya, tapi tidak ada kejadian yang cocok
Sebagian besar layanan dalam AWS memperlakukan titik dua (:) atau garis miring (/) sebagai karakter yang sama di Amazon Resource Names (ARNs)., tetapi EventBridge menggunakan kecocokan persis dalam pola dan aturan acara. Pastikan untuk menggunakan ARN karakter yang benar saat membuat pola acara sehingga cocok dengan ARN sintaks dalam acara yang cocok.
Beberapa acara, seperti acara AWS API panggilan dari CloudTrail, tidak memiliki apa pun di bidang sumber daya.
Pengiriman kejadian saya ke target tertunda
EventBridge mencoba mengirimkan acara ke target hingga 24 jam, kecuali dalam skenario di mana sumber daya target Anda dibatasi. Upaya pertama dilakukan segera setelah kejadian tiba di alur kejadian. Jika layanan target mengalami masalah, EventBridge secara otomatis menjadwal ulang pengiriman lain. Jika 24 jam telah berlalu sejak kedatangan acara, EventBridge berhentilah mencoba menyampaikan acara dan menerbitkan FailedInvocations
metrik di CloudWatch. Kami menyarankan Anda menyiapkan acara DLQ untuk menyimpan yang tidak berhasil dikirim ke target. Untuk informasi selengkapnya, lihat Menggunakan antrian surat mati untuk memproses peristiwa yang tidak terkirim di EventBridge
Beberapa kejadian tidak pernah dikirimkan ke target saya
Jika target EventBridge aturan dibatasi untuk waktu yang lama, EventBridge mungkin tidak mencoba lagi pengiriman. Misalnya, jika target tidak disediakan untuk menangani lalu lintas peristiwa yang masuk dan layanan target membatasi permintaan yang EventBridge dibuat atas nama Anda, maka EventBridge mungkin tidak mencoba lagi pengiriman.
Aturan saya berjalan lebih dari sekali dalam menanggapi satu kejadian
Dalam kasus yang jarang terjadi, aturan yang sama dapat berjalan lebih dari sekali untuk satu kejadian atau waktu yang dijadwalkan, atau target yang sama dapat dipanggil lebih dari sekali untuk sebuah aturan tertentu yang dipicu.
Mencegah loop tak terbatas
Dalam EventBridge, dimungkinkan untuk membuat aturan yang mengarah ke loop tak terbatas, di mana aturan berjalan berulang kali. Jika Anda memiliki aturan yang menyebabkan loop tak terbatas, tulis ulang aturan itu sehingga tindakan yang diambil aturan tersebut tidak cocok dengan aturan yang sama.
Misalnya, aturan yang mendeteksi yang ACLs telah berubah pada bucket Amazon S3 dan kemudian menjalankan perangkat lunak untuk mengubahnya ke status baru menyebabkan loop tak terbatas. Salah satu cara untuk mengatasinya adalah dengan menulis ulang aturan sehingga hanya cocok ACLs yang berada dalam keadaan buruk.
Loop tak terbatas dapat dengan cepat mengakibatkan biaya yang lebih tinggi dari yang diperkirakan. Kami merekomendasikan agar Anda menggunakan penganggaran, yang akan memberi tahu Anda bila biaya melampaui batas yang ditentukan. Untuk informasi lebih lanjut, lihat Mengelola Biaya Anda dengan Anggaran.
Acara saya tidak dikirim ke SQS antrian Amazon target
Jika SQS antrian Amazon dienkripsi, Anda harus membuat kunci yang dikelola pelanggan dan menyertakan bagian izin berikut dalam kebijakan KMS kunci Anda. KMS Untuk informasi selengkapnya, lihat Mengonfigurasi AWS KMS izin.
{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
Aturan saya berjalan, tetapi saya tidak melihat pesan apa pun yang dipublikasikan ke SNS topik Amazon saya
Skenario 1
Anda memerlukan izin agar pesan dipublikasikan ke SNS topik Amazon Anda. Gunakan perintah berikut menggunakan AWS CLI, mengganti us-east-1 dengan Wilayah Anda dan menggunakan topik Anda. ARN
aws sns get-topic-attributes --region
us-east-1
--topic-arn "arn:aws:sns:us-east-1
:123456789012
:MyTopic"
Untuk memiliki izin yang benar, atribut kebijakan Anda mirip dengan yang 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: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 tidak melihat events.amazonaws.com
dengan izin Publish
dalam kebijakan Anda, salin dahulu 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\"}
Kemudian atur atribut topik dengan menggunakan AWS CLI, gunakan perintah berikut.
aws sns set-topic-attributes --region
us-east-1
--topic-arn "arn:aws:sns:us-east-1:123456789012
:MyTopic" --attribute-name Policy --attribute-valueNEW_POLICY_STRING
catatan
Skenario 2
Jika SNS topik Anda dienkripsi, Anda harus menyertakan bagian berikut dalam kebijakan KMS utama Anda.
{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
SNSTopik Amazon saya masih memiliki izin EventBridge bahkan setelah saya menghapus aturan yang terkait dengan topik Amazon SNS
Saat Anda membuat aturan dengan Amazon SNS sebagai target, EventBridge tambahkan izin ke SNS topik Amazon Anda atas nama Anda. Jika Anda menghapus aturan segera setelah Anda membuatnya, EventBridge mungkin tidak menghapus izin dari SNS topik Amazon Anda. Jika ini terjadi, Anda dapat menghapus izin dari topik menggunakan perintah aws sns set-topic-attributes
. Untuk informasi tentang izin berbasis sumber daya untuk mengirim kejadian, lihat Menggunakan kebijakan berbasis sumber daya untuk Amazon EventBridge.
Kunci IAM kondisi apa yang dapat saya gunakan EventBridge?
EventBridge mendukung tombol kondisi AWS-wide (lihat IAMdan AWS STS kondisi kunci konteks di Panduan IAM Pengguna), ditambah kunci yang tercantum diMenggunakan kondisi IAM kebijakan di Amazon EventBridge.
Bagaimana saya bisa tahu kapan EventBridge aturan dilanggar?
Anda dapat menggunakan alarm berikut untuk memberi tahu Anda ketika EventBridge aturan Anda dilanggar.
Membuat alarm untuk menginformasikan saat aturan rusak
-
Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/
. -
Pilih Buat Alarm. Di panel CloudWatch Metrik menurut Kategori, pilih Metrik Acara.
-
Dalam daftar metrik, pilih FailedInvocations.
-
Di atas grafik, pilih Statistik, Sum.
-
Untuk Periode, pilih satu nilai, misalnya 5 menit. Pilih Selanjutnya.
-
Di bawah Ambang Alarm, untuk Nama, ketikkan nama unik untuk alarm, misalnya myFailedRules. Untuk Deskripsi, masukkan deskripsi alarm, misalnya Aturan tidak mengirimkan acara ke target.
-
Untuk is, pilih >= dan 1. Untuk for, masukkan 10.
-
Di bawah Tindakan, untuk Kapan pun alarm ini, pilih Status adalah ALARM.
-
Untuk Kirim pemberitahuan ke, pilih SNS topik Amazon yang ada atau buat yang baru. Untuk membuat topik SNS baru, pilih Daftar baru. Ketik nama untuk SNS topik Amazon baru, misalnya: myFailedRules.
-
Untuk daftar Email, ketik daftar alamat email yang dipisahkan koma untuk diberi tahu saat alarm berubah ke status. ALARM
-
Pilih Buat Alarm.