ฟังก์ชัน Lambda: รันไทม์ ทริกเกอร์ และตัวจัดการ
เขียนฟังก์ชัน Lambda เลือกรันไทม์ กำหนดหน่วยความจำและระยะเวลารอ และเชื่อมฟังก์ชันกับเหตุการณ์ S3 หรือทริกเกอร์ API Gateway
ฟังก์ชัน Lambda: รันไทม์ ทริกเกอร์ และตัวจัดการ เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
AWS Lambda คืออะไร
AWS Lambda คือบริการประมวลผลแบบไม่ต้องใช้เซิร์ฟเวอร์ ซึ่งเรียกใช้โค้ดของคุณเพื่อตอบสนองต่อเหตุการณ์ โดยไม่จำเป็นต้องจัดเตรียมหรือจัดการเซิร์ฟเวอร์ คุณจ่ายเฉพาะเวลาประมวลผลที่ใช้เท่านั้น โดยวัดเป็น มิลลิวินาที ทำให้ Lambda มีประสิทธิภาพด้านต้นทุนอย่างมากสำหรับเวิร์กโหลดที่เกิดเป็นครั้งคราวและขับเคลื่อนด้วยเหตุการณ์ Lambda จะปรับขนาดโดยอัตโนมัติตั้งแต่ศูนย์จนถึงการทำงานพร้อมกันหลายพันครั้งตามเหตุการณ์ขาเข้า
รันไทม์ที่รองรับ
Lambda รองรับรันไทม์ที่จัดการโดยบริการ ซึ่งรวมถึง Python, Node.js, Java, Go, Ruby, .NET และอื่น ๆ AWS ดูแลรันไทม์เหล่านี้และใช้แพตช์ความปลอดภัยให้ สำหรับภาษาหรือเวอร์ชันรันไทม์ที่ไม่รองรับโดยตรง คุณสามารถจัดเตรียม รันไทม์แบบกำหนดเองผ่านไฟล์ปฏิบัติการ bootstrap หรือจัดแพ็กเกจฟังก์ชันเป็น อิมเมจคอนเทนเนอร์ (สูงสุด 10 GB) แทนแพ็กเกจการนำไปใช้งานแบบ ZIP
ฟังก์ชันตัวจัดการของ Lambda
ฟังก์ชัน Lambda ทุกฟังก์ชันมี ตัวจัดการ ซึ่งเป็นจุดเริ่มต้นที่โค้ดของคุณต้องส่งออก AWS จะเรียกตัวจัดการด้วยอาร์กิวเมนต์สองรายการ ได้แก่ อ็อบเจ็กต์ เหตุการณ์ (ข้อมูลอินพุตจากตัวกระตุ้น) และอ็อบเจ็กต์ บริบท (ข้อมูลเมตาเกี่ยวกับการเรียกใช้ เช่น ชื่อฟังก์ชัน เวลาที่เหลือ และ ID ของคำขอ) ตัวจัดการจะส่งคืนการตอบกลับ ซึ่งอาจถูกส่งกลับไปยังผู้เรียก ขึ้นอยู่กับประเภทการเรียกใช้
# Python handler example
def lambda_handler(event, context):
# event contains the trigger payload
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
print(f'Processing {key} from {bucket}')
return {
'statusCode': 200,
'body': 'Processed successfully'
}หน่วยความจำ ระยะหมดเวลา และพื้นที่จัดเก็บชั่วคราว
Lambda ให้คุณกำหนดค่า หน่วยความจำได้ตั้งแต่ 128 MB ถึง 10,240 MB โดยจะจัดสรร CPU ตามสัดส่วนของหน่วยความจำ กล่าวคือหน่วยความจำมากขึ้นจะได้ CPU มากขึ้น คุณสามารถตั้งค่า ระยะหมดเวลาได้ตั้งแต่ 1 วินาทีถึง 15 นาที หากฟังก์ชันทำงานเกินเวลานี้ Lambda จะยุติการทำงาน นอกจากนี้ยังมี พื้นที่จัดเก็บชั่วคราว /tmp (ค่าเริ่มต้น 512 MB และกำหนดค่าได้สูงสุด 10 GB) สำหรับไฟล์ชั่วคราวภายในการเรียกใช้แต่ละครั้ง พื้นที่จัดเก็บนี้จะไม่คงอยู่ข้ามการเรียกใช้
การเรียกใช้แบบซิงโครนัสและแบบอะซิงโครนัส
สามารถเรียกใช้ฟังก์ชัน Lambda แบบ ซิงโครนัส (ผู้เรียกรอผลลัพธ์ ซึ่งใช้กับ API Gateway และ ALB) หรือแบบ อะซิงโครนัส (ผู้เรียกไม่ต้องรอ ซึ่งใช้กับเหตุการณ์จาก S3 และ SNS) ในโหมดอะซิงโครนัส Lambda จะลองดำเนินการที่ล้มเหลวอีกสูงสุด สองครั้ง และสามารถส่งเหตุการณ์ที่ล้มเหลวไปยัง คิวจดหมายตาย (SQS หรือ SNS) หรือ บัสเหตุการณ์ของ EventBridge การเลือกโหมดการเรียกใช้ที่เหมาะสมส่งผลต่อการออกแบบการจัดการข้อผิดพลาด
ตัวกระตุ้น Lambda ที่พบบ่อย
Lambda ผสานการทำงานแบบเนทีฟกับบริการ AWS หลายสิบรายการในฐานะแหล่งเหตุการณ์ (ตัวกระตุ้น):
- API Gateway / ALB: คำขอ HTTP (แบบซิงโครนัส)
- S3: เหตุการณ์การสร้าง/ลบอ็อบเจ็กต์ (แบบอะซิงโครนัส)
- DynamoDB Streams / Kinesis: การสตรีมระเบียน (อาศัยการสำรวจ แบบซิงโครนัส)
- SQS: ข้อความในคิว (อาศัยการสำรวจ)
- SNS: การแจ้งเตือนหัวข้อ (แบบอะซิงโครนัส)
- EventBridge: เหตุการณ์ตามกำหนดเวลาหรือเหตุการณ์แบบกำหนดเอง
- บันทึก CloudWatch: ตัวกรองการสมัครรับบันทึก
บทบาทการดำเนินการของ IAM
ฟังก์ชัน Lambda ทุกฟังก์ชันต้องมี บทบาทการดำเนินการของ IAM ที่มอบสิทธิ์ให้ฟังก์ชันเรียกใช้บริการ AWS อื่น ๆ ตัวอย่างเช่น หากฟังก์ชันของคุณอ่านข้อมูลจาก S3 และเขียนข้อมูลไปยัง DynamoDB บทบาทการดำเนินการต้องมีสิทธิ์ s3:GetObject และ dynamodb:PutItem ปฏิบัติตามหลักสิทธิ์เท่าที่จำเป็น โดยมอบเฉพาะสิทธิ์ที่ฟังก์ชันต้องใช้งานจริงเท่านั้น บทบาทการดำเนินการพื้นฐานต้องมี logs:CreateLogGroup, logs:CreateLogStream และ logs:PutLogEvents สำหรับบันทึก CloudWatch ด้วย
แพ็กเกจสำหรับการนำไปใช้งานและข้อจำกัดด้านขนาด
Lambda รองรับรูปแบบการนำไปใช้งานสองรูปแบบ ได้แก่ ไฟล์ ZIP (ขนาดบีบอัด 50 MB และขนาดหลังแตกไฟล์ 250 MB) ซึ่งอัปโหลดโดยตรงหรือผ่าน S3 และ อิมเมจคอนเทนเนอร์ (สูงสุด 10 GB) ซึ่งจัดเก็บใน Amazon ECR แพ็กเกจ ZIP นำไปใช้งานได้เร็วกว่าและเหมาะกับฟังก์ชันขนาดเล็กและ Lambda Layers ส่วนอิมเมจคอนเทนเนอร์เหมาะกับชุดการพึ่งพาขนาดใหญ่หรือทีมที่ใช้กระบวนการทำงานบน Docker อยู่แล้ว ทั้งสองรูปแบบสามารถใช้รันไทม์และรูปแบบตัวจัดการเดียวกันได้
# Deploy a ZIP package from S3
aws lambda update-function-code \
--function-name 'MyFunction' \
--s3-bucket 'my-lambda-packages' \
--s3-key 'my-function-v2.zip'ตัวแปรสภาพแวดล้อมและข้อมูลลับ
ส่งการกำหนดค่าไปยัง Lambda ผ่าน ตัวแปรสภาพแวดล้อม สำหรับค่าที่ละเอียดอ่อน (คีย์ API และรหัสผ่านฐานข้อมูล) ให้จัดเก็บไว้ใน AWS Secrets Manager หรือ Parameter Store แล้วเรียกคืนเมื่อเริ่มต้นฟังก์ชัน (นอกตัวจัดการ) เพื่อใช้ประโยชน์จากการนำบริบทการดำเนินการกลับมาใช้ซ้ำ อย่าฝังข้อมูลลับไว้ในโค้ดฟังก์ชันหรือตัวแปรสภาพแวดล้อมในรูปแบบข้อความธรรมดา ให้ใช้ การเข้ารหัส KMS สำหรับตัวแปรสภาพแวดล้อมของ Lambda เพื่อปกป้องข้อมูลขณะจัดเก็บ
import boto3
import os
# Fetch secret once during cold start (outside handler)
ssm = boto3.client('ssm')
DB_PASSWORD = ssm.get_parameter(
Name=os.environ['DB_PASSWORD_PARAM'],
WithDecryption=True
)['Parameter']['Value']
def lambda_handler(event, context):
# DB_PASSWORD is already loaded; no SSM call on each invocation
passการเริ่มทำงานแบบเย็นและการนำบริบทการดำเนินการกลับมาใช้ซ้ำ
การเรียกใช้ฟังก์ชัน Lambda ครั้งแรกหลังการนำไปใช้งานหรือหลังไม่มีการใช้งานช่วงหนึ่งจะทำให้เกิด การเริ่มทำงานแบบเย็น โดย AWS ต้องเริ่มต้นสภาพแวดล้อมรันไทม์ ดาวน์โหลดแพ็กเกจสำหรับการนำไปใช้งาน และเรียกใช้โค้ดเริ่มต้น การเรียกใช้ครั้งถัดไปภายในสภาพแวดล้อมการดำเนินการเดียวกันเป็น การเริ่มทำงานแบบอุ่น และรวดเร็วกว่ามาก ให้เก็บโค้ดเริ่มต้นส่วนกลาง (ไคลเอ็นต์ SDK และการเชื่อมต่อ DB) ไว้นอกตัวจัดการ เพื่อใช้บริบทการดำเนินการเดียวกันซ้ำระหว่างการเรียกใช้แบบอุ่น
Lambda ใน VPC
ตามค่าเริ่มต้น Lambda จะทำงานใน VPC ที่ AWS จัดการ และเข้าถึงอินเทอร์เน็ตได้ แต่ไม่สามารถเข้าถึงทรัพยากร VPC ส่วนตัวของคุณ หากต้องการเข้าถึงฐานข้อมูล RDS หรือคลัสเตอร์ ElastiCache ในซับเน็ตส่วนตัว ให้กำหนดค่า Lambda ให้ทำงาน ภายใน VPC ของคุณ โดยระบุซับเน็ตและกลุ่มความปลอดภัย ฟังก์ชัน Lambda ที่เปิดใช้ VPC จะใช้ ENI ของ Hyperplane สำหรับเครือข่าย (ไม่ต้องจัดสรร ENI แยกต่อฟังก์ชันอีกต่อไป) ซึ่งขจัดผลกระทบด้านการเริ่มทำงานแบบเย็นที่เคยเกิดกับ Lambda ใน VPC
aws lambda update-function-configuration \
--function-name 'MyFunction' \
--vpc-config 'SubnetIds=subnet-aaa111,subnet-bbb222,SecurityGroupIds=sg-xyz'ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า รันไทม์ของ Lambda รองรับ Python, Node.js, Java, Go และอื่น ๆ รวมถึงรันไทม์แบบกำหนดเองและอิมเมจคอนเทนเนอร์สำหรับกรณีขั้นสูง ตัวกระตุ้น ซึ่งรวมถึง API Gateway (แบบซิงโครนัส) และ S3/SNS (แบบอะซิงโครนัส) เป็นตัวกำหนดว่าเหตุการณ์จะไหลเข้าสู่ฟังก์ชัน Lambda อย่างไร และ บทบาทการดำเนินการ ตัวแปรสภาพแวดล้อม และการกำหนดค่า VPC เป็นองค์ประกอบสำคัญในการเชื่อมต่อ Lambda กับบริการ AWS อื่น ๆ อย่างปลอดภัย บทถัดไปเราจะสำรวจการทำงานพร้อมกัน การจำกัดการทำงาน และการทำงานพร้อมกันที่สงวนไว้ของ Lambda
คำถามที่พบบ่อย
บทเรียน “ฟังก์ชัน Lambda: รันไทม์ ทริกเกอร์ และตัวจัดการ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ฟังก์ชัน Lambda: รันไทม์ ทริกเกอร์ และตัวจัดการ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชัน Lambda: รันไทม์ ทริกเกอร์ และตัวจัดการ”
เขียนฟังก์ชัน Lambda เลือกรันไทม์ กำหนดหน่วยความจำและระยะเวลารอ และเชื่อมฟังก์ชันกับเหตุการณ์ S3 หรือทริกเกอร์ API Gateway คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ฟังก์ชัน Lambda: รันไทม์ ทริกเกอร์ และตัวจัดการ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม
ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชัน Lambda: รันไทม์ ทริกเกอร์ และตัวจัดการ
- การทำงานพร้อมกัน การจำกัดอัตรา และการทำงานพร้อมกันที่จองไว้
- เลเยอร์ Lambda และแพ็กเกจการนำไปใช้งาน
- Lambda@Edge และรูปแบบที่ขับเคลื่อนด้วยเหตุการณ์