Dasar arsitektur berbasis event

Aplikasi Serverless dengan AWS Lambda

Claudio Canales

Senior DevOps Engineer

Rekap: satu model mental Lambda

  • Sumber event: pemicu Lambda.
  • Payload event: JSON yang menjelaskan kejadian.
  • Handler: kode yang memprosesnya.
  • Hasil: respons atau efek samping.
  • Log: tempat Anda men-debug masalah.

Alur eksekusi Lambda

Aplikasi Serverless dengan AWS Lambda

Event adalah pesan

  • Event menggambarkan sesuatu yang terjadi.
  • Biasanya berupa pesan JSON dengan metadata.
  • Handler Anda mengekstrak field dan bertindak.

Analogi bel pintu untuk event

Aplikasi Serverless dengan AWS Lambda

Sumber event umum di AWS

  • Amazon S3 memicu event saat unggah.
  • Amazon SQS adalah antrean terkelola yang mengirim pesan.
  • DynamoDB Streams menghasilkan log perubahan.
  • Masing-masing menghasilkan payload JSON berbeda.

Sumber event: S3 vs SQS vs Streams

Aplikasi Serverless dengan AWS Lambda

Pemanggilan sinkron vs asinkron

  • Sinkron: pemanggil menunggu hasil.
  • Asinkron: pemanggil mendapat konfirmasi; event diproses nanti.

Analogi sinkron vs asinkron

Aplikasi Serverless dengan AWS Lambda

Dasar arsitektur berbasis event

  • Event datang sebagai JSON dari layanan AWS.
  • Mode pemanggilan mengubah lokasi error.
  • Payload bervariasi, jadi parse dan validasi secara defensif.
  • Asumsikan retry dan duplikasi.

Inti pembelajaran

Aplikasi Serverless dengan AWS Lambda

Payload adalah kontrak

  • Payload adalah kontrak: pengirim menentukan bentuknya.
  • Handler Anda harus tahu lokasi field.
  • Ambil yang dibutuhkan, validasi, proses, lalu log.

Kontrak payload dan alur parsing

Aplikasi Serverless dengan AWS Lambda

Contoh payload: event pesan SQS

Payload event SQS beranotasi

  • Records adalah batch.
  • body berupa string.
  • messageId membantu pelacakan dan deduplikasi.
Aplikasi Serverless dengan AWS Lambda

Walkthrough: iterasi Records

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 aman.
  • Loop tiap record dan ambil body.
  • Log yang penting, lalu kembalikan.

Loop melalui Records

Aplikasi Serverless dengan AWS Lambda

Walkthrough: parsing body JSON dengan aman

import json
def lambda_handler(event, context):
    records = event.get("Records") or [{}]
    body = records[0].get("body", "{}")
    payload = json.loads(body)
    oid = payload.get("order_id")
    return json.dumps({"order_id": oid})
  • body adalah string; parse dengan json.loads.
  • Baca dengan default aman seperti "{}".
  • Ambil order_id dan kembalikan JSON dengan json.dumps.

Alur parsing body

Aplikasi Serverless dengan AWS Lambda

Daftar cek parsing defensif

Daftar cek parsing defensif

  • Log bentuk event sekali saat mempelajari sumber baru.
  • Gunakan .get() dan default untuk field opsional.
  • Validasi field wajib dan berikan error jelas.
  • Tangani batch kosong dan key yang hilang.
Aplikasi Serverless dengan AWS Lambda

Desain untuk retry dan duplikasi

  • Banyak sumber event memakai pengantaran at-least-once.
  • Duplikasi bisa terjadi.
  • Rancang handler idempoten agar diproses dua kali tetap benar.

Percobaan ulang dan duplikasi

Aplikasi Serverless dengan AWS Lambda

Idempotensi dalam praktik

  • Pilih kunci unik, seperti messageId atau order_id.
  • Simpan tiap kunci yang diproses di DynamoDB.
  • Cek apakah kunci ada; jika ya, lewati pekerjaan.

Alur keputusan idempotensi

Aplikasi Serverless dengan AWS Lambda

Pokok penting

  • Event datang sebagai JSON dari layanan AWS.
  • Mode pemanggilan mengubah lokasi error.
  • Payload bervariasi, jadi parse dan validasi secara defensif.
  • Asumsikan retry dan duplikasi.

Inti pembelajaran

Aplikasi Serverless dengan AWS Lambda

Ayo berlatih!

Aplikasi Serverless dengan AWS Lambda

Preparing Video For Download...