إنشاء أول Azure Functions في حاويات على Azure Arc (معاينة)

في هذه المقالة، يمكنك إنشاء تطبيق دالة يعمل في حاوية Linux ونشره في مجموعة Kubernetes الممكنة في Azure Arc من سجل حاوية. عند إنشاء الحاوية الخاصة بك، يمكنك تخصيص بيئة التنفيذ لتطبيق الوظائف الخاص بك. لتتعلم أكثر، راجعوظائف خدمات التطبيقات و تسجيل التطبيقات على Azure Arc

إشعار

دعم نشر حاوية مخصصة إلى مجموعة Kubernetes الممكنة في Azure Arc قيد المعاينة حاليا.

يمكنك أيضا نشر وظائفك إلى مجموعة Kubernetes الممكنة في Azure Arc دون إنشاء حاوية أولا. لمعرفة المزيد، راجع إنشاء دالتك الأولى على Azure Arc (معاينة)

اختيار لغة التطوير التي تستخدمها

أولا، يمكنك استخدام أدوات Azure Functions لإنشاء التعليمات البرمجية لمشروعك كتطبيق دالة في حاوية Docker باستخدام صورة أساسية ل Linux خاصة باللغة. تأكد من تحديد اللغة التي تختارها في أعلى المقالة.

تنشئ Core Tools تلقائيا Dockerfile لمشروعك الذي يستخدم أحدث إصدار من الصورة الأساسية الصحيحة للغة الوظائف الخاصة بك. يجب تحديث الحاوية بانتظام من أحدث صورة أساسية وإعادة النشر من الإصدار المحدث من الحاوية الخاصة بك. لمزيد من المعلومات، راجع إنشاء تطبيقات الوظائف المعبأة في حاويات.

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

قبل أن تبدأ، يجب أن تتوفر لديك المتطلبات التالية:

إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

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

تحتاج أيضا إلى إكمال قسم إنشاء سجل حاوية في التشغيل السريع ل Container Registry لإنشاء مثيل سجل. دون اسم خادم تسجيل الدخول المؤهل بالكامل.

إنشاء وتنشيط البيئة الظاهرية

في مجلد مناسب، شغل الأوامر التالية لإنشاء وتنشيط بيئة ظاهرية باسم .venv. تأكد من استخدام أحد إصدارات Python التي تدعمها Azure Functions.

python -m venv .venv
source .venv/bin/activate

إذا لم يثبت Python حزمة venv على توزيع Linux الخاص بك، فشغل الأمر التالي:

sudo apt-get install python3-venv

شغل جميع الأوامر اللاحقة في هذه البيئة الافتراضية النشطة.

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

في Terminal أو موجه الأوامر، قم بتشغيل الأمر التالي للغة التي اخترتها لإنشاء مشروع تطبيق وظيفي في المجلد الحالي:

func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker

في مجلد فارغ، قم بتشغيل الأمر التالي لإنشاء مشروع Functions من نموذج أصلي لـ Maven:

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker

-DjavaVersionتحدد المعلمة لوقت تشغيل الدالات إصدار Java الواجب استخدامه. استخدم -DjavaVersion=11 إذا كنت تريد تشغيل دالاتك على Java 11. عندما لا تحدد-DjavaVersion، يتم تعيين Maven افتراضًّيا على Java 8. لمزيد من المعلومات، راجع إصدارات Java.

هام

JAVA_HOMEيجب تعيين متغير البيئة إلى موقع تثبيت الإصدار الصحيح من JDK لإكمال هذه المقالة.

يطلب منك Maven القيم اللازمة لإنهاء إنشاء المشروع عند النشر. اتبع المطالبات وأدخل المعلومات التالية:

المطالبة قيمة ‏‏الوصف
groupId com.fabrikam قيمة تُعرّف المشروع الخاص بك بشكل فريد عبر جميع المشاريع، باتباع قواعد تسمية الحزمة لـ Java التالية.
artifactId fabrikam-functions قيمة تمثل اسم jar، بدون رقم إصدار.
إصدار 1.0-SNAPSHOT حدد القيمة الافتراضية.
الحزمة com.fabrikam.functions قيمة تمثل حزمة Java للتعليمات البرمجية للدالة التي تم إنشاؤها. استخدم الافتراضي.

اكتب Y أو اضغط إدخال للتأكيد.

ينشئ Maven ملفات المشروع في مجلد جديد يسمى artifactId، وهو في هذا المثال fabrikam-functions.

--docker ينشئ الخيار Dockerfile للمشروع، والذي يحدد حاوية مناسبة للاستخدام مع Azure Functions ووقت التشغيل المحدد.

انتقل إلى مجلد المشروع:

cd fabrikam-functions

استخدم الأمر التالي لإضافة دالة إلى مشروعك، حيث تكون --name الوسيطة هي الاسم الفريد لوظيفتك وتحدد الوسيطة --template مشغل الوظيفة. func new إنشاء ملف تعليمات برمجية C# في مشروعك.

func new --name HttpExample --template "HTTP trigger"

استخدم الأمر التالي لإضافة دالة إلى مشروعك، حيث تكون --name الوسيطة هي الاسم الفريد لوظيفتك وتحدد الوسيطة --template مشغل الوظيفة. func new أنشئ مجلدًا فرعيًّا يطابق اسم الدالة الذي يحتوي على ملف تهيئة باسم function.json.

func new --name HttpExample --template "HTTP trigger"

لاختبار الوظيفة محليًا، ابدأ مضيف وقت تشغيل Azure Functions المحلي في جذر مجلد المشروع.

func start  
func start  
npm install
npm start
mvn clean package  
mvn azure-functions:run

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

بعد أن ترى HttpExample نقطة النهاية مكتوبة إلى الإخراج، انتقل إلى http://localhost:7071/api/HttpExample?name=Functions. يجب أن يعرض المتصفح رسالة "مرحبًا" تردد صدى Functions، القيمة التي تم توفيرها name لمعامل الاستعلام.

اضغط على Ctrl+C (Command+C على macOS) لإيقاف المضيف.

إنشاء صورة الحاوية والتحقق محليا

(اختياري) افحص Dockerfile في جذر مجلد المشروع. يصف Dockerfile البيئة المطلوبة لتشغيل تطبيق الدالة على Linux. يمكن العثور على القائمة الكاملة للصور الأساسية المعتمدة لوظائف Azure في صفحة الصورة الأساسية لوظائف Azure.

وفي مجلد المشروع الجذر، قم بتشغيل الأمر docker build، وتوفير الاسم، azurefunctionsimage، وعلامة، v1.0.0. استبدل <DOCKER_ID> بمعرف حساب Docker Hub الخاص بك. ينشئ هذا الأمر صورة Docker للحاوية.

docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .

عند اكتمال الأمر، يمكنك تشغيل الحاوية الجديدة محليًا.

للتحقق من البنية، قم بتشغيل الصورة في حاوية محلية باستخدام الأمر docker run ، واستبدل <DOCKER_ID> مرة أخرى بمعرف حساب Docker Hub الخاص بك، وأضف وسيطة المنافذ ك -p 8080:80:

docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0

بعد بدء تشغيل الصورة في الحاوية المحلية، استعرض إلى http://localhost:8080/api/HttpExample، الذي يجب أن يعرض نفس رسالة الترحيب كما كان من قبل. لأن الدالة HTTP المشغلة التي قمت بإنشائها تستخدم تخويل مجهول، يمكنك استدعاء الدالة قيد التشغيل في الحاوية دون الحاجة إلى الحصول على مفتاح وصول. لمزيد من المعلومات، راجع مفاتيح للتخويل.

وبعد بدء تشغيل الصورة في الحاوية المحلية، استعرض إلى http://localhost:8080/api/HttpExample?name=Functions، والتي يجب أن تعرض نفس رسالة "hello" كما كان من قبل. لأن الدالة HTTP المشغلة التي قمت بإنشائها تستخدم تخويل مجهول، يمكنك استدعاء الدالة قيد التشغيل في الحاوية دون الحاجة إلى الحصول على مفتاح وصول. لمزيد من المعلومات، راجع مفاتيح للتخويل.

بعد التحقق من تطبيق الوظائف في الحاوية، اضغط على Ctrl+C (Command+C على macOS) لإيقاف التنفيذ.

نشر صورة الحاوية إلى سجل

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

يُعد Azure Container Registry خدمة تسجيل خاصة لبناء صور الحاويات والأدوات ذات الصلة وتخزينها وإدارتها. يجب استخدام خدمة تسجيل خاصة لنشر الحاويات الخاصة بك إلى خدمات Azure.

  1. استخدم هذا الأمر لتسجيل الدخول إلى مثيل السجل باستخدام بيانات اعتماد Azure الحالية:

    az acr login --name <REGISTRY_NAME>
    

    في الأمر السابق، استبدل <REGISTRY_NAME> باسم مثيل سجل الحاوية.

  2. استخدم هذا الأمر لوضع علامة على صورتك بالاسم المؤهل بالكامل لخادم تسجيل الدخول إلى السجل:

    docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 
    

    استبدل <LOGIN_SERVER> بالاسم المؤهل بالكامل لخادم تسجيل الدخول إلى السجل الخاص بك و <DOCKER_ID> بمعرف Docker الخاص بك.

  3. استخدم هذا الأمر لدفع الحاوية إلى مثيل السجل الخاص بك:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    

إنشاء بيئة App Service Kubernetes

قبل البدء، يجب إنشاء بيئة App Service Kubernetes environment من أجل نظام مجموعة Azure Arc-enabled Kubernetes.

إشعار

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

إذا لم تقم بإنشاء البيئة، فتحقق مع مسؤول نظام المجموعة.

أضف ملحقات Azure CLI

قم بتشغيل بيئة Bash في Azure Cloud Shell.

نظرًا لأن أوامر CLI هذه لم تصبح بعد جزءًا من مجموعة CLI الأساسية، أضفها باستخدام الأوامر التالية:

az extension add --upgrade --yes --name customlocation
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

إنشاء موارد Azure

قبل أن تتمكن من نشر الحاوية إلى بيئة خدمة التطبيقات الجديدة، تحتاج إلى إنشاء موردين آخرين:

  • حساب تخزين. بينما تنشئ هذه المقالة حساب تخزين، قد لا يكون هناك حاجة إلى حساب تخزين في بعض الحالات. لمزيد من المعلومات، راجع المجموعات الممكنة في Azure Arc في مقالة اعتبارات التخزين.
  • تطبيق دالة، والذي يوفر سياق تشغيل الحاوية. يعمل تطبيق الوظيفة في بيئة خدمة التطبيقات Kubernetes والخرائط لمشروع الدالة المحلية. يتيح لك تطبيق الوظيفة تجميع الوظائف كوحدة منطقية لإدارة الموارد ونشرها ومشاركتها بشكل أسهل.

إشعار

تعمل تطبيقات الوظائف في بيئة خدمة التطبيقات Kubernetes على خطة مخصصة (خدمة التطبيق). عند إنشاء تطبيق الوظائف بدون خطة موجودة، سيتم إنشاء خطة لك.

إنشاء حساب تخزين

استخدم الأمر إنشاء حساب تخزين az لإنشاء حساب تخزين للأغراض العامة في مجموعة الموارد والمنطقة:

az storage account create --name <STORAGE_NAME> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

إشعار

في بعض الحالات، قد لا يكون هناك حاجة إلى حساب تخزين. لمزيد من المعلومات، راجع المجموعات الممكنة في Azure Arc في مقالة اعتبارات التخزين.

في المثال السابق، استبدل <STORAGE_NAME> باسم مناسب لك وفريد في تخزين Azure. يجب أن تحتوي الأسماء على ثلاثة إلى 24 حرفا من الأرقام والأحرف الصغيرة فقط. يحدد Standard_LRS حساب للأغراض العامة، الذي هو مدعوم من قبل الدالات. --locationالقيمة هي منطقة Azure قياسية.

إنشاء تطبيق الدالة

تشغيل الأمر az functionapp إنشاء لإنشاء تطبيق دالة جديدة في البيئة.

az functionapp create --name <APP_NAME> --custom-location <CUSTOM_LOCATION_ID> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> 

في هذا المثال، استبدل <CUSTOM_LOCATION_ID>معرف الموقع المخصص الذي حددته لبيئة App Service Kubernetes. أيضا، استبدل <STORAGE_NAME> باسم الحساب الذي استخدمته في الخطوة السابقة، <APP_NAME> باسم فريد عالميا، أو <DOCKER_ID> <LOGIN_SERVER> بمعرف حساب Docker Hub أو خادم سجل الحاوية، على التوالي. عند النشر من سجل حاوية مخصص، يشير اسم الصورة إلى عنوان URL للسجل.

عند إنشاء تطبيق الوظيفة لأول مرة، فإنه يسحب الصورة الأولية من Docker Hub.

تعيين إعدادات التطبيق المطلوبة

قم بتشغيل الأوامر التالية لإنشاء إعداد تطبيق لسلسلة اتصال حساب التخزين:

storageConnectionString=$(az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv)
az functionapp config appsettings set --name <app_name> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=$storageConnectionString

ينبغي تشغيل هذه التعليمات البرمجية إما في Cloud Shell أو في Bash على الكمبيوتر الشخصي. استبدل <STORAGE_NAME> باسم حساب التخزين واسم تطبيق <APP_NAME> الدالة.

استدعاء الدالة في Azure

لأن الوظيفة تستخدم مشغل HTTP، يمكنك استدعاؤها عن طريق إجراء طلب HTTP إلى عنوان URL الخاص به في المتصفح أو باستخدام أداة مثل curl.

نسخ URL Invoke الكاملة المعروضة في نتيجة أمر النشر في شريط عناوين المتصفح، مع إرفاق معلمة الاستعلام?name=Functions. يجب أن يعرض المتصفح نتيجة مشابهة كما هو الحال عند تشغيل الدالة محلياً.

يُشغل مخرج الدالة على Azure في المتصفح

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

إذا كنت ترغب في متابعة العمل مع Azure Function باستخدام الموارد التي قمت بإنشائها في هذه المقالة، يمكنك ترك جميع هذه الموارد في مكانها.

عند الانتهاء من العمل مع نشر تطبيق الوظائف هذا، احذف AzureFunctionsContainers-rg مجموعة الموارد لتنظيف جميع الموارد في تلك المجموعة:

az group delete --name AzureFunctionsContainers-rg

يؤدي هذا إلى إزالة الموارد التي تم إنشاؤها في هذه المقالة فقط. تظل بيئة Azure Arc الأساسية في مكانها.

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