Cloud
น้องๆ เคยไหม เขียนโปรแกรมแล้วต้องมานั่งปวดหัวเรื่อง Server? ต้องมาคอยอัพเดท OS, Patch Security, Scale Server เอง โอ้ย! ปวดหัว... Aws Lambda นี่แหละคือพระเอกขี่ม้าขาวมาช่วยเรา Serverless ไง! คือไม่ต้องจัดการ Server เอง AWS จัดการให้หมด เราโฟกัสแค่ Code อย่างเดียว สบายแฮ!
สมัยผมทำร้านเน็ต SiamCafe นี่นะ (ตั้งแต่ปี 97 โน่น) ตอนนั้น Server นี่คือหัวใจหลักเลย ต้องดูแลอย่างดี กลัวเจ๊ง กลัวโดน Hack Lambda นี่เหมือนมีคนมาช่วยดูแลร้านให้เรา 24/7 เราแค่ทำหน้าที่บริการลูกค้า (เขียน Code) อย่างเดียวพอ
ทำไมถึงสำคัญน่ะเหรอ? ลองคิดดูนะ เราไม่ต้องเสียเวลา Setup Server, ไม่ต้องจ่ายเงินค่า Server ที่ไม่ได้ใช้ (Pay-as-you-go), Scale อัตโนมัติเมื่อมีคนใช้เยอะๆ แถมยังปลอดภัยกว่าเพราะ AWS ดูแลเรื่อง Security ให้เราอีก คุ้มกว่าเห็นๆ
Lambda มันคือ Function ครับน้องๆ คิดง่ายๆ ว่าเป็น Code snippet เล็กๆ ที่ทำหน้าที่อะไรบางอย่าง เช่น รับข้อมูลจาก User แล้วบันทึกลง Database, Resize รูปภาพ, หรือส่ง Email ก็ได้ Function พวกนี้จะถูก Trigger (เรียกใช้งาน) เมื่อมี Event เกิดขึ้น เช่น มีคน Upload รูปภาพ, มีคนส่ง Request มาที่ API Gateway หรือมีข้อมูลใหม่เข้ามาใน Database
Event ก็คือตัวกระตุ้นให้ Lambda Function ทำงานนั่นเอง อย่างที่บอกไป Event อาจจะเป็นการ Upload รูปภาพ (S3), การเรียก API (API Gateway), การเปลี่ยนแปลงข้อมูลใน Database (DynamoDB) หรือแม้แต่ Timer ก็ได้ AWS มีบริการหลากหลายที่สามารถ Trigger Lambda Function ได้
อันนี้สำคัญเลย! Lambda คิดเงินตามจำนวน Request ที่เข้ามา และระยะเวลาที่ Function ทำงาน (ในหน่วย milliseconds) ถ้าน้องๆ ไม่มีคนใช้ Function เลย ก็ไม่ต้องจ่ายเงินสักบาท! สมัยผมทำร้านเน็ต ต้องจ่ายค่าไฟ Server เดือนละหลายพันบาท Lambda นี่ช่วยประหยัดเงินไปได้เยอะเลย
มาถึงส่วนสำคัญแล้ว นั่นคือการใช้งาน Lambda จริงๆ มันไม่ได้ยากอย่างที่คิดนะน้องๆ AWS มี Console ให้เราจัดการทุกอย่าง หรือจะใช้ AWS CLI ก็ได้
เข้าไปที่ AWS Management Console แล้วเลือก Lambda จากนั้นกดปุ่ม "Create function" เลือก "Author from scratch" ตั้งชื่อ Function เลือก Runtime (เช่น Python, Node.js, Java) แล้วกด "Create function" แค่นี้เอง!
สมัยผมเริ่มทำ Lambda ครั้งแรก ผมใช้ Python เพราะมันง่ายดี ลองดู Code ตัวอย่างง่ายๆ ที่ใช้ Lambda ดึงข้อมูลจาก S3 นะ
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
response = s3.get_object(Bucket=bucket, Key=key)
content = response['Body'].read().decode('utf-8')
print(content)
return {
'statusCode': 200,
'body': 'Hello from Lambda!'
}
Code นี้จะทำงานเมื่อมี Object ใหม่ถูก Upload เข้าไปใน S3 Bucket มันจะดึงข้อมูล Object นั้นมา แล้ว Print ออกมา
หลังจากเขียน Code เสร็จแล้ว ก็ต้อง Deploy ขึ้น Lambda วิธีที่ง่ายที่สุดคือ Copy Code ไปใส่ใน Lambda Console แล้วกด "Deploy" จากนั้นก็กด "Test" เพื่อลองรัน Function ดู AWS จะให้เราสร้าง Test Event เพื่อจำลองสถานการณ์ต่างๆ ได้
ขั้นตอนสุดท้ายคือการตั้งค่า Trigger เพื่อให้ Lambda Function ทำงานเมื่อมี Event เกิดขึ้น เลือก "Add trigger" แล้วเลือก Service ที่ต้องการ เช่น S3, API Gateway หรือ DynamoDB ตั้งค่า Event ให้ตรงกับความต้องการของเรา
ดูวิดีโอเพิ่มเติมเกี่ยวกับAws Lambda Serverless Thai:
Lambda ไม่ใช่ทางเลือกเดียวในการรัน Code บน Cloud นะน้องๆ ยังมีทางเลือกอื่นๆ อีก เช่น EC2, ECS, EKS แต่ละทางเลือกก็มีข้อดีข้อเสียต่างกัน
EC2 คือ Virtual Machine ที่เราต้องจัดการทุกอย่างเอง ตั้งแต่ OS ยัน Application ECS คือ Container Orchestration Service ที่ช่วยให้เราจัดการ Docker Container ได้ง่ายขึ้น EKS คือ Kubernetes Service ที่ช่วยให้เราจัดการ Container ได้ซับซ้อนยิ่งขึ้น
Lambda เหมาะกับ Workload ที่ไม่ต้องการ Server Management, Scale ได้ง่าย, และมี Event-driven Architecture ส่วน EC2, ECS, EKS เหมาะกับ Workload ที่ต้องการ Control มากกว่า, มี Resource Requirement ที่แน่นอน, และต้องการ Run Long-running Processes
| Feature | AWS Lambda | AWS EC2 | AWS ECS |
|---|---|---|---|
| Server Management | None | Full | Partial |
| Scaling | Automatic | Manual | Automatic/Manual |
| Pricing | Pay-as-you-go | Hourly/Reserved Instances | Hourly/Spot Instances |
| Use Cases | Event-driven Applications, APIs, Background Jobs | Web Applications, Databases, General Purpose Computing | Microservices, Containerized Applications |
ลองพิจารณา Use Case ของน้องๆ แล้วเลือกทางเลือกที่เหมาะสมที่สุดนะ ที่ SiamCafe Blog เรามีบทความเปรียบเทียบ Cloud Services ต่างๆ อีกเยอะ ลองเข้าไปอ่านดูได้
สรุปแล้ว Lambda คือเครื่องมือที่ทรงพลังมากๆ ในการสร้าง Application บน Cloud ช่วยให้เราไม่ต้องปวดหัวเรื่อง Server และโฟกัสกับการเขียน Code อย่างเดียว น้องๆ ลองเอาไปใช้ดู แล้วจะติดใจ!
ถ้าอยากรู้เรื่อง Cloud เพิ่มเติม ตามไปอ่านบทความอื่นๆ ได้ที่ SiamCafe Blog นะครับ
เอาล่ะน้องๆ มาถึงตรงนี้ พี่จะมาแชร์ Best Practices จากประสบการณ์จริงที่ร้านเน็ต SiamCafe สมัยก่อน ปรับมาใช้กับ Lambda ได้สบายมาก บอกเลยว่าโคตรคุ้ม!
เรื่องแรกคือ "จัดการ Dependencies ให้ดี" สมัยก่อนลงเกมทีนึง ลง Windows ใหม่ทีนึง ปวดหัว! Lambda ก็เหมือนกัน อย่าเอาทุกอย่างยัดเข้าไปใน Function เดียว ทำให้มัน Slim ที่สุดเท่าที่จะทำได้ ใช้ Layer ช่วยชีวิต!
1. Lambda Layers: แยก Dependencies ที่ใช้ร่วมกันออกไปเลย สมมติเราใช้ Library "image-processing" หลาย Lambda function ก็เอาไปใส่ Layer เดียว จบ!
# ตัวอย่างการสร้าง Layer ด้วย Docker
FROM public.ecr.aws/lambda/provided:al2
COPY requirements.txt .
RUN pip install -r requirements.txt -t /opt/python/lib/python3.8/site-packages/
CMD ["/bin/bash"]
2. Cold Starts Optimization: Lambda มันจะ "เย็น" คือไม่ได้ถูกเรียกใช้งานนานๆ พอมันถูกเรียกครั้งแรก จะนานหน่อย (Cold Start) แก้ได้ด้วยการ Keep Warm หรือ Provisioned Concurrency
สมัยก่อนร้านเน็ตก็ต้องเปิดเครื่องทิ้งไว้เครื่องนึง เอาไว้ load เกมก่อนลูกค้าจะมาเล่น Lambda ก็เหมือนกัน!
3. Error Handling: อย่าปล่อยให้ Lambda พังแบบเงียบๆ! Log ให้ละเอียด ใช้ CloudWatch Logs Insights วิเคราะห์หาสาเหตุ แล้วปรับปรุง code
try:
# โค้ดที่อาจจะ Error
result = process_data(data)
return {
'statusCode': 200,
'body': json.dumps(result)
}
except Exception as e:
print(f"Error: {e}")
return {
'statusCode': 500,
'body': json.dumps({'error': str(e)})
}
พี่เคยเจอเคส Lambda ทำงานนานเกิน Timeout เพราะไปดึงข้อมูลจาก Database ที่อยู่ไกลมาก แก้โดยการใช้ AWS Global Accelerator ช่วย Routing Traffic ให้เร็วขึ้น จบเลย!
ไม่แพง ถ้ารู้จักใช้! คิดตามจำนวน Request และ Duration ถ้า Function เราทำงานเร็วๆ ใช้ Memory น้อยๆ ก็ถูก ลองเทียบกับ EC2 ดู จะเห็นว่า Lambda คุ้มกว่าเยอะ
เหมาะกับงาน Event-Driven ทุกชนิด เช่น Upload รูปแล้ว Generate Thumbnail, รับ Webhook จาก Third-Party Service, ทำ Backend API ง่ายๆ
Scale ได้สบายๆ! AWS จัดการให้หมด เราไม่ต้องห่วงเรื่อง Server เลย นี่แหละ Serverless ที่แท้ทรู
ไม่ยาก! ใช้ AWS SAM, Serverless Framework หรือ Terraform ช่วยได้เยอะ สมัยก่อน Install Windows Server ยังยากกว่าอีก!
Lambda นี่แหละคืออนาคต! Serverless มันช่วยลดภาระเรื่อง Infrastructure ไปได้เยอะ ทำให้เราโฟกัสกับการพัฒนา Application ได้เต็มที่ ลองเอา Best Practices ที่พี่แนะนำไปปรับใช้ดู รับรองชีวิตดีขึ้นเยอะ!
อย่าลืมไปอ่านบทความอื่นๆ ใน SiamCafe Blog ด้วยนะ มีเรื่อง IT สนุกๆ อีกเพียบ! แล้วถ้าสนใจลงทุน Forex ลองดู iCafeForex ก็ได้นะน้อง