Azure Container Apps
انشر تطبيق خدمات مصغّرة على Azure Container Apps مع تكامل sidecar لـ Dapr، واضبط الدخول، واستخدم التوسّع التلقائي المستند إلى KEDA والمحفّز بعمق قائمة انتظار Service Bus
Azure Container Apps درس مجاني في Azure Fundamentals على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Azure Fundamentals، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.
ما هي Azure Container Apps؟
تُعد Azure Container Apps (ACA) خدمة مُدارة بالكامل لاستضافة الحاويات دون خوادم، ومبنية على Kubernetes وKEDA (التوسّع التلقائي المدفوع بالأحداث في Kubernetes). وعلى خلاف AKS، لا تديرون مستوى التحكم أو مجموعات العقد أو بيانات تعريف Kubernetes مباشرةً. بل تنشرون الحاويات باستخدام CLI بسيط أو تعريف YAML، وتتولى Azure جميع مهام التنسيق. وتُعد ACA مثالية للخدمات المصغّرة وواجهات API الخلفية والعاملين المدفوعين بالأحداث ومهام المعالجة في الخلفية التي تحتاج إلى التوسّع الديناميكي، بما في ذلك التوسّع إلى الصفر.
بيئات Container Apps
تُعد بيئة Container Apps حدًا معزولًا تعمل ضمنه تطبيقات Container Apps واحدة أو أكثر. وتشترك جميع التطبيقات في البيئة في الشبكة الافتراضية نفسها ومساحة عمل Log Analytics نفسها. وتكون البيئات محددة النطاق بمنطقة ومجموعة موارد. ويمكنكم نشر بيئات متعددة لعزل الفرق أو المراحل (الإنتاج مقابل التجهيز). ويمكن اختياريًا إدخال البيئة إلى VNet الخاصة بكم للسماح بالاتصال الخاص بين Container Apps وخدمات Azure الأخرى من دون المرور عبر الإنترنت العام.
# Create a Container Apps environment
az containerapp env create \
--name myACAEnvironment \
--resource-group myRG \
--location eastusنشر تطبيق حاوية
لنشر تطبيق حاوية، تحددون صورة الحاوية (من Azure Container Registry أو أي سجل عام)، وعدد النسخ المتماثلة، ومتغيرات البيئة. ويصبح التطبيق متاحًا للعامة عبر عنوان URL من HTTPS يتم إنشاؤه تلقائيًا إذا فعّلتم الدخول الخارجي. ويتضمن تكوين الدخول المنفذ المستهدف، وتقسيم حركة المرور لعمليات النشر الأزرق-الأخضر، وما إذا كان سيتم السماح بـ HTTP أو HTTPS فقط. وتسحب ACA الصورة عند النشر؛ لذا يجب أن تتمتع البيئة بأذونات السحب من السجل.
# Deploy a container app from Azure Container Registry
az containerapp create \
--name myapi \
--resource-group myRG \
--environment myACAEnvironment \
--image myacr.azurecr.io/myapi:latest \
--target-port 8080 \
--ingress external \
--registry-server myacr.azurecr.io \
--min-replicas 1 \
--max-replicas 10التوسّع التلقائي المستند إلى KEDA
تتوسّع Container Apps باستخدام أدوات التوسّع في KEDA التي تعمل استنادًا إلى المقاييس الخارجية. وتشمل أدوات KEDA المضمنة: حركة مرور HTTP (الطلبات المتزامنة لكل نسخة متماثلة)، وعمق قائمة انتظار Azure Service Bus (الرسائل المنتظرة)، وAzure Storage Queue، وCron (المعتمد على الوقت)، وCPU/Memory. وعندما ينخفض مقياس أداة التوسّع إلى الصفر وتكون قيمة minReplicas مضبوطة على 0، تعمل Container Apps على التوسّع إلى الصفر — فلا تُحتسب أي تكلفة للحوسبة حتى وصول طلبات جديدة. ويُعد التوسّع إلى الصفر ممتازًا للعاملين المدفوعين بالأحداث الذين لديهم أحمال عمل متقطعة.
# Scale based on Service Bus queue depth
az containerapp update \
--name myworker \
--resource-group myRG \
--scale-rule-name sbqueue-scaler \
--scale-rule-type azure-servicebus \
--scale-rule-metadata 'queueName=orders' 'namespace=myservicebusns' 'messageCount=5' \
--scale-rule-auth 'connection=servicebus-connection-secret:connection' \
--min-replicas 0 \
--max-replicas 20تكامل Dapr
يُعد Dapr (وقت تشغيل التطبيقات الموزعة) وقت تشغيل محمولًا ومدفوعًا بالأحداث، يبسّط بناء الخدمات المصغّرة. وتوفر Container Apps تكاملًا أصليًا مع Dapr — إذ يمكنكم تمكينه لكل تطبيق باستخدام علامة واحدة. ويوفر Dapr لبنات بناء لـ: استدعاء الخدمة (مع إعادة المحاولة وmTLS)، ومراسلة النشر والاشتراك (مع تجريد Service Bus وEvent Hubs)، وإدارة الحالة (مع تجريد Redis وCosmos DB)، والارتباطات الصادرة. وباستخدام Dapr، تتواصل الخدمات المصغّرة عبر sidecar الخاص بـ Dapr من دون معرفة تفاصيل البنية الأساسية الكامنة.
# Enable Dapr on a Container App
az containerapp update \
--name myapi \
--resource-group myRG \
--enable-dapr \
--dapr-app-id myapi \
--dapr-app-port 8080 \
--dapr-app-protocol httpالمراجعات وتقسيم حركة المرور
ينشئ كل نشر إلى Container App مراجعة جديدة. وفي وضع المراجعات المتعددة، يمكنكم تقسيم حركة المرور بين المراجعات لعمليات النشر الأزرق-الأخضر أو عمليات النشر الكناري. فعلى سبيل المثال، أرسلوا 10% من حركة المرور إلى مراجعة جديدة و90% إلى المراجعة المستقرة الحالية. راقبوا معدلات الأخطاء ووقت الاستجابة في المراجعة الجديدة قبل زيادة حصتها من حركة المرور إلى 100%. ويمكن إلغاء تنشيط المراجعات القديمة، لكنها تظل محفوظة في السجل، مما يتيح التراجع الفوري من خلال إعادة حصة حركة المرور.
# Set traffic split between two revisions
az containerapp ingress traffic set \
--name myapi \
--resource-group myRG \
--revision-weight myapi--abc123=90 myapi--def456=10الأسرار ومتغيرات البيئة
تدعم Container Apps طريقتين لحقن الإعدادات: متغيرات البيئة (للإعدادات غير الحساسة مثل علامات الميزات أو عناوين URL لواجهات API) والأسرار (للقيم الحساسة مثل سلاسل الاتصال). تُخزّن الأسرار على مستوى Container App، ويُشار إليها من خلال متغيرات البيئة أو مكوّنات Dapr. ولإعداد أكثر أمانًا، أشيروا إلى الأسرار من Azure Key Vault باستخدام هوية مُدارة، بحيث تُجلب قيمة السر في وقت التشغيل ولا تُخزّن مطلقًا في مستوى تكوين Container App.
# Add a secret to a Container App
az containerapp secret set \
--name myapi \
--resource-group myRG \
--secrets 'db-password=supersecretpassword'
# Reference the secret as an environment variable
az containerapp update \
--name myapi \
--resource-group myRG \
--set-env-vars 'DB_PASSWORD=secretref:db-password'المهام: أعباء العمل التي تُنفَّذ حتى الاكتمال
توسّع Container Apps Jobs المنصةَ لدعم أعباء العمل التي تُنفَّذ حتى الاكتمال — وهي حاويات تبدأ، وتنجز العمل، ثم تتوقف. تدعم المهام ثلاثة أنواع من المشغّلات: يدوي (يُشغَّل عبر API أو CLI)، ومجدول (بتعبير cron)، ومدفوع بالأحداث (حيث يشغّل KEDA scaler كل تنفيذ). تتم فوترة المهام مقابل وقت التنفيذ الفعلي فقط، ولذلك فهي مناسبة لمعالجة الدُفعات، وإنشاء التقارير، وترحيل قواعد البيانات، ومسارات استدلال تعلّم الآلة التي تعمل دوريًا أو استجابةً للأحداث.
# Create a scheduled Container Apps job (run every hour)
az containerapp job create \
--name my-batch-job \
--resource-group myRG \
--environment myACAEnvironment \
--trigger-type Schedule \
--cron-expression '0 * * * *' \
--image myacr.azurecr.io/batchjob:latest \
--cpu 0.5 --memory 1Giقابلية الرصد: السجلات والمقاييس
ترسل Container Apps سجلات النظام (أحداث المنصة مثل إنشاء المراجعات والتوسّع) وسجلات وحدة التحكم (المخرجات stdout/stderr الخاصة بتطبيقك) إلى مساحة عمل Log Analytics المرفقة بالبيئة. يمكنك الاستعلام عن السجلات باستخدام KQL: ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'myapi' | project TimeGenerated, Log_s. تتضمن مقاييس Azure Monitor المضمّنة عدد النسخ المتماثلة، وعدد الطلبات، وزمن استجابة الطلبات، واستخدام وحدة المعالجة المركزية/الذاكرة لكل نسخة متماثلة — وجميعها متاحة في مدخل Azure من دون أي إعداد إضافي.
# Stream live logs from a Container App
az containerapp logs show \
--name myapi \
--resource-group myRG \
--followACA مقابل AKS مقابل App Service
اختيار منصة حاويات Azure المناسبة: تُعد Container Apps الأنسب للخدمات المصغّرة، والعاملين المدفوعين بالأحداث، وواجهات API عندما تريد مزايا Kubernetes من دون إدارة المجموعة — لا سيما عندما يكون التوسّع إلى الصفر ذا قيمة. تُعد AKS الأنسب عندما تحتاج إلى تحكم كامل في Kubernetes، أو عوامل تشغيل مخصصة، أو تكوينات محددة للعُقد (وحدات معالجة رسومية GPU، أو ذاكرة عالية). أما App Service فتُعد الأنسب لتطبيقات الويب وواجهات API التقليدية عندما يفضّل فريق التطوير نموذج PaaS البسيط من دون أعباء إدارة الحاويات. تدعم المنصات الثلاث جميعها الحاويات؛ ويتمثل الفرق في الموازنة بين تعقيد الإدارة ومستوى التحكم.
الشبكات: الإدخال الداخلي والخارجي
تدعم Container Apps وضعين للإدخال: خارجي (يمكن الوصول إليه علنًا عبر نقطة نهاية HTTPS موزّعة الحمل مع TLS تلقائي) وداخلي (لا يمكن الوصول إليه إلا من داخل بيئة Container Apps نفسها أو من الموارد المتصلة عبر VNet peering). يُستخدم الإدخال الداخلي لخدمات الواجهة الخلفية التي ينبغي ألا تُعرَّض للإنترنت مطلقًا. ويمكن للتطبيقات استدعاء بعضها بعضًا باستخدام اسم DNS الداخلي المُنشأ تلقائيًا http://myapi داخل البيئة نفسها، ما يتيح اتصالًا بسيطًا بين الخدمات من دون نشر بوابة API.
تحقق سريع
اختبر مدى فهمك لمفاهيم Microsoft Azure Fundamentals (AZ-900) الواردة في هذا الدرس.
مراجعة الدرس
تعلّمت في هذا الدرس أن Azure Container Apps توفّر استضافة حاويات بلا خوادم مبنية على Kubernetes وKEDA من دون إدارة المجموعات، وأن KEDA scalers تتيح التوسّع إلى الصفر استنادًا إلى طول قائمة الانتظار، أو حركة مرور HTTP، أو جداول cron، وأن Dapr integration تبسّط الاتصال بين الخدمات المصغّرة وإدارة الحالة. في الخطوة التالية، سنجمع كل ذلك في سير عمل متكامل للمطور من البداية إلى النهاية.
الأسئلة الشائعة
هل درس «Azure Container Apps» مجاني؟
نعم — نص درس «Azure Container Apps» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Azure Fundamentals، انتقل إلى CoddyKit PRO. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.
ماذا ستتعلم في «Azure Container Apps»؟
انشر تطبيق خدمات مصغّرة على Azure Container Apps مع تكامل sidecar لـ Dapr، واضبط الدخول، واستخدم التوسّع التلقائي المستند إلى KEDA والمحفّز بعمق قائمة انتظار Service Bus تتمرن على Azure Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Azure Fundamentals؟
لا تُشترط خبرة سابقة. Azure Fundamentals على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Azure Container Apps»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Azure Fundamentals هذا؟
نعم. كل درس في Azure Fundamentals يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الهوية المدارة للمصادقة دون كلمات مرور
- Azure Service Bus للمراسلة غير المقترنة
- Azure Container Apps
- سير عمل المطوّر من البداية إلى النهاية