0Pricing
AWS Solutions Architect · บทเรียน

เลเยอร์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ฟังก์ชัน Lambda: รันไทม์ ทริกเกอร์ และตัวจัดการ
  2. การทำงานพร้อมกัน การจำกัดอัตรา และการทำงานพร้อมกันที่จองไว้
  3. เลเยอร์ Lambda และแพ็กเกจการนำไปใช้งาน
  4. Lambda@Edge และรูปแบบที่ขับเคลื่อนด้วยเหตุการณ์
← กลับไปที่ AWS Solutions Architect