

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

# Memecahkan Masalah Amazon EventBridge
<a name="eb-troubleshooting"></a>

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

**Tip**  
Untuk memverifikasi bahwa pola acara Anda cocok dengan peristiwa yang diharapkan, Anda dapat menggunakan EventBridge Sandbox untuk menguji pola peristiwa terhadap peristiwa sampel. Untuk informasi selengkapnya, lihat [Menguji pola peristiwa menggunakan EventBridge Sandbox](eb-event-pattern-sandbox.md).

**Topics**
+ [Aturan saya berjalan tetapi fungsi Lambda saya tidak dipanggil](#eb-lam-function-not-invoked)
+ [Saya baru saja membuat atau memodifikasi aturan, tetapi tidak cocok dengan kejadian pengujian](#eb-rule-does-not-match)
+ [Aturan saya tidak berjalan pada waktu yang saya tentukan di `ScheduleExpression`](#eb-rule-did-not-trigger)
+ [Aturan saya tidak berjalan pada waktu yang saya harapkan](#eb-rule-did-not-trigger-on-time)
+ [Aturan saya cocok dengan panggilan API layanan AWS global tetapi tidak berjalan](#eb-rule-did-not-trigger-iam)
+ [IAM role (IAM role) yang terkait dengan aturan saya diabaikan saat aturan berjalan](#eb-iam-role-ignored)
+ [Aturan saya memiliki pola kejadian yang seharusnya cocok dengan sumber daya, tapi tidak ada kejadian yang cocok](#eb-events-do-not-match-rule)
+ [Pengiriman kejadian saya ke target tertunda](#eb-delayed-event-delivery)
+ [Beberapa kejadian tidak pernah dikirimkan ke target saya](#eb-never-delivered-to-target)
+ [Aturan saya berjalan lebih dari sekali dalam menanggapi satu kejadian](#eb-rule-triggered-more-than-once)
+ [Mencegah loop tak terbatas](#eb-prevent-infinite-loops)
+ [Kejadian saya tidak dikirim ke antrean Amazon SQS target](#eb-sqs-encrypted)
+ [Aturan saya berjalan, tapi saya tidak melihat pesan yang diterbitkan ke topik Amazon SNS saya](#eb-no-messages-published-sns)
+ [Topik Amazon SNS saya masih memiliki izin EventBridge bahkan setelah saya menghapus aturan yang terkait dengan topik Amazon SNS](#eb-sns-permissions-persist)
+ [Kunci kondisi IAM mana yang dapat saya gunakan? EventBridge](#eb-supported-access-policies)
+ [Bagaimana saya bisa tahu kapan EventBridge aturan dilanggar?](#eb-create-alarm-broken-event-rules)

## Aturan saya berjalan tetapi fungsi Lambda saya tidak dipanggil
<a name="eb-lam-function-not-invoked"></a>

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.

------
#### [ JSON ]

****  

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

------

1. 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}}
   ```

1. 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](eb-rules.md) di EventBridge konsol dengan menghapus dan kemudian menambahkannya kembali ke aturan. EventBridge Konsol kemudian menetapkan izin yang benar pada [target](eb-targets.md).  
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
<a name="eb-rule-does-not-match"></a>

Saat Anda membuat perubahan [aturan](eb-rules.md) atau perubahan [target](eb-targets.md)nya, [kejadian](eb-events.md) 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](eb-monitoring.md).

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 [TestEventPattern](https://docs.aws.amazon.com/AmazonCloudWatchEvents/latest/APIReference/API_TestEventPattern.html)di *Referensi Amazon EventBridge API*.
+ Gunakan **Sandbox** di [EventBridge konsol](https://console.aws.amazon.com/events).

## Aturan saya tidak berjalan pada waktu yang saya tentukan di `ScheduleExpression`
<a name="eb-rule-did-not-trigger"></a>

Pastikan Anda telah mengatur jadwal untuk [aturan](eb-rules.md) 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](#eb-rule-does-not-match).

## Aturan saya tidak berjalan pada waktu yang saya harapkan
<a name="eb-rule-did-not-trigger-on-time"></a>

EventBridge menjalankan [aturan](eb-rules.md) 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](eb-targets.md) 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 panggilan API layanan AWS global tetapi tidak berjalan
<a name="eb-rule-did-not-trigger-iam"></a>

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](eb-events.md#eb-service-event).

## IAM role (IAM role) yang terkait dengan aturan saya diabaikan saat aturan berjalan
<a name="eb-iam-role-ignored"></a>

EventBridge hanya menggunakan peran IAM untuk [aturan](eb-rules.md) yang mengirim [peristiwa ke aliran](eb-events.md) Kinesis. Untuk aturan yang memanggil fungsi Lambda atau topik Amazon SNS, Anda perlu memberikan [Izin berbasis sumber daya](eb-use-resource-based.md).

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) Pengguna *IAM*.

## Aturan saya memiliki pola kejadian yang seharusnya cocok dengan sumber daya, tapi tidak ada kejadian yang cocok
<a name="eb-events-do-not-match-rule"></a>

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](eb-rules.md) acara](eb-event-patterns.md). Pastikan untuk menggunakan karakter ARN yang benar saat membuat pola kejadian sehingga mereka cocok dengan sintaks ARN di [kejadian](eb-events.md) 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
<a name="eb-delayed-event-delivery"></a>

EventBridge mencoba mengirimkan [acara](eb-events.md) ke [target](eb-targets.md) 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. Untuk informasi selengkapnya, lihat [Menggunakan antrian surat mati untuk memproses peristiwa yang tidak terkirim di EventBridge](eb-rule-dlq.md)

## Beberapa kejadian tidak pernah dikirimkan ke target saya
<a name="eb-never-delivered-to-target"></a>

Jika [target EventBridge ](eb-targets.md) [aturan](eb-rules.md) dibatasi untuk waktu yang lama, EventBridge mungkin tidak mencoba lagi pengiriman. Misalnya, jika target tidak disediakan untuk menangani lalu lintas [peristiwa](eb-events.md) 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
<a name="eb-rule-triggered-more-than-once"></a>

Dalam kasus yang jarang terjadi, [aturan](eb-rules.md) yang sama dapat berjalan lebih dari sekali untuk satu [kejadian](eb-events.md) atau waktu yang dijadwalkan, atau [target](eb-targets.md) yang sama dapat dipanggil lebih dari sekali untuk sebuah aturan tertentu yang dipicu. 

## Mencegah loop tak terbatas
<a name="eb-prevent-infinite-loops"></a>

Dalam EventBridge, dimungkinkan untuk membuat [aturan](eb-rules.md) 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 selengkapnya, lihat [Mengelola Biaya Anda dengan Anggaran](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-managing-costs.html).

## Kejadian saya tidak dikirim ke antrean Amazon SQS target
<a name="eb-sqs-encrypted"></a>

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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html#sqs-what-permissions-for-sse).

```
{
  "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
<a name="eb-no-messages-published-sns"></a>

**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.

------
#### [ JSON ]

****  

```
{
    "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](eb-rules.md) di EventBridge konsol dengan menghapus dan kemudian menambahkannya kembali ke aturan. EventBridge menetapkan izin yang benar pada [target](eb-targets.md).

**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
<a name="eb-sns-permissions-persist"></a>

Saat Anda membuat [aturan](eb-rules.md) dengan Amazon SNS sebagai [target](eb-targets.md), 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 Amazon EventBridge](eb-use-resource-based.md).

## Kunci kondisi IAM mana yang dapat saya gunakan? EventBridge
<a name="eb-supported-access-policies"></a>

EventBridge mendukung tombol kondisi AWS-wide (lihat [kunci konteks IAM dan AWS STS kondisi](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html) di *Panduan Pengguna IAM*), ditambah kunci yang tercantum di. [Menggunakan kondisi kebijakan IAM di Amazon EventBridge](eb-use-conditions.md)

## Bagaimana saya bisa tahu kapan EventBridge aturan dilanggar?
<a name="eb-create-alarm-broken-event-rules"></a>

Anda dapat menggunakan alarm berikut untuk memberi tahu Anda ketika EventBridge [aturan](eb-rules.md) Anda dilanggar.

**Membuat alarm untuk menginformasikan saat aturan rusak**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

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

1. Dalam daftar metrik, pilih **FailedInvocations**.

1. Di atas grafik, pilih **Statistik**, **Sum**.

1. Untuk **Periode**, pilih satu nilai, misalnya **5 menit**. Pilih **Berikutnya**.

1. 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**.

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

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

1. 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** 

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

1. Pilih **Buat Alarm**.