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

คิวบา: มนต์เสน่ห์บนเส้นทางแห่งความท้าทาย – วิกฤตพลังงานและแรงกดดันจากสหรัฐฯ

คิวบา: มนต์เสน่ห์บนเส้นทางแห่งความท้าทาย – วิกฤตพลังงานและแรงกดดันจากสหรัฐฯ

เจาะลึกสถานการณ์ล่าสุดของคิวบา ทั้งวิกฤตไฟฟ้าดับครั้งใหญ่จากปัญหาพลังงาน และแรงกดดันจากสหรัฐฯ ภายใต้การนำของทรัมป์ อนาคตของเกาะปฏิวัติแห่งนี้จะเป็นอย่างไร?

By ทีมงาน devdog
ละครไทย: ถอดรหัสเสน่ห์ "พลอยน้ำเพชร" และปรากฏการณ์บันเทิงที่ไม่เคยจางหาย

ละครไทย: ถอดรหัสเสน่ห์ "พลอยน้ำเพชร" และปรากฏการณ์บันเทิงที่ไม่เคยจางหาย

สำรวจความเข้มข้นของละคร "พลอยน้ำเพชร" จากช่องวัน 31 พร้อมเจาะลึกตอนที่ 17-20 และเสน่ห์ของละครไทยที่ครองใจผู้ชมทั่วโลก

By ทีมงาน devdog
ชนนพัฒฐ์ นาคสั้ว: สส.สงขลา กับประเด็นร้อนคดีเว็บพนันออนไลน์ที่ DSI กำลังจับตา

ชนนพัฒฐ์ นาคสั้ว: สส.สงขลา กับประเด็นร้อนคดีเว็บพนันออนไลน์ที่ DSI กำลังจับตา

เจาะลึกประเด็นร้อน ชนนพัฒฐ์ นาคสั้ว สส.สงขลา พรรคกล้าธรรม กับกระแสข่าวพาดพิงถึงเครือข่ายเว็บพนันออนไลน์ที่ DSI กำลังสอบสวน เปิดความท้าทายต่อบทบาทผู้แทนราษฎร

By ทีมงาน devdog
เจาะลึก "ณัฐธิดา เล็กอุดากร" หลานเนวินชิดชอบ สส. อายุน้อยสุด ผู้พร้อมสร้างอนาคตใหม่ให้บุรีรัมย์

เจาะลึก "ณัฐธิดา เล็กอุดากร" หลานเนวินชิดชอบ สส. อายุน้อยสุด ผู้พร้อมสร้างอนาคตใหม่ให้บุรีรัมย์

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

By ทีมงาน devdog