إنشاء أول Azure Functions في حاويات
في هذه المقالة، يمكنك إنشاء تطبيق دالة يعمل في حاوية Linux ونشره في Azure Functions.
يتطلب نشر التعليمات البرمجية للدالة إلى Azure Functions في حاوية استضافة خطة Premium أو خطة مخصصة (خدمة التطبيقات). يؤدي إكمال هذه المقالة إلى تكاليف بضعة دولارات أمريكية في حساب Azure الخاص بك، والتي يمكنك تقليلها عن طريق تنظيف الموارد عند الانتهاء.
تتضمن الخيارات الأخرى لنشر حاوية تطبيق الوظائف إلى Azure ما يلي:
Azure Container Apps: لمعرفة المزيد، راجع نشر حاوية إلى تطبيقات Azure Container.
Azure Arc (قيد المعاينة حاليا): لمعرفة المزيد، راجع نشر حاوية إلى Azure Arc.
اختيار لغة التطوير التي تستخدمها
أولا، يمكنك استخدام أدوات Azure Functions لإنشاء التعليمات البرمجية لمشروعك كتطبيق دالة في حاوية Docker باستخدام صورة أساسية ل Linux خاصة باللغة. تأكد من تحديد اللغة التي تختارها في أعلى المقالة.
تنشئ Core Tools تلقائيا Dockerfile لمشروعك الذي يستخدم أحدث إصدار من الصورة الأساسية الصحيحة للغة الوظائف الخاصة بك. يجب تحديث الحاوية بانتظام من أحدث صورة أساسية وإعادة النشر من الإصدار المحدث من الحاوية الخاصة بك. لمزيد من المعلومات، راجع إنشاء تطبيقات الوظائف المعبأة في حاويات.
المتطلبات الأساسية
قبل أن تبدأ، يجب أن تتوفر لديك المتطلبات التالية:
تثبيت Azure Functions Core Tools الإصدار 4.0.5198 أو إصدار أحدث.
- تثبيت Azure Functions Core Tools الإصدار 4.x.
- تثبيت إصدار من Node.js التي تدعمها Azure Functions.
- تثبيت إصدار Python الذي تدعمه Azure Functions.
قم بتثبيت إصدار من Java Developer Kit المدعوم من Azure Functions.
تثبيت Apache Maven الإصدار 3.0 أو أعلى.
- الإصدار 2.4 من Azure CLI أو إصدار أحدث.
إذا لم يكن لديك اشتراك في 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.
استخدم هذا الأمر لتسجيل الدخول إلى مثيل السجل باستخدام بيانات اعتماد Azure الحالية:
az acr login --name <REGISTRY_NAME>
في الأمر السابق، استبدل
<REGISTRY_NAME>
باسم مثيل سجل الحاوية.استخدم هذا الأمر لوضع علامة على صورتك بالاسم المؤهل بالكامل لخادم تسجيل الدخول إلى السجل:
docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
استبدل
<LOGIN_SERVER>
بالاسم المؤهل بالكامل لخادم تسجيل الدخول إلى السجل الخاص بك و<DOCKER_ID>
بمعرف Docker الخاص بك.استخدم هذا الأمر لدفع الحاوية إلى مثيل السجل الخاص بك:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
إنشاء موارد Azure الداعمة للدالة
قبل أن تتمكن من نشر الحاوية الخاصة بك إلى Azure، تحتاج إلى إنشاء ثلاثة موارد:
- مجموعة الموارد، وهي حاوية منطقية للموارد ذات الصلة.
- حساب تخزين، والذي يستخدم للحفاظ على حالة دالاتك والمعلومات الأخرى المتعلقة بها.
- تطبيق الوظيفة، الذي يوفر البيئة لتنفيذ التعليمة البرمجية للوظيفة. يقوم تطبيق الدالة بالتعيين إلى مشروع الدالة المحلي الخاص بك ويسمح لك بتجميع الدالات الخاصة بك كوحدة منطقية لتيسير إدارة الموارد، ونشرها، ومشاركتها.
استخدم الأوامر التالية لإنشاء هذه العناصر. كل من Azure CLI وPowerShell مدعوم. لإنشاء موارد Azure باستخدام Azure PowerShell، تحتاج أيضا إلى الوحدة النمطية Az PowerShell، الإصدار 5.9.0 أو أحدث.
وإذا لم تكن قد فعلت ذلك بالفعل، فسجل الدخول إلى Azure.
az login
az login
يسجل لك الأمر الدخول إلى حساب Azure الخاص بك.إنشاء مجموعة موارد تسمى
AzureFunctionsContainers-rg
في المنطقة التي اخترتها.az group create --name AzureFunctionsContainers-rg --location <REGION>
az group create
يقوم الأمر بإنشاء مجموعة موارد. في الأمر أعلاه، استبدل<REGION>
بمنطقة قريبة منك، باستخدام رمز منطقة متاح يتم إرجاعه من الأمر az account list-locations.قم بإنشاء حساب تخزين للأغراض العامة في resourceGroup والمنطقة الخاصة بك.
az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
az storage account create
يقوم الأمر بإنشاء حساب التخزين.في المثال السابق، استبدل
<STORAGE_NAME>
باسم مناسب لك وفريد في تخزين Azure. يجب أن تحتوي أسماء التخزين على 3 إلى 24 حرفًا من الأرقام والأحرف الصغيرة فقط. يحددStandard_LRS
حساب للأغراض العامة، مدعوم من قبل الدالات.استخدم الأمر لإنشاء خطة مميزة لدالات Azure
myPremiumPlan
المسماة في طبقة التسعير Elastic Premium 1 (--sku EP1
) ، في الحاوية الخاصة بك، وفي<REGION>
حاوية Linux (--is-linux
).az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
نحن نستخدم الخطة المميزة هنا، والتي يمكن أن تتدرج حسب الحاجة. ولمعرفة المزيد حول الاستضافة، راجع مقارنة خطط استضافة Azure Functions. ولمزيد من المعلومات حول كيفية حساب التكاليف، راجع صفحة تسعير الوظائف.
يقوم الأمر أيضا بإنشاء مثيل Azure Application Insights مقترن في نفس مجموعة الموارد، والتي يمكنك من خلالها مراقبة تطبيق الوظائف وعرض السجلات. للمزيد من المعلومات، راجع مراقبة دوال Azure. لا يتحمل المثيل أي تكاليف حتى تقوم بتنشيطه.
إنشاء وتهيئة تطبيق دالة على Azure باستخدام الصورة
يدير تطبيق الوظائف على Azure تنفيذ وظائفك في خطة استضافة Azure Functions. في هذا القسم، يمكنك استخدام موارد Azure من القسم السابق لإنشاء تطبيق دالة من صورة في سجل حاوية وتكوينه باستخدام سلسلة الاتصال إلى Azure Storage.
إنشاء تطبيق دالة باستخدام الأمر التالي، اعتمادا على سجل الحاوية الخاص بك:
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD>
في هذا المثال، استبدل
<STORAGE_NAME>
بالاسم الذي استخدمته في القسم السابق لحساب التخزين. أيضا، استبدل<APP_NAME>
باسم فريد عمومي مناسب لك و<DOCKER_ID>
أو<LOGIN_SERVER>
بمعرف حساب Docker Hub أو خادم سجل الحاوية، على التوالي. عند النشر من سجل حاوية مخصص، يشير اسم الصورة إلى عنوان URL للسجل.عند إنشاء تطبيق الوظيفة لأول مرة، فإنه يسحب الصورة الأولية من Docker Hub. يمكنك أيضا تمكين النشر المستمر إلى Azure من سجل الحاوية.
تلميح
يمكنك استخدام
DisableColor
الإعداد في ملف host.json لمنع أحرف التحكم ANSI من كتابتها إلى سجلات الحاوية.استخدم الأمر التالي للحصول على سلسلة الاتصال لحساب التخزين الذي قمت بإنشائه:
az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
يتم إرجاع سلسلة الاتصال لحساب التخزين باستخدام
az storage account show-connection-string
الأمر .استبدل
<STORAGE_NAME>
باسم حساب التخزين الذي قمت بإنشائه مبكرًا.استخدم هذا الأمر لإضافة الإعداد إلى تطبيق الوظائف:
az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
az functionapp config appsettings set
يقوم الأمر بإنشاء الإعداد.في هذا الأمر، استبدل
<APP_NAME>
باسم تطبيق الدالة الخاصة بك<CONNECTION_STRING>
وسلسلة الاتصال من الخطوة السابقة. يجب أن يكون الاتصال سلسلة ترميز طويلة تبدأ بـDefaultEndpointProtocol=
.يمكن للدالة الآن استخدام سلسلة الاتصال هذه للوصول إلى حساب التخزين.
التحقق من دالاتك على Azure
مع نشر الصورة إلى تطبيق الوظائف في Azure، يمكنك الآن استدعاء الدالة من خلال طلبات HTTP.
قم بتشغيل الأمر التالي
az functionapp function show
للحصول على عنوان URL للدالة الجديدة:az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate
استبدل
<APP_NAME>
باسم تطبيق الدالة الخاص بك.
- استخدم عنوان URL الذي حصلت عليه للتو لاستدعاء نقطة نهاية الدالة
HttpExample
، مع إلحاق سلسلة?name=Functions
الاستعلام .
- استخدم عنوان URL الذي حصلت عليه للتو لاستدعاء نقطة نهاية الدالة
HttpExample
.
عند الانتقال إلى عنوان URL هذا، يجب أن يعرض المستعرض إخراجًا مشابهًا لما حدث عندما قمت بتشغيل الوظيفة محليًا.
تنظيف الموارد
إذا كنت ترغب في متابعة العمل مع Azure Function باستخدام الموارد التي قمت بإنشائها في هذه المقالة، يمكنك ترك جميع هذه الموارد في مكانها. نظرًا لأنك أنشأت خطة متميزة لدالات Azure، فسوف تتكبد دولارًا أو دولارين يوميًّا في التكاليف الجارية.
لتجنب التكاليف الجارية، احذف AzureFunctionsContainers-rg
مجموعة الموارد لتنظيف كافة الموارد في تلك المجموعة:
az group delete --name AzureFunctionsContainers-rg