Pemetaan sumber event dan pemrosesan stream

Aplikasi Serverless dengan AWS Lambda

Claudio Canales

Senior DevOps Engineer

Letak pemetaan sumber event

  • Antrian dan stream sering dipoll dalam batch.
  • Pemetaan sumber event mengelola polling dan batching.

Posisi pemetaan sumber event

Aplikasi Serverless dengan AWS Lambda

Apa itu pemetaan sumber event?

  • Resource yang menghubungkan sumber ke fungsi Anda.
  • Lambda mem-poll sumber untuk record.
  • Lambda memanggil handler Anda dengan batch.

Alur pemetaan sumber event

Aplikasi Serverless dengan AWS Lambda

Push vs poll (mengapa penting)

Model push

  • Sumber push mengirim event segera.
  • Contoh: unggahan ke Amazon S3.

Model poll

  • Sumber poll diperiksa oleh Lambda.
  • Lambda membangun batch dan memanggil handler Anda.
  • Ini memengaruhi latensi dan perilaku retry.

Model push vs poll

Aplikasi Serverless dengan AWS Lambda

Antrian vs stream

Antrian (Amazon SQS)

  • Antrian pesan terkelola, seperti kotak masuk.

Stream (DynamoDB Streams)

  • Log perubahan untuk tabel DynamoDB.
  • Keduanya tiba sebagai Records, tetapi maknanya berbeda.

Perbandingan antrian vs stream

Aplikasi Serverless dengan AWS Lambda

Bentuk event batch (disederhanakan)

{
  "Records": [{
    "messageId": "abc-123",
    "body": "{\"order_id\": \"A-42\"}"
  }]
}
  • Sebagian besar event pemetaan diawali dengan Records.
  • Tiap record memiliki messageId dan string body.
  • Parse body menjadi payload Anda sendiri.
Aplikasi Serverless dengan AWS Lambda

Langkah: proses tiap record

def lambda_handler(event, context):
    records = event.get("Records", [])
    for record in records:
        body = record.get("body", "")
        print("BODY:", body)
    return {"statusCode": 200}
  • Baca Records dengan default list.
  • Loop tiap record dan baca body dengan aman.
  • Log yang diperlukan, lalu kembalikan.
Aplikasi Serverless dengan AWS Lambda

Langkah: parse body JSON

import json

def lambda_handler(event, context):
    record = event.get("Records", [])[0]
    payload = json.loads(record.get("body", "{}"))
    order_id = payload.get("order_id")
    print("ORDER_ID:", order_id)
    return {"statusCode": 200}
  • Impor json dan baca body dengan default aman.
  • Parse dengan json.loads untuk mendapat dict.
  • Ambil field yang diperlukan; selalu validasi dulu.
Aplikasi Serverless dengan AWS Lambda

Batching: ukuran dan jendela batch

  • Ukuran batch: jumlah record per pemanggilan.
  • Jendela batch: lama Lambda menunggu mengisi batch.
  • Batch lebih besar meningkatkan throughput tapi menambah kerja per run.
  • Untuk SQS, pantau ApproximateAgeOfOldestMessage untuk backlog.

Diagram trade-off ukuran batch

Aplikasi Serverless dengan AWS Lambda

Trade-off ukuran batch

  • Batch besar efisien tetapi bisa menambah latensi.
  • Batch kecil mempercepat pemrosesan awal tapi menambah pemanggilan.
  • Pilih sesuai beban kerja Anda.

Grafik ukuran batch vs latensi

Aplikasi Serverless dengan AWS Lambda

Skalabilitas dengan konkuren

  • Beberapa batch diproses bersamaan.
  • Konkuren lebih tinggi menaikkan throughput.
  • Namun juga menambah beban downstream.

Pemrosesan batch konkuren

Aplikasi Serverless dengan AWS Lambda

Lindungi sistem downstream

  • Konkuren berlebih dapat membebani database atau API.
  • Gunakan batas untuk mengendalikan beban.
  • Utamakan unit kerja kecil dan aman.

Perlindungan beban downstream

Aplikasi Serverless dengan AWS Lambda

Kegagalan batch parsial

  • Satu batch bisa berisi record baik dan buruk.
  • Tanpa kegagalan parsial, satu record buruk me-retry seluruh batch.
  • Penanganan kegagalan parsial me-retry hanya item gagal.

Alur kegagalan batch parsial

Aplikasi Serverless dengan AWS Lambda

Langkah: melaporkan kegagalan parsial (SQS)

def lambda_handler(event, context):
    failures = []
    for record in event.get("Records", []):
        try:
            process(record)
        except Exception:
            failures.append({"itemIdentifier": record["messageId"]})
    return {"batchItemFailures": failures}
  • Kumpulkan messageId untuk record gagal di batchItemFailures.
  • Lambda hanya me-retry item tersebut.
  • Record yang sukses tidak dikirim ulang.
Aplikasi Serverless dengan AWS Lambda

Inti pembelajaran

  • Pemetaan sumber event mem-poll antrian dan stream.
  • Mereka mengirim Records dalam batch ke handler Anda.
  • Ukuran dan jendela batch menukar latensi dengan throughput.
  • Kegagalan parsial mencegah pemrosesan ulang yang sukses.

Diagram ringkasan pemetaan

Aplikasi Serverless dengan AWS Lambda

Ayo berlatih!

Aplikasi Serverless dengan AWS Lambda

Preparing Video For Download...