البرنامج التعليمي: نشر مهمة تستند إلى الحدث باستخدام Azure Container Apps

تسمح لك مهام Azure Container Apps بتشغيل المهام الحاوية التي يتم تنفيذها لمدة محدودة والخروج. يمكنك تشغيل تنفيذ مهمة يدويا أو وفقا لجدول زمني أو استنادا إلى الأحداث. الوظائف هي الأنسب لمهام مثل معالجة البيانات أو التعلم الآلي أو تنظيف الموارد أو أي سيناريو يتطلب موارد حساب سريعة الزوال بلا خادم.

في هذا البرنامج التعليمي، ستتعلم كيفية العمل مع الوظائف المستندة إلى الحدث.

  • إنشاء بيئة Container Apps لنشر تطبيقات الحاوية
  • إنشاء قائمة انتظار Azure Storage لإرسال رسائل إلى تطبيق الحاوية
  • إنشاء صورة حاوية تقوم بتشغيل مهمة
  • نشر المهمة في بيئة تطبيقات الحاوية
  • التحقُّق من معالجة تطبيق الحاوية لرسائل قائمة الانتظار

تبدأ المهمة التي تقوم بإنشائها تنفيذا لكل رسالة يتم إرسالها إلى قائمة انتظار Azure Storage. يقوم كل تنفيذ مهمة بتشغيل حاوية تنفذ الخطوات التالية:

  1. الحصول على رسالة واحدة من قائمة الانتظار.
  2. يسجل الرسالة إلى سجلات تنفيذ المهمة.
  3. حذف الرسالة من قائمة الانتظار.
  4. المخارج.

هام

يراقب أداة التحجيم طول قائمة الانتظار لتحديد عدد المهام التي يجب بدء تشغيلها. للتحجيم الدقيق، لا تحذف رسالة من قائمة الانتظار حتى ينتهي تنفيذ المهمة من معالجتها.

تتوفر التعليمات البرمجية المصدر للوظيفة التي تقوم بتشغيلها في هذا البرنامج التعليمي في مستودع Azure Samples GitHub.

المتطلبات الأساسية

الإعداد

  1. لتسجيل الدخول إلى Azure من CLI، قم بتشغيل الأمر التالي واتبع المطالبات لإكمال عملية المصادقة.

    az login
    
  2. تأكد من تشغيل أحدث إصدار من CLI من خلال أمر الترقية.

    az upgrade
    
  3. قم بتثبيت أحدث إصدار من ملحق Azure Container Apps CLI.

    az extension add --name containerapp --upgrade
    
  4. Microsoft.App سجل مساحات الأسماء و Microsoft.OperationalInsights إذا لم تكن قد سجلتها بالفعل في اشتراك Azure الخاص بك.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    
  5. الآن بعد اكتمال إعداد Azure CLI، يمكنك تحديد متغيرات البيئة المستخدمة في هذه المقالة.

    RESOURCE_GROUP="jobs-quickstart"
    LOCATION="northcentralus"
    ENVIRONMENT="env-jobs-quickstart"
    JOB_NAME="my-job"
    

إنشاء بيئة تطبيقات الحاوية

تعمل بيئة Azure Container Apps ك حدود آمنة حول تطبيقات الحاوية ومهامها حتى يتمكنوا من مشاركة نفس الشبكة والتواصل مع بعضهم البعض.

  1. إنشاء مجموعة موارد باستخدام الأمر التالي.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. إنشاء بيئة تطبيقات الحاوية باستخدام الأمر التالي.

    az containerapp env create \
        --name "$ENVIRONMENT" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION"
    

إعداد قائمة انتظار تخزين

تستخدم المهمة قائمة انتظار Azure Storage لتلقي الرسائل. في هذا القسم، يمكنك إنشاء حساب تخزين و قائمة انتظار.

  1. حدد اسما لحساب التخزين الخاص بك.

    STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
    QUEUE_NAME="myqueue"
    

    استبدل <STORAGE_ACCOUNT_NAME> باسم فريد لحساب التخزين الخاص بك. يجب أن تكون أسماء حسابات التخزين فريدة داخل Azure وأن يتراوح طولها من 3 إلى 24 حرفاً وتحتوي على أرقام وأحرف صغيرة فقط.

  2. إنشاء حساب Azure Storage.

    az storage account create \
        --name "$STORAGE_ACCOUNT_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Standard_LRS \
        --kind StorageV2
    
  3. احفظ سلسلة الاتصال قائمة الانتظار في متغير.

    QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
    
  4. إنشاء قائمة انتظار الرسائل.

    az storage queue create \
        --name "$QUEUE_NAME" \
        --account-name "$STORAGE_ACCOUNT_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    

إنشاء المهمة ونشرها

لنشر المهمة، يجب أولا إنشاء صورة حاوية للوظيفة ودفعها إلى سجل. بعد ذلك، يمكنك نشر المهمة إلى بيئة Container Apps.

  1. حدد اسما لصورة الحاوية والتسجيل.

    CONTAINER_IMAGE_NAME="queue-reader-job:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    استبدل <CONTAINER_REGISTRY_NAME> باسم فريد لسجل الحاوية. يجب أن تكون أسماء سجل الحاوية فريدة داخل Azure وأن يتراوح طولها من 5 إلى 50 حرفا تحتوي على أرقام وأحرف صغيرة فقط.

  2. إنشاء سجل حاوية.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. تتوفر التعليمات البرمجية المصدر للوظيفة على GitHub. قم بتشغيل الأمر التالي لاستنساخ المستودع وإنشاء صورة الحاوية في السحابة az acr build باستخدام الأمر .

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
    

    الصورة متاحة الآن في سجل الحاوية.

  4. إنشاء وظيفة في بيئة تطبيقات الحاوية.

    az containerapp job create \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT" \
        --trigger-type "Event" \
        --replica-timeout "1800" \
        --min-executions "0" \
        --max-executions "10" \
        --polling-interval "60" \
        --scale-rule-name "queue" \
        --scale-rule-type "azure-queue" \
        --scale-rule-metadata "accountName=$STORAGE_ACCOUNT_NAME" "queueName=$QUEUE_NAME" "queueLength=1" \
        --scale-rule-auth "connection=connection-string-secret" \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --cpu "0.5" \
        --memory "1Gi" \
        --secrets "connection-string-secret=$QUEUE_CONNECTION_STRING" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \
        --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
    

    يصف الجدول التالي المعلمات الرئيسية المستخدمة في الأمر .

    المعلمة ‏‏الوصف‬
    --replica-timeout الحد الأقصى للمدة التي يمكن تنفيذها للنسخة المتماثلة.
    --min-executions الحد الأدنى لعدد عمليات تنفيذ المهام التي سيتم تشغيلها لكل فاصل زمني للاستقصاء.
    --max-executions الحد الأقصى لعدد عمليات تنفيذ المهام التي سيتم تشغيلها لكل فاصل زمني للاستقصاء.
    --polling-interval الفاصل الزمني للاستقصاء لتقييم قاعدة المقياس.
    --scale-rule-name اسم قاعدة المقياس.
    --scale-rule-type نوع قاعدة المقياس المراد استخدامها.
    --scale-rule-metadata بيانات التعريف لقاعدة المقياس.
    --scale-rule-auth مصادقة قاعدة المقياس.
    --secrets الأسرار التي يجب استخدامها للوظيفة.
    --registry-server خادم سجل الحاوية المراد استخدامه للوظيفة. بالنسبة إلى Azure Container Registry، يقوم الأمر تلقائيا بتكوين المصادقة.
    --env-vars متغيرات البيئة لاستخدامها للوظيفة.

    يحدد تكوين قاعدة المقياس مصدر الحدث المراد مراقبته. يتم تقييمه على كل فاصل زمني للاستقصاء ويحدد عدد عمليات تنفيذ الوظائف التي يجب تشغيلها. لمعرفة المزيد، راجع تعيين قواعد التحجيم.

يتم الآن إنشاء المهمة المستندة إلى الحدث في بيئة Container Apps.

تحقق من التوزيع

يتم تكوين المهمة لتقييم قاعدة المقياس كل 60 ثانية، والتي تتحقق من عدد الرسائل في قائمة الانتظار. لكل فترة تقييم، يبدأ تنفيذ مهمة جديدة لكل رسالة في قائمة الانتظار، بحد أقصى 10 عمليات تنفيذ.

للتحقق من تكوين المهمة بشكل صحيح، يمكنك إرسال بعض الرسائل إلى قائمة الانتظار، والتأكد من بدء تنفيذ المهام، وتسجيل الرسائل إلى سجلات تنفيذ المهمة.

  1. إرسال رسالة إلى قائمة الانتظار.

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. سرد عمليات تنفيذ الوظيفة.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output json
    

    نظرا لتكوين المهمة لتقييم قاعدة المقياس كل 60 ثانية، فقد يستغرق تنفيذ المهمة ما يصل إلى دقيقة كاملة لبدء تنفيذ المهمة. كرر الأمر حتى ترى تنفيذ المهمة وحالتها هي Succeeded.

  3. قم بتشغيل الأوامر التالية لمشاهدة الرسائل المسجلة. تتطلب هذه الأوامر ملحق Log analytics، لذا اقبل المطالبة بتثبيت الملحق عند الطلب.

    LOG_ANALYTICS_WORKSPACE_ID=`az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
    
    az monitor log-analytics query \
        --workspace "$LOG_ANALYTICS_WORKSPACE_ID" \
        --analytics-query "ContainerAppConsoleLogs_CL | where ContainerJobName_s == '$JOB_NAME' | order by _timestamp_d asc"
    

    ContainerAppConsoleLogs_CL حتى يكون الجدول جاهزا، يرجع الأمر خطأ: BadArgumentError: The request had some invalid properties. انتظر بضع دقائق وحاول مرة أخرى.

تلميح

هل تواجه مشكلات؟ اسمحوا لنا أن نعرف على GitHub عن طريق فتح مشكلة في Azure Container Apps repo.

تنظيف الموارد

بمجرد الانتهاء، قم بتشغيل الأمر التالي لحذف مجموعة الموارد التي تحتوي على موارد Container Apps.

تنبيه

يحذف الأمر التالي مجموعة الموارد المحددة وجميع الموارد المضمنة فيها. إذا كانت هناك موارد خارج نطاق هذا البرنامج التعليمي موجودة في مجموعة الموارد المحددة، فسيتم حذفها أيضاً.

az group delete \
    --resource-group $RESOURCE_GROUP

الخطوات التالية