Memecahkan Masalah Amazon EventBridge - Amazon EventBridge

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 langkah-langkah di bagian ini untuk memecahkan masalah Amazon. EventBridge

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
  1. Menggunakan AWS CLI, jalankan perintah berikut dengan fungsi Anda dan AWS Wilayah Anda:

    aws lambda get-policy --function-name MyFunction --region us-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\"}" }
  2. 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
  3. Jika output berisi bidang SourceAccount, maka Anda harus menghapusnya. SourceAccountPengaturan 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-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule --qualifier alias 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 TriggeredRulesInvocations, 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 Referensi Amazon EventBridge API.

  • Gunakan Sandbox di EventBridge konsol.

Aturan saya tidak berjalan pada waktu yang saya tentukan di ScheduleExpression

Pastikan Anda telah mengatur jadwal untuk 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 ekspresicron(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 panggilan API 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 panggilan AWS API dari layanan global hanya tersedia di wilayah tersebut. Untuk informasi selengkapnya, lihat Acara dari AWS layanan.

IAM role (IAM role) yang terkait dengan aturan saya diabaikan saat aturan berjalan

EventBridge hanya menggunakan peran IAM untuk aturan yang mengirim peristiwa ke aliran Kinesis. Untuk aturan yang memanggil fungsi Lambda atau topik Amazon SNS, Anda perlu memberikan Izin berbasis sumber daya.

Pastikan AWS STS titik akhir regional Anda diaktifkan, sehingga EventBridge dapat menggunakannya saat mengasumsikan peran IAM 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 (ARN)., tetapi EventBridge menggunakan kecocokan persis dalam pola dan aturan acara. Pastikan untuk menggunakan karakter ARN yang benar saat membuat pola kejadian sehingga mereka cocok dengan sintaks ARN di kejadian yang dicocokkan.

Beberapa peristiwa, seperti peristiwa panggilan AWS API 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 DLQ untuk menyimpan acara yang tidak berhasil dikirim ke target. Lihat informasi yang lebih lengkap di Kebijakan coba lagi peristiwa dan menggunakan antrean surat mati

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 bahwa ACL telah berubah di bucket Amazon S3 lalu menjalankan perangkat lunak untuk mengubahnya ke keadaan baru menyebabkan loop tak terbatas. Salah satu cara untuk mengatasinya adalah menulis ulang aturan sehingga aturan itu hanya cocok dengan ACL yang berada dalam keadaan buruk.

Loop tak terbatas dapat dengan cepat menyebabkan biaya yang lebih tinggi dari yang diharapkan. Kami merekomendasikan agar Anda menggunakan penganggaran, yang akan memberi tahu Anda bila biaya melampaui batas yang ditentukan. Untuk informasi selengkapnya, lihat Mengelola Biaya Anda dengan Anggaran.

Kejadian saya tidak dikirim ke antrean Amazon SQS target

Jika antrean Amazon SQS Anda dienkripsi, Anda harus membuat kunci KMS yang dikelola pelanggan dan menyertakan bagian izin berikut dalam kebijakan kunci KMS Anda. 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, tapi saya tidak melihat pesan yang diterbitkan ke topik Amazon SNS saya

Skenario 1

Anda perlu izin untuk menerbitkan pesan ke topik Amazon SNS Anda. Gunakan perintah berikut menggunakan AWS CLI, mengganti us-east-1 dengan Wilayah Anda dan menggunakan topik ARN Anda.

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-value NEW_POLICY_STRING
catatan

Jika kebijakan salah, Anda juga dapat mengedit aturan di EventBridge konsol dengan menghapus dan kemudian menambahkannya kembali ke aturan. EventBridge menetapkan izin yang benar pada target.

Skenario 2

Jika topik SNS Anda dienkripsi, Anda harus menyertakan bagian berikut dalam kebijakan kunci KMS Anda.

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

Topik Amazon SNS 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 topik Amazon SNS Anda atas nama Anda. Jika Anda menghapus aturan segera setelah Anda membuatnya, EventBridge mungkin tidak menghapus izin dari topik Amazon SNS 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 AmazonEventBridge.

Kunci kondisi IAM mana yang dapat saya gunakan? EventBridge

EventBridge mendukung tombol kondisi AWS-wide (lihat kunci konteks IAM dan AWS STS kondisi di Panduan Pengguna IAM), ditambah kunci yang tercantum di. Menggunakan ketentuan kebijakan IAM ketentuan untuk kontrol akses yang sangat baik

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
  1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

  2. Pilih Buat Alarm. Di panel CloudWatch Metrik menurut Kategori, pilih Metrik Acara.

  3. Dalam 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 Alarm, untuk Nama, ketikkan nama unik untuk alarm, misalnya myFailedRules. Untuk Deskripsi, masukkan deskripsi alarm, misalnya Aturan tidak mengirimkan acara 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. Ketik 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.