طبقات Lambda وحزم النشر
اجمعوا التبعيات المشتركة في طبقات Lambda قابلة لإعادة الاستخدام، وأديروا حزم النشر لأوقات التشغيل الكبيرة.
طبقات Lambda وحزم النشر درس مجاني في AWS Solutions Architect على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AWS Solutions Architect، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.
مشكلة التبعيات في Lambda
يجب أن تكون حزم نشر Lambda مكتفية ذاتياً—إذ يجب تضمين جميع التبعيات، مثل المكتبات وSDKs والملفات الثنائية، في ملف ZIP. يؤدي ذلك سريعاً إلى تضخيم حجم الحزمة: فقد تتجاوز دالة Python لعلوم البيانات تستخدم NumPy وPandas وSciPy حجم 200 MB بعد فك الضغط. يتطلب كل تحديث لكود دالتك إعادة رفع الحزمة كاملة، بما في ذلك المكتبات التي لم تتغير. تحل Lambda Layers هذه المشكلة عبر فصل التبعيات المشتركة عن كود الدالة.
ما هي طبقة Lambda؟
طبقة Lambda هي أرشيف 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 كعمليات منفصلة إلى جانب تعليمات برمجية الدالة ضمن بيئة التنفيذ نفسها. وترتبط بأحداث دورة حياة Lambda (init وinvoke وshutdown) لتنفيذ مهام مثل جمع بيانات القياس عن بُعد، وفحص الأمان، أو التخزين المؤقت للإعدادات. وتُوزَّع الإضافات على هيئة طبقات Lambda. توفر AWS إضافة CloudWatch Lambda Insights وإضافة AWS AppConfig، بينما يوفر المورّدون وكلاء مراقبة مخصّصين على هيئة إضافات.
تنسيقات حزم النشر: ZIP مقابل الحاوية
تدعم Lambda تنسيقين للنشر:
- ZIP (حتى 50 MB مضغوطًا و250 MB بعد فك الضغط): رفع سريع، ودعم للطبقات، ويعمل مع جميع بيئات التشغيل.
- Container Image (حتى 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الإصدارات والأسماء المستعارة
تُعد إصدارات Lambda لقطات ثابتة وغير قابلة للتغيير من تعليمات برمجية الدالة وإعداداتها. في كل مرة تنشر فيها إصدارًا، تجمّد Lambda حزمة النشر ومتغيرات البيئة والطبقات. أما الأسماء المستعارة فهي مؤشرات مسمّاة إلى إصدارات محددة؛ فقد يشير 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، وتريد مشاركة التبعيات بين عدة دوال، وتحتاج إلى تكرار سريع (حدّث الطبقة مرة واحدة لتستفيد جميع الدوال). واستخدم Container Images عندما تتجاوز التبعيات 250 MB، أو تحتاج إلى استخدام حزم نظام تشغيل أساسية مخصّصة، أو لديك سير عمل Docker قائم، أو تريد تضمين أصول كبيرة مثل نماذج ML وقواعد البيانات المرجعية. ولا تتوافق صور الحاويات مع طبقات Lambda، لكنها توفر مرونة أكبر.
تحقّق سريعًا
اختبر مدى فهمك لمفاهيم AWS Solutions Architect (SAA-C03) الواردة في هذا الدرس.
مراجعة الدرس
تعلّمت في هذا الدرس أن Lambda Layers تجمع التبعيات المشتركة بشكل منفصل عن تعليمات برمجية الدالة، مما يقلل حجم الحزمة ويتيح إعادة استخدامها عبر عدة دوال، وأن Container Images (حتى 10 GB عبر ECR) هي الخيار المناسب عندما تتجاوز التبعيات حد ZIP البالغ 250 MB أو عند استخدام سير عمل Docker، وأن Versioning and Aliases تتيح إصدارات ثابتة وغير قابلة للتغيير وعمليات نشر تدريجية مع تقسيم موزون لحركة المرور. بعد ذلك سنستكشف Lambda@Edge والأنماط المعتمدة على الأحداث.
الأسئلة الشائعة
هل درس «طبقات Lambda وحزم النشر» مجاني؟
نعم — نص درس «طبقات Lambda وحزم النشر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AWS Solutions Architect، انتقل إلى CoddyKit PRO. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.
ماذا ستتعلم في «طبقات Lambda وحزم النشر»؟
اجمعوا التبعيات المشتركة في طبقات Lambda قابلة لإعادة الاستخدام، وأديروا حزم النشر لأوقات التشغيل الكبيرة. تتمرن على AWS Solutions Architect مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AWS Solutions Architect؟
لا تُشترط خبرة سابقة. AWS Solutions Architect على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «طبقات Lambda وحزم النشر»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AWS Solutions Architect هذا؟
نعم. كل درس في AWS Solutions Architect يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- وظائف Lambda: أوقات التشغيل والمشغلات والمعالجات
- التزامن والتقييد والتزامن المحجوز
- طبقات Lambda وحزم النشر
- Lambda@Edge والأنماط المستندة إلى الأحداث