เลเยอร์ Lambda และแพ็กเกจการนำไปใช้งาน
รวมส่วนพึ่งพาที่ใช้ร่วมกันไว้ในเลเยอร์ Lambda ที่นำกลับมาใช้ใหม่ได้ และจัดการแพ็กเกจการนำไปใช้งานสำหรับรันไทม์ขนาดใหญ่
เลเยอร์ Lambda และแพ็กเกจการนำไปใช้งาน เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาการพึ่งพาใน Lambda
แพ็กเกจสำหรับการนำไปใช้งานของ Lambda ต้องมีทุกอย่างครบในตัวเอง โดยต้องรวมการพึ่งพาทั้งหมด (ไลบรารี SDK และไบนารี) ไว้ใน ZIP ซึ่งทำให้ขนาดแพ็กเกจเพิ่มขึ้นอย่างรวดเร็ว เช่น ฟังก์ชันด้านวิทยาศาสตร์ข้อมูลที่ใช้ Python, NumPy, Pandas และ SciPy อาจมีขนาดเกิน 200 MB หลังแตกไฟล์ ทุกครั้งที่อัปเดตโค้ดฟังก์ชัน คุณต้องอัปโหลดชุดแพ็กเกจทั้งหมดอีกครั้ง รวมถึงไลบรารีที่ไม่มีการเปลี่ยนแปลงด้วย Lambda Layers แก้ปัญหานี้ด้วยการแยกการพึ่งพาที่ใช้ร่วมกันออกจากโค้ดฟังก์ชัน
Lambda Layer คืออะไร
Lambda Layer คือไฟล์ ZIP ที่บรรจุไลบรารี รันไทม์แบบกำหนดเอง ข้อมูล หรือไฟล์การกำหนดค่าไว้ โดยจะแยกจัดเก็บจากโค้ดฟังก์ชันและเมานต์เข้าสู่สภาพแวดล้อมการทำงานของฟังก์ชันที่ /opt หลายฟังก์ชันสามารถใช้เลเยอร์เดียวกันได้ เพียงอัปเดตเลเยอร์ครั้งเดียว ทุกฟังก์ชันที่ใช้เลเยอร์นั้นก็จะได้รับประโยชน์ไปด้วย ฟังก์ชัน Lambda แต่ละรายการมีได้สูงสุด 5 เลเยอร์ และขนาดรวมหลังแตกไฟล์ต้องไม่เกิน 250 MB
การสร้างและเผยแพร่เลเยอร์
หากต้องการสร้างเลเยอร์ ให้จัดแพ็กเกจสิ่งที่ต้องพึ่งพาไว้ในโครงสร้างไดเรกทอรีที่ถูกต้องสำหรับรันไทม์ของคุณ เช่น python/lib/python3.12/site-packages/ สำหรับ Python จากนั้นบีบอัดเป็นไฟล์ ZIP และเผยแพร่ เมื่อเผยแพร่แล้ว เลเยอร์จะได้รับ ARN ของเวอร์ชัน ให้อ้างอิง ARN นี้เมื่อติดเลเยอร์เข้ากับฟังก์ชัน ทุกครั้งที่อัปเดตเลเยอร์จะมีการสร้างเวอร์ชันใหม่ ฟังก์ชันจะยังคงใช้เวอร์ชันที่กำหนดค่าไว้จนกว่าคุณจะอัปเดตฟังก์ชันเหล่านั้นโดยชัดเจน
# Build layer for Python
mkdir -p layer/python
pip install pandas numpy -t layer/python/
cd layer && zip -r ../my-data-layer.zip python/
# Publish the layer
aws lambda publish-layer-version \
--layer-name 'DataScienceLayer' \
--zip-file fileb://my-data-layer.zip \
--compatible-runtimes python3.12 python3.11การติดเลเยอร์เข้ากับฟังก์ชัน
เพิ่มเลเยอร์ให้ฟังก์ชันโดยใช้พารามิเตอร์ --layers ขณะสร้างหรืออัปเดตฟังก์ชัน Lambda จะเมานต์เลเยอร์ที่ติดไว้ทั้งหมดเข้าสู่ /opt ก่อนเริ่มทำงานของฟังก์ชัน แพ็กเกจ Python ใต้ /opt/python จะอยู่ในเส้นทาง Python โดยอัตโนมัติ ส่วนโมดูล Node.js ใต้ /opt/nodejs/node_modules จะถูกค้นพบโดยอัตโนมัติ โค้ดฟังก์ชันของคุณสามารถใช้ import หรือ require เพื่อนำเข้าแพ็กเกจจากเลเยอร์ได้ราวกับติดตั้งไว้ภายในเครื่อง
aws lambda update-function-configuration \
--function-name 'DataProcessor' \
--layers \
'arn:aws:lambda:us-east-1:123456789012:layer:DataScienceLayer:3' \
'arn:aws:lambda:us-east-1:123456789012:layer:UtilsLayer:1'เลเยอร์สาธารณะที่ AWS จัดเตรียมให้
AWS เผยแพร่เลเยอร์อย่างเป็นทางการที่คุณสามารถใช้ได้โดยไม่ต้องสร้างเอง ตัวอย่างเช่น เลเยอร์ AWS Lambda Powertools ซึ่งรองรับการบันทึกข้อมูลแบบมีโครงสร้าง การติดตามร่องรอย และแฟล็กคุณลักษณะ เลเยอร์โปรแกรมควบคุมฐานข้อมูล และเลเยอร์ AWS Parameters and Secrets Lambda Extension สำหรับแคชค่าจาก SSM/Secrets Manager ไว้ภายในเครื่อง ผู้ให้บริการภายนอก เช่น Datadog และ New Relic ก็เผยแพร่เลเยอร์สาธารณะสำหรับตัวแทนตรวจสอบระบบของตนเช่นกัน ตรวจสอบ Serverless Application Repository และคอนโซล Lambda เพื่อดูเลเยอร์สาธารณะที่พร้อมใช้งาน
ส่วนขยาย Lambda ผ่านเลเยอร์
Lambda Extensions ทำงานเป็นกระบวนการแยกต่างหากควบคู่ไปกับโค้ดฟังก์ชันภายในสภาพแวดล้อมการทำงานเดียวกัน ส่วนขยายเหล่านี้เชื่อมต่อกับเหตุการณ์วงจรชีวิตของ Lambda ได้แก่ การเริ่มต้น การเรียกใช้ และการปิดระบบ เพื่อทำงานต่าง ๆ เช่น การรวบรวมข้อมูลการวัดผล การสแกนด้านความปลอดภัย หรือการแคชการกำหนดค่า ส่วนขยายจะแจกจ่ายในรูปแบบ Lambda Layers AWS มีส่วนขยาย CloudWatch Lambda Insights และส่วนขยาย AWS AppConfig ให้ใช้งาน ส่วนผู้ให้บริการก็มีตัวแทนตรวจสอบระบบแบบกำหนดเองในรูปส่วนขยายเช่นกัน
รูปแบบแพ็กเกจการนำไปใช้งาน: ZIP เทียบกับคอนเทนเนอร์
Lambda รองรับรูปแบบการนำไปใช้งานสองรูปแบบ:
- ZIP (สูงสุด 50 MB เมื่อบีบอัด และ 250 MB หลังแตกไฟล์): อัปโหลดได้รวดเร็ว รองรับเลเยอร์ และทำงานได้กับรันไทม์ทั้งหมด
- อิมเมจคอนเทนเนอร์ (สูงสุด 10 GB): จัดเก็บใน Amazon ECR ใช้เครื่องมือ Docker มาตรฐาน ไม่รองรับเลเยอร์ และเหมาะสำหรับสิ่งที่ต้องพึ่งพาขนาดใหญ่มาก เช่น โมเดล ML และไบนารีขนาดใหญ่
อิมเมจคอนเทนเนอร์ต้องใช้งานตาม Lambda Runtime Interface โดยใช้อิมเมจพื้นฐานที่ AWS จัดเตรียมไว้ เพื่อให้ Lambda ทราบวิธีเรียกใช้ตัวจัดการของคุณ
# Dockerfile for a Lambda container image
FROM public.ecr.aws/lambda/python:3.12
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY app.py .
CMD ['app.lambda_handler']ขั้นตอนการทำงานของอิมเมจคอนเทนเนอร์
การสร้างและนำอิมเมจคอนเทนเนอร์ของ Lambda ไปใช้งานเป็นไปตามขั้นตอนมาตรฐานของคอนเทนเนอร์ ได้แก่ สร้างด้วย docker build พุชไปยัง Amazon ECR และอ้างอิง URI ของอิมเมจเมื่อสร้างหรืออัปเดตฟังก์ชัน Lambda อิมเมจคอนเทนเนอร์เป็นแบบ แก้ไขไม่ได้ โดยแท็กของอิมเมจแต่ละรายการจะสอดคล้องกับเวอร์ชันฟังก์ชันที่เฉพาะเจาะจง Lambda แคชอิมเมจคอนเทนเนอร์ไว้ในโครงสร้างพื้นฐานของตน ดังนั้นการเริ่มทำงานแบบเย็นครั้งถัด ๆ ไปหลังจากครั้งแรกจึงรวดเร็วขึ้น
# Build and push to ECR
docker build -t my-lambda-function .
aws ecr get-login-password | docker login --username AWS \
--password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
docker tag my-lambda-function \
123456789012.dkr.ecr.us-east-1.amazonaws.com/my-repo:latest
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-repo:latestการกำหนดเวอร์ชันและนามแฝง
Versions ของ Lambda คือภาพรวมที่แก้ไขไม่ได้ของโค้ดฟังก์ชันและการกำหนดค่า ทุกครั้งที่เผยแพร่เวอร์ชัน Lambda จะตรึงแพ็กเกจการนำไปใช้งาน ตัวแปรสภาพแวดล้อม และเลเยอร์ไว้ Aliases คือตัวชี้ที่มีชื่อซึ่งชี้ไปยังเวอร์ชันที่ระบุ เช่น prod อาจชี้ไปยังเวอร์ชัน 5 และ staging ชี้ไปยังเวอร์ชัน 6 นอกจากนี้ คุณยังใช้ นามแฝงแบบถ่วงน้ำหนัก เพื่อส่งทราฟฟิกบางส่วนไปยังเวอร์ชันใหม่สำหรับการนำไปใช้งานแบบคานารีได้ เช่น 10% ไปยัง v6 และ 90% ไปยัง v5
# Publish a version and create/update an alias
aws lambda publish-version --function-name 'DataProcessor'
# Returns version number, e.g., "Version": "7"
aws lambda update-alias \
--function-name 'DataProcessor' \
--name 'prod' \
--function-version '7' \
--routing-config 'AdditionalVersionWeights={"6": 0.1}'การกำหนดเวอร์ชันและการเลิกใช้งานเลเยอร์
เลเยอร์ก็มีการกำหนดเวอร์ชันเช่นกัน เมื่อเผยแพร่เลเยอร์เวอร์ชันใหม่ ฟังก์ชันที่มีอยู่จะยังคงใช้เวอร์ชันที่ตรึงไว้จนกว่าคุณจะอัปเดตฟังก์ชันเหล่านั้น นั่นหมายความว่าคุณสามารถอัปเดตเลเยอร์ที่ใช้ร่วมกันได้อย่างปลอดภัยโดยไม่ทำให้ฟังก์ชันทั้งหมดหยุดทำงานพร้อมกัน และทยอยนำเวอร์ชันใหม่ไปใช้งานได้ ในท้ายที่สุด ให้เลิกใช้เลเยอร์เวอร์ชันเก่าเพื่อลดภาระด้านพื้นที่จัดเก็บและการบำรุงรักษา Lambda จะเก็บเลเยอร์เวอร์ชันต่าง ๆ ไว้แม้คุณจะลบออกจากคอนโซลแล้ว จนกว่าจะไม่มีฟังก์ชันใดอ้างอิงเลเยอร์เหล่านั้น
การเลือกระหว่างเลเยอร์กับอิมเมจคอนเทนเนอร์
ใช้ Layers เมื่อขนาดรวมหลังแตกไฟล์ไม่เกิน 250 MB ต้องการใช้สิ่งที่ต้องพึ่งพาร่วมกันในหลายฟังก์ชัน และต้องการปรับปรุงได้อย่างรวดเร็ว โดยอัปเดตเลเยอร์ครั้งเดียวแล้วทุกฟังก์ชันจะได้รับประโยชน์ ใช้ อิมเมจคอนเทนเนอร์ เมื่อสิ่งที่ต้องพึ่งพามีขนาดเกิน 250 MB ต้องใช้แพ็กเกจระบบปฏิบัติการพื้นฐานแบบกำหนดเอง มีขั้นตอนการทำงานของ Docker ที่ใช้อยู่แล้ว หรือต้องการรวมทรัพยากรขนาดใหญ่ เช่น โมเดล ML และฐานข้อมูลอ้างอิง อิมเมจคอนเทนเนอร์ไม่เข้ากันได้กับ Lambda Layers แต่มีความยืดหยุ่นมากกว่า
ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า Lambda Layers จะแพ็กเกจสิ่งที่ต้องพึ่งพาร่วมกันแยกจากโค้ดฟังก์ชัน ซึ่งช่วยลดขนาดแพ็กเกจและทำให้ใช้ซ้ำในหลายฟังก์ชันได้ อิมเมจคอนเทนเนอร์ (สูงสุด 10 GB ผ่าน ECR) เป็นตัวเลือกที่เหมาะสมเมื่อสิ่งที่ต้องพึ่งพามีขนาดเกินขีดจำกัด 250 MB ของ ZIP หรือเมื่อมีการใช้ขั้นตอนการทำงานของ Docker อยู่แล้ว และ การกำหนดเวอร์ชันและนามแฝง ช่วยให้เผยแพร่รุ่นที่แก้ไขไม่ได้และนำไปใช้งานแบบคานารีด้วยการแบ่งทราฟฟิกแบบถ่วงน้ำหนักได้ บทถัดไปเราจะศึกษา Lambda@Edge และรูปแบบที่ขับเคลื่อนด้วยเหตุการณ์
คำถามที่พบบ่อย
บทเรียน “เลเยอร์ Lambda และแพ็กเกจการนำไปใช้งาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เลเยอร์ Lambda และแพ็กเกจการนำไปใช้งาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เลเยอร์ Lambda และแพ็กเกจการนำไปใช้งาน”
รวมส่วนพึ่งพาที่ใช้ร่วมกันไว้ในเลเยอร์ Lambda ที่นำกลับมาใช้ใหม่ได้ และจัดการแพ็กเกจการนำไปใช้งานสำหรับรันไทม์ขนาดใหญ่ คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “เลเยอร์ Lambda และแพ็กเกจการนำไปใช้งาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม
ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชัน Lambda: รันไทม์ ทริกเกอร์ และตัวจัดการ
- การทำงานพร้อมกัน การจำกัดอัตรา และการทำงานพร้อมกันที่จองไว้
- เลเยอร์ Lambda และแพ็กเกจการนำไปใช้งาน
- Lambda@Edge และรูปแบบที่ขับเคลื่อนด้วยเหตุการณ์