Amazon EventBridge
EventBridge merutekan event berdasarkan isinya. Producer tidak tahu siapa consumer-nya, dan menambah consumer baru tidak menyentuh kode yang sudah ada.
Intisari
- Event adalah JSON; rule mencocokkan polanya lalu mengirim ke satu atau banyak target.
- Producer dan consumer sepenuhnya terpisah — menambah pendengar baru tidak mengubah pengirim.
- Banyak layanan AWS mengirim event bawaan (S3 objek baru, job selesai, status berubah).
- EventBridge Scheduler menggantikan cron: jalankan sesuatu tiap jam tanpa server.
- Pengirimannya asinkron dan bisa diulang — targetmu harus idempoten, sama seperti pada SQS.
SQS atau EventBridge?
Keduanya memisahkan komponen, tapi menjawab pertanyaan yang berbeda:
| SQS | EventBridge | |
|---|---|---|
| Model | Antrean: satu pesan, satu consumer | Bus: satu event, banyak pendengar |
| Pertanyaan yang dijawab | "Kerjakan ini nanti" | "Sesuatu telah terjadi" |
| Perutean | Tidak ada — siapa pun yang polling | Berdasarkan pola isi event |
| Buffering | Kuat — pesan menunggu | Tidak; kalau target gagal, mengandalkan retry/DLQ |
Pola yang matang justru menggabungkan keduanya: EventBridge merutekan event ke antrean SQS, lalu Lambda memproses dari antrean. Kamu dapat perutean fleksibel dan buffering.
Bentuk event dan rule
// Event yang kamu kirim sendiri
{
"source": "app.dokumen",
"detail-type": "DokumenDiunggah",
"detail": { "bucket": "dokumen-ku", "key": "manual/2026-08.pdf", "halaman": 42 }
}
// Rule: hanya PDF dari bucket tertentu yang diteruskan
{
"source": ["app.dokumen"],
"detail-type": ["DokumenDiunggah"],
"detail": {
"bucket": ["dokumen-ku"],
"key": [{ "suffix": ".pdf" }]
}
}
Pencocokan terjadi sebelum kodemu jalan. Ini berbeda dari pola "panggil semua Lambda lalu biarkan masing-masing memutuskan": di sini yang tidak cocok tidak pernah dipanggil, jadi tidak ada biaya dan tidak ada log palsu.
Mengirim event dari Python
import json
import boto3
events = boto3.client("events")
events.put_events(Entries=[{
"Source": "app.dokumen",
"DetailType": "DokumenDiunggah",
"Detail": json.dumps({"bucket": "dokumen-ku", "key": "manual/2026-08.pdf"}),
}])
Perhatikan: Detail harus berupa string JSON, bukan dict. Melewatkan
dict langsung menghasilkan ValidationException yang membingungkan karena pesannya menyebut tipe
parameter, bukan "kamu lupa json.dumps".
Event bawaan dari layanan AWS
Banyak hal sudah mengirim event tanpa perlu kamu tulis, dan ini yang membuat EventBridge produktif:
| Sumber | Contoh event | Dipakai untuk |
|---|---|---|
| S3 | Objek dibuat | Memicu ingest saat dokumen baru diunggah |
| Bedrock | Job batch/kustomisasi berubah status | Melanjutkan pipeline saat job selesai |
| Step Functions | Eksekusi gagal | Notifikasi ke Slack |
| CodePipeline | Deploy selesai | Menjalankan uji asap otomatis |
Scheduler: cron tanpa server
aws scheduler create-schedule \
--name sinkron-knowledge-base \
--schedule-expression "rate(6 hours)" \
--flexible-time-window Mode=OFF \
--target '{"Arn":"arn:aws:lambda:us-east-1:123456789012:function:sinkron-kb",
"RoleArn":"arn:aws:iam::123456789012:role/SchedulerRole"}'
Ini pola yang akan kamu pakai di Fase 4 untuk menyegarkan knowledge base secara berkala.
rate(…) untuk interval sederhana, cron(…) kalau butuh jadwal berbasis kalender.
Latihan: buat rule yang menangkap event DokumenDiunggah hanya untuk berkas berakhiran
.pdf dan meneruskannya ke antrean ingest-dokumen dari materi SQS. Kirim dua event —
satu .pdf, satu .txt — lalu buktikan hanya satu yang sampai ke antrean.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.