← Semua pembelajaran / AWS untuk AI Engineer
Fase 1 · Serverless & Integrasi

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:

SQSEventBridge
ModelAntrean: satu pesan, satu consumerBus: satu event, banyak pendengar
Pertanyaan yang dijawab"Kerjakan ini nanti""Sesuatu telah terjadi"
PeruteanTidak ada — siapa pun yang pollingBerdasarkan pola isi event
BufferingKuat — pesan menungguTidak; 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:

SumberContoh eventDipakai untuk
S3Objek dibuatMemicu ingest saat dokumen baru diunggah
BedrockJob batch/kustomisasi berubah statusMelanjutkan pipeline saat job selesai
Step FunctionsEksekusi gagalNotifikasi ke Slack
CodePipelineDeploy selesaiMenjalankan 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.