مشاركة عبر


التشغيل السريع: نشر تطبيق Dapr إلى Azure Container Apps باستخدام Azure CLI

يساعد Dapr (وقت تشغيل التطبيق الموزع) المطورين على بناء خدمات مصغرة مرنة وموثوقة. في هذا التشغيل السريع، ستتعلم كيفية تمكين Dapr sidecars للتشغيل جنبا إلى جنب مع تطبيقات حاوية الخدمات المصغرة. سوف تقوم بـ:

  • إنشاء بيئة تطبيقات الحاوية ومخزن حالة تخزين مدونة Azure لتطبيقات الحاوية الخاصة بك.
  • نشر تطبيق حاوية Python الذي ينشر الرسائل.
  • نشر تطبيق حاوية Node.js يشترك في الرسائل ويستمر في تخزين الحالة.
  • تحقق من التفاعل بين خدمتي microservices باستخدام مدخل Microsoft Azure.

رسم تخطيطي للبنية ل Dapr مرحبًا بالعالم الخدمات المصغرة على Azure Container Apps

يعكس هذا التشغيل السريع التطبيقات التي تنشرها في Dapr مفتوح المصدر مرحبًا بالعالم التشغيل السريع.

الإعداد

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

az login

للتأكد من تشغيل أحدث إصدار من CLI، قم بتشغيل أمر الترقية.

az upgrade

بعد ذلك، قم بتثبيت أو تحديث ملحق Azure Container Apps ل CLI.

إذا تلقيت أخطاء حول المعلمات المفقودة عند تشغيل az containerapp الأوامر في Azure CLI أو cmdlets من Az.App الوحدة النمطية في Azure PowerShell، فتأكد من تثبيت أحدث إصدار من ملحق Azure Container Apps.

az extension add --name containerapp --upgrade

إشعار

بدءا من مايو 2024، لم تعد ملحقات Azure CLI تمكن ميزات المعاينة بشكل افتراضي. للوصول إلى ميزات معاينة تطبيقات الحاوية، قم بتثبيت ملحق Container Apps باستخدام --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

الآن بعد تثبيت الملحق أو الوحدة النمطية Microsoft.App الحالية، قم بتسجيل مساحات الأسماء و Microsoft.OperationalInsights .

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

تعيين متغيرات البيئة

تعيين متغيرات البيئة التالية. <PLACEHOLDERS> استبدل بالقيم الخاصة بك:

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

إنشاء مجموعة موارد Azure

إنشاء مجموعة موارد لتنظيم الخدمات المتعلقة بنشر تطبيق الحاوية.

az group create \
  --name $RESOURCE_GROUP \
  --location "$LOCATION"

إنشاء بيئة

يمكن لبيئة Azure Container Apps إنشاء حدود آمنة حول مجموعة من تطبيقات الحاويات. يتم توزيع Container Apps المنتشرة في نفس البيئة في نفس الشبكة الظاهرية وكتابة سجلات إلى نفس مساحة عمل Log Analytics.

لإنشاء البيئة، قم بتشغيل الأمر التالي:

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

قم بإعداد حالة التخزين

2. قم بإنشاء حساب تخزين Azure Blob

مع نشر البيئة، انشر حساب Azure Blob Storage الذي يستخدمه تطبيق حاوية Node.js لتخزين البيانات. قبل نشر الخدمة، اختر اسما لحساب التخزين. يجب أن تكون أسماء حسابات التخزين فريدة داخل Azure ذات طول من 3 إلى 24 حرفاً ويجب أن تحتوي على أرقام وأحرف صغيرة فقط.

STORAGE_ACCOUNT_NAME="<storage account name>"

استخدم الأمر التالي لإنشاء حساب Azure Storage.

az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

تكوين هوية معينة من قبل المستخدم لتطبيق العقدة

بينما تدعم Container Apps كلا من الهوية المدارة المعينة من قبل المستخدم والمخصصة من قبل النظام، توفر الهوية المعينة من قبل المستخدم تطبيق Node.js الذي يدعم Dapr بأذونات للوصول إلى حساب تخزين الكائن الثنائي كبير الحجم.

  1. قم بإنشاء هوية معينة من قِبل المستخدم .

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. استرداد خصائص principalId و id وتخزينها في المتغيرات.

    PRINCIPAL_ID=$(az identity show -n "nodeAppIdentity" --resource-group     $RESOURCE_GROUP --query principalId | tr -d \")
    IDENTITY_ID=$(az identity show -n "nodeAppIdentity" --resource-group     $RESOURCE_GROUP --query id | tr -d \")
    CLIENT_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP     --query clientId | tr -d \")
    
  3. استرداد معرف الاشتراك لاشتراكك الحالي.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Storage Blob Data Contributor تعيين الدور إلى الهوية المعينة من قبل المستخدم.

    az role assignment create --assignee $PRINCIPAL_ID  \
    --role "Storage Blob Data Contributor" \
    --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/    Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"
    

تكوين مكون مخزن الحالة

بينما لديك خيارات متعددة للمصادقة على الموارد الخارجية عبر Dapr. يستخدم هذا المثال مخزن حالة يستند إلى Azure، بحيث يمكنك توفير الوصول المباشر من تطبيق Node.js إلى مخزن Blob باستخدام الهوية المدارة.

  1. في محرر نص، قم بإنشاء ملف باسم statestore.yaml مع الخصائص التي تم الحصول عليها من الخطوات السابقة.

    # statestore.yaml for Azure Blob storage component
    componentType: state.azure.blobstorage
    version: v1
    metadata:
      - name: accountName
        value: "<STORAGE_ACCOUNT_NAME>"
      - name: containerName
        value: mycontainer
      - name: azureClientId
        value: "<MANAGED_IDENTITY_CLIENT_ID>"
    scopes:
      - nodeapp
    

    يساعد هذا الملف في تمكين تطبيق Dapr من الوصول إلى مخزن الحالة.

  2. انتقل إلى الدليل الذي قمت بتخزين ملف yaml فيه وقم بتشغيل الأمر التالي لتكوين مكون Dapr في بيئة Container Apps.

    az containerapp env dapr-component set \
        --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --dapr-component-name statestore \
        --yaml statestore.yaml
    

نشر تطبيق Node.js

az containerapp create \
  --name nodeapp \
  --resource-group $RESOURCE_GROUP \
  --user-assigned $IDENTITY_ID \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-node:latest \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-id nodeapp \
  --dapr-app-port 3000 \
  --env-vars 'APP_PORT=3000'

إذا كنت تستخدم Azure Container Registry، فضمن العلامة --registry-server <REGISTRY_NAME>.azurecr.io في الأمر .

بشكل افتراضي، يتم سحب الصورة من Docker Hub.

نشر تطبيق Python

az containerapp create \
  --name pythonapp \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-python:latest \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-id pythonapp

إذا كنت تستخدم Azure Container Registry، فضمن العلامة --registry-server <REGISTRY_NAME>.azurecr.io في الأمر .

تحقق من النتائج

تأكيد استمرار الحالة الناجحة

يمكنك التأكد من أن الخدمات تعمل بشكل صحيح عن طريق عرض البيانات في حساب تخزين Azure الخاص بك.

  1. افتح مدخل Microsoft Azure في المستعرض وانتقل إلى حساب التخزين الخاص بك.

  2. حدد Data Storage>Containers في القائمة اليمنى.

  3. حدد تطبيق الحاوية.

  4. تحقق من أنه يمكنك مشاهدة الملف المسمى order في الحاوية.

  5. حدد الملف.

  6. قم بتحديد علامة التبويب تحرير .

  7. حدد الزر تحديث لمراقبة كيفية تحديث البيانات تلقائيا.

عرض السجلات

يتم تخزين السجلات من تطبيقات الحاوية ContainerAppConsoleLogs_CL في الجدول المخصص في مساحة عمل Log Analytics. يمكنك عرض السجلات من خلال مدخل Microsoft Azure أو عبر CLI. قد يكون هناك تأخير صغير في البداية حتى يظهر الجدول في مساحة العمل.

عرض السجلات باستخدام سطر الأوامر باستخدام أمر CLI التالي.

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`

az monitor log-analytics query \
  --workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
  --analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'nodeapp' and (Log_s contains 'persisted' or Log_s contains 'order') | project ContainerAppName_s, Log_s, TimeGenerated | sort by TimeGenerated | take 5" \
  --out table

يوضح الإخراج التالي نوع الاستجابة المتوقعة من الأمر CLI.

ContainerAppName_s    Log_s                            TableName      TimeGenerated
--------------------  -------------------------------  -------------  ------------------------
nodeapp               Got a new order! Order ID: 61    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Got a new order! Order ID: 62    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Got a new order! Order ID: 63    PrimaryResult  2021-10-22T22:45:44.618Z

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

نظرا لأن pythonapp إجراء المكالمات باستمرار nodeapp مع الرسائل التي تستمر في مخزن الحالة الذي تم تكوينه، فمن المهم إكمال خطوات التنظيف هذه لتجنب العمليات الجارية القابلة للفوترة.

إذا كنت ترغب في حذف الموارد التي تم إنشاؤها كجزء من هذه المعاينة، فقم بتشغيل الأمر التالي.

تنبيه

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

az group delete --resource-group $RESOURCE_GROUP

تلميح

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

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