التشغيل السريع: نشر تطبيق Dapr إلى Azure Container Apps باستخدام Azure CLI
يساعد Dapr (وقت تشغيل التطبيق الموزع) المطورين على بناء خدمات مصغرة مرنة وموثوقة. في هذا التشغيل السريع، ستتعلم كيفية تمكين Dapr sidecars للتشغيل جنبا إلى جنب مع تطبيقات حاوية الخدمات المصغرة. سوف تقوم بـ:
- إنشاء بيئة تطبيقات الحاوية ومخزن حالة تخزين مدونة Azure لتطبيقات الحاوية الخاصة بك.
- نشر تطبيق حاوية Python الذي ينشر الرسائل.
- نشر تطبيق حاوية Node.js يشترك في الرسائل ويستمر في تخزين الحالة.
- تحقق من التفاعل بين خدمتي microservices باستخدام مدخل Microsoft Azure.
يعكس هذا التشغيل السريع التطبيقات التي تنشرها في 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 بأذونات للوصول إلى حساب تخزين الكائن الثنائي كبير الحجم.
قم بإنشاء هوية معينة من قِبل المستخدم .
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
استرداد خصائص
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 \")
استرداد معرف الاشتراك لاشتراكك الحالي.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
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 باستخدام الهوية المدارة.
في محرر نص، قم بإنشاء ملف باسم 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 من الوصول إلى مخزن الحالة.
انتقل إلى الدليل الذي قمت بتخزين ملف 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 الخاص بك.
افتح مدخل Microsoft Azure في المستعرض وانتقل إلى حساب التخزين الخاص بك.
حدد Data Storage>Containers في القائمة اليمنى.
حدد تطبيق الحاوية.
تحقق من أنه يمكنك مشاهدة الملف المسمى
order
في الحاوية.حدد الملف.
قم بتحديد علامة التبويب تحرير .
حدد الزر تحديث لمراقبة كيفية تحديث البيانات تلقائيا.
عرض السجلات
يتم تخزين السجلات من تطبيقات الحاوية 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.