AWS Lambda: ไม่ต้องสน Server, แค่เขียนโค้ด!

สวัสดีครับ! วันนี้จะมาเล่าเรื่อง AWS Lambda ให้ฟังแบบคนทำงานจริง ไม่ต้องเป๊ะมากนะ แต่รับรองได้ไอเดียไปใช้แน่นอน

ไอ้เจ้า Lambda เนี่ย มันคือบริการ Serverless ของ AWS หรือพูดง่ายๆ คือคุณเขียนโค้ดเสร็จแล้วโยนขึ้นไปได้เลย ไม่ต้องไปสนว่ามันจะไปรันบนเซิร์ฟเวอร์ตัวไหน ต้องตั้งค่า RAM, CPU เท่าไหร่ คือตัดเรื่องปวดหัวพวกนี้ทิ้งไปเลยไง ก็แค่เขียนโค้ดให้มันทำงานที่ต้องการ แล้ว AWS จะจัดการให้หมด โคตรสบาย.

ทำไมต้องใช้ Lambda วะ?

บอกตรงๆ นะ สำหรับงานบางอย่าง Lambda นี่คือสวรรค์เลย ถ้าคุณมีโค้ดสั้นๆ ที่อยากให้มันรันตอบสนองกับเหตุการณ์บางอย่าง เช่น:

  • มีรูปใหม่มาอัพโหลดใน S3 แล้วอยากให้ Lambda ไป Resize รูปนั้นเลย
  • มีข้อมูลใหม่เข้ามาใน DynamoDB แล้วอยากให้ Lambda ไปประมวลผลต่อ
  • อยากสร้าง API ง่ายๆ แบบไม่ต้องมาตั้งเซิร์ฟเวอร์เอง

ข้อดีคือมันถูกมาก เพราะจ่ายตามที่ใช้จริง คือถ้าโค้ดไม่รัน ก็ไม่เสียตังค์ เจ๋งปะ?

มาเขียนโค้ด Lambda ง่ายๆ กัน

สมมติว่าเราอยากสร้างฟังก์ชันที่รับชื่อเข้ามา แล้วทักทายกลับไปนะ ง่ายๆ เลย ผมชอบใช้ Python เพราะมันเขียนแป๊บเดียวก็ได้เรื่องละ

import json

def lambda_handler(event, context):
    """
    A simple Lambda function that says hello.
    """

    name = "Guest"
    # ลองเช็คดูว่ามี 'name' ส่งมาใน event มั้ย
    if 'queryStringParameters' in event and event['queryStringParameters'] and 'name' in event['queryStringParameters']:
        name = event['queryStringParameters']['name']
    elif 'body' in event and event['body']:
        try:
            body_data = json.loads(event['body'])
            if 'name' in body_data:
                name = body_data['name']
        except json.JSONDecodeError:
            # ถ้า parsing JSON ไม่ได้ ก็ใช้ค่า default ไป
            pass

    message = f"Hello, {name}! This is a serverless function."

    print(f"Processing request for {name}") # อันนี้ไว้ดูใน CloudWatch Logs

    return {
        'statusCode': 200,
        'headers': {
            'Content-Type': 'application/json'
        },
        'body': json.dumps({'message': message})
    }

# --- วิธีลองรันโค้ดนี้ในเครื่องคุณ (ไม่เกี่ยวกับ Lambda โดยตรง) ---
# ถ้าอยากลองเองในเครื่อง ก็สร้าง event object แบบที่ Lambda ส่งมาให้
if __name__ == "__main__":
    # Simulate an API Gateway GET request
    test_event_get = {
        "queryStringParameters": {
            "name": "Alice"
        }
    }
    response_get = lambda_handler(test_event_get, None)
    print("\n--- GET Request Simulation ---")
    print(response_get)

    # Simulate an API Gateway POST request with JSON body
    test_event_post = {
        "body": "{\"name\": \"Bob\"}",
        "headers": {"Content-Type": "application/json"}
    }
    response_post = lambda_handler(test_event_post, None)
    print("\n--- POST Request Simulation ---")
    print(response_post)

    # Simulate a default request (no name provided)
    test_event_default = {}
    response_default = lambda_handler(test_event_default, None)
    print("\n--- Default Request Simulation ---")
    print(response_default)

โค้ดแค่นี้แหละ lambda_handler คือฟังก์ชันหลักที่ Lambda จะเรียกใช้ มันจะรับ event (ข้อมูลที่เข้ามา เช่น จาก API Gateway, S3) กับ context (ข้อมูลเกี่ยวกับ Lambda runtime) มาให้เรา.

โค้ดนี้จะไปรันบน AWS ได้ไง?

จริงๆ มันมีหลายวิธีมาก ตั้งแต่กดอัพโหลดไฟล์ .zip ตรงๆ บนคอนโซล AWS ไปจนถึงใช้ Serverless Framework หรือ AWS SAM ในการจัดการ deployment ที่ซับซ้อนกว่านี้ แต่หลักๆ ก็คือคุณต้องเอาไฟล์ lambda_function.py (หรือชื่ออะไรก็ได้ที่คุณตั้ง) เนี่ยแหละ อัพโหลดขึ้นไป แล้วก็คอนฟิก trigger ว่าจะให้มันรันเมื่อไหร่ เช่น มีคนเรียก API Gateway URL นี้ หรือมีไฟล์ใหม่มาใน S3 bucket

ปัญหาที่เคยเจอมากับตัว (Gotchas!)

บอกเลยว่า Lambda ไม่ได้วิเศษเสมอไปนะ มันมีข้อควรระวังอยู่เหมือนกัน ที่ผมเจอบ่อยๆ คือ:

  1. Timeout พรวด!: บางทีโค้ดมันประมวลผลนานกว่าที่กำหนดไว้ใน Lambda configuration (Default มัน 3 วินาทีเองนะ) แล้วก็พังไปเลย ขึ้น Task timed out after X seconds อันนี้ต้องไปเพิ่ม Timeout ในคอนโซลของ Lambda ให้มันนานขึ้นหน่อย ถ้างานเรามันใช้เวลานานจริงๆ
  2. Cold Start: อันนี้ไม่ใช่ error แต่มันคือเรื่องที่คุณต้องรู้ เวลา Lambda ฟังก์ชันของคุณไม่ได้ถูกเรียกนานๆ แล้วมีคนเรียกครั้งแรก มันจะใช้เวลาบูตอินสแตนซ์ขึ้นมาใหม่ ซึ่งจะช้ากว่าปกติหน่อย (ประมาณ 100ms - 1-2 วินาที แล้วแต่ภาษาและขนาดโค้ด) ถ้างานที่ต้องการความเร็วแบบทันทีทันใด อาจจะต้องคิดเผื่อเรื่องนี้ด้วย

Dependencies หาย!: เคยไหม? โค้ดรันปกติในเครื่อง pip install ครบหมด แต่พออัพขึ้น Lambda ดันขึ้น No module named 'requests' หรืออะไรประมาณนี้แหละ? อันนี้เจอโคตรบ่อย เพราะเวลาคุณอัพโค้ดขึ้น Lambda ถ้ามันมีไลบรารีข้างนอก (Third-party libraries) คุณต้อง zip ไฟล์ไลบรารีพวกนั้นไปด้วยนะ ไม่งั้น Lambda มันไม่เจอหรอก วิธีคือสร้าง package แล้ว zip มันดีๆตัวอย่าง (สำหรับ Linux/macOS):

mkdir package
pip install requests -t package/
cd package
zip -r9 ../my_lambda_function.zip .
cd ..
zip -g my_lambda_function.zip lambda_function.py
# แล้วเอา my_lambda_function.zip นี่แหละไปอัพโหลด

สรุปความเห็นส่วนตัว

สำหรับผมนะ Lambda มันดีจริงแหละ ถ้างานไม่ได้ซับซ้อนมาก หรือเป็นพวก event-driven คือมีอะไรมาทริกเกอร์ให้มันทำงานเองอะ เจ๋งเลย แล้วก็เหมาะกับพวก MVP (Minimum Viable Product) ที่อยากให้มันขึ้นไปรันได้เร็วๆ ด้วย แต่ถ้าเป็นแอปพลิเคชันใหญ่ๆ มีหลายส่วนเชื่อมกัน มี state ที่ต้องจำเยอะๆ หรือเป็น microservices ที่มี dependency ซับซ้อน บางที manage ด้วย Lambda เพียวๆ ก็ปวดหัวเหมือนกันนะ ไม่ใช่ว่า serverless จะแก้ได้ทุกปัญหานะ บอกเลย!

แต่ถ้าคุณอยากลองเริ่มต้นกับ Serverless ลองเล่น Lambda นี่แหละ มันเปิดโลกให้คุณเยอะเลยจริงๆ ลองดูนะ!

Read more

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

เจาะลึกเรื่องราวของ Eileen Gu นักสกีฟรีสไตล์ผู้สร้างประวัติศาสตร์ในโอลิมปิก 2026 สถิติที่ไม่เคยมีมาก่อน ประเด็นถกเถียง และความแข็งแกร่งส่วนตัวที่ทำให้เธอก้าวสู่ระดับโลก

By ทีมงาน devdog
วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

เจาะลึกวันพระและความสำคัญของวันมาฆบูชา 2569 ทั้งวันหยุดราชการ ธนาคาร กิจกรรมเวียนเทียนต้นไม้ และผลกระทบต่อบริการขนส่ง เตรียมตัววางแผนทำบุญและพักผ่อน

By ทีมงาน devdog
ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

เจาะลึกงานวิวาห์ "บังมัดคลองตัน" กับ "ต้นข้าว มิสแกรนด์" พร้อมเหตุผลจากใจเจ้าสาวที่เลือกความรักเหนือกาลเวลาและคำวิจารณ์ สู่การเริ่มต้นชีวิตคู่ที่สะท้อนการให้อภัย

By ทีมงาน devdog
ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

เจาะลึกไฮไลท์บอลไทยลีก 2 ของมหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรง ชัยชนะสำคัญจาก ชิตชนก และบทบาทโค้ชดุสิต สู่เส้นทางเพลย์ออฟที่น่าจับตา!

By ทีมงาน devdog