Menulis dan menguji kode Lambda

Aplikasi Serverless dengan AWS Lambda

Claudio Canales

Senior DevOps Engineer

Mengapa pengujian dan logging penting

  • Event nyata berantakan dan beragam bentuknya.
  • Pengujian menangkap error sebelum pengguna.
  • Log adalah "kotak hitam" Anda untuk debug.

Pengujian seperti latihan kebakaran

Aplikasi Serverless dengan AWS Lambda

Satu alur untuk diingat

Perkakas alur inti

  • Event masuk -> handler berjalan -> respons keluar.
  • Gunakan log + event uji untuk debug.

Alur pemanggilan Lambda

Aplikasi Serverless dengan AWS Lambda

Tujuan log: CloudWatch Logs

  • Lambda menulis output print() dan error ke sana secara default.
  • CloudWatch Logs adalah penyimpanan log untuk layanan AWS.
  • Grup log berbentuk /aws/lambda/<function-name>.

Handler mencatat ke CloudWatch Logs

Aplikasi Serverless dengan AWS Lambda

Kontrak handler

  • event adalah payload masukan.
  • context memberi metadata runtime.
  • Nilai return menjadi respons fungsi.

Kontrak handler: event + context -> respons

Aplikasi Serverless dengan AWS Lambda

Walkthrough: event dan context

def lambda_handler(event, context):
    request_id = context.aws_request_id
    time_left = context.get_remaining_time_in_millis()
    return {"statusCode": 200}

Penjelasan event dan context

Aplikasi Serverless dengan AWS Lambda

Parsing input dengan aman

  • Gunakan event.get() untuk field opsional.
  • Validasi input wajib sejak awal.
  • Kembalikan error jelas untuk field hilang.

Parsing aman dan validasi dini

Aplikasi Serverless dengan AWS Lambda

Walkthrough: validasi input wajib

def lambda_handler(event, context):
    if not event.get("name"):
        return {"statusCode": 400, "body": "Missing: name"}
    return {"statusCode": 200, "body": f"Hello, {event.get('name')}!"}

Cabang validasi: 400 vs 200

Aplikasi Serverless dengan AWS Lambda

Kasus tepi untuk diuji

  • Field hilang (JSON kosong).
  • Tipe salah (name berupa angka).
  • Field ekstra atau payload besar.

Contoh payload edge case

Aplikasi Serverless dengan AWS Lambda

Mengembalikan respons yang prediktabel

  • Jaga bentuk respons konsisten.
  • Gunakan statusCode untuk sukses atau error.
  • JSON-encode body respons Anda.

Amplop respons: statusCode + body JSON

Aplikasi Serverless dengan AWS Lambda

Walkthrough: mengembalikan JSON

import json

def lambda_handler(event, context):
    body = {"message": "ok"}
    return {"statusCode": 200, "body": json.dumps(body)}

json.dumps: dict ke teks JSON

Aplikasi Serverless dengan AWS Lambda

Logging dan tracing

  • Log field kunci (gunakan JSON bila perlu).
  • Sertakan context.aws_request_id untuk pelacakan.
  • Hindari melog rahasia atau data pribadi.
  • Default-nya, log Lambda masuk ke CloudWatch Logs.

Praktik terbaik logging

Aplikasi Serverless dengan AWS Lambda

Walkthrough: logging terstruktur

import json

def lambda_handler(event, context):
    print(json.dumps({"request_id": context.aws_request_id, "event": event}))
    return {"statusCode": 200}

Baris JSON logging terstruktur

Aplikasi Serverless dengan AWS Lambda

Pengujian dengan event konsol

  • Buat event uji bernama.
  • Uji happy path dan edge case.
  • Tinjau respons + log tiap run.

Event uji di konsol

Aplikasi Serverless dengan AWS Lambda

Siklus debug sederhana

  • Lakukan perubahan kode kecil.
  • Deploy, lalu jalankan event uji.
  • Baca respons + CloudWatch Logs.

Siklus debug sederhana

Aplikasi Serverless dengan AWS Lambda

Ayo berlatih!

Aplikasi Serverless dengan AWS Lambda

Preparing Video For Download...