إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
في هذه المقالة، يمكنك استخدام أدوات سطر الأوامر المحلية لإنشاء دالة تستجيب لطلبات HTTP. بعد التحقق من التعليمات البرمجية محليا، يمكنك توزيعها إلى خطة استضافة استهلاك Flex بلا خادم في دالات Azure.
يتطلب إكمال هذا التشغيل السريع تكلفة صغيرة تبلغ بضعة سنتات أمريكية أو أقل في حساب Azure الخاص بك.
تأكد من تحديد لغة التطوير المفضلة لديك في أعلى المقالة.
Important
دعم Go ل دالات Azure حاليا في المعاينة العامة. أثناء المعاينة، تدعم تطبيقات وظائف Go فقط على خطة Flex Consumption.
Prerequisites
- حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
-
مجموعة مطوري Java 17
- إذا كنت تستخدم إصدارا آخر مدعوما من Java، يجب تحديث ملف pom.xml للمشروع.
-
JAVA_HOMEيجب تعيين متغير البيئة إلى موقع تثبيت الإصدار الصحيح من Java Development Kit (JDK).
- أباتشي مافن 3.8.x
اذهب إلى 1.24 أو أبعد.
دالات Azure Core Tools إصدار
4.12أو أحدث. قم بتشغيلfunc --versionالنسخة المثبتة التي قمت بها للتحقق من ذلك.Azure CLI الإصدار
2.87.0أو أحدث. قم بتشغيلaz versionالنسخة المثبتة التي قمت بها للتحقق من ذلك.
- سلسلة أدوات Rust باستخدام rustup. يمكنك استخدام أمر
rustc --versionللتحقق من الإصدار الخاص بك.
-
jqمعالج JSON سطر الأوامر، المستخدم لتحليل إخراج JSON، وهو متاح أيضا في Azure Cloud Shell.
تثبيت الأدوات الأساسية لوظائف Azure
تعتمد طريقة التثبيت الموصى بها ل Core Tools على نظام تشغيل جهاز التطوير المحلي الخاص بك.
هناك طريقتان رئيسيتان لتثبيت أحدث إصدار من Core Tools على Windows هما:
| طريقة التثبيت | الأفضل بالنسبة إلى... | تثبيت الموقع/الأمر |
|---|---|---|
| مثبت Windows (MSI) | تطوير Visual Studio أو سطر الأوامر بدون Node.js | • 64-بت (موصى به) • 32-بت |
npm الحزمة |
تطوير تعليمة Visual Studio برمجية (المستخدم في إضافة دالات Azure للتحديثات) | • NPM: npm i -g azure-functions-core-tools@4 --unsafe-perm true• شوكولاتة: choco install azure-functions-core-tools |
اعتبارات عند التركيب:
- اختر أفضل طريقة بناء على بيئة التطوير المحلية لديك والتزم بهذه الطريقة للتحديثات.
- يقوم امتداد تعليمة Visual Studio برمجية ل دالات Azure بتثبيت وصيانة Core Tools باستخدام
npm. - إذا كنت قد استخدمت MSI سابقا لتثبيت Core Tools على Windows، قم بإزالته من إضافة إزالة البرامج قبل التثبيت باستخدام تعليمة Visual Studio برمجية للتطوير، الذي يفضل
npm. تثبيت كلاهما يسبب تعارضات في الإصدارات لأن MSI له الأولوية على PATH. للتحقق مما لديك، استخدمwhere funcفي محطة طرية. - لتثبيت Core Tools على نظام ويندوز الفرعي للينكس (WSL)، اتبع التعليمات في تبويب لينكس.
لمزيد من المعلومات، راجع ملف readme الخاص بالأدوات الأساسية.
إنشاء وتنشيط البيئة الظاهرية
في مجلد مناسب، شغل الأوامر التالية لإنشاء وتنشيط بيئة ظاهرية باسم .venv. تأكد من استخدام أحد إصدارات Python التي تدعمها دالات Azure.
python -m venv .venv
source .venv/bin/activate
إذا لم يثبت Python حزمة venv على توزيع Linux الخاص بك، فشغل الأمر التالي:
sudo apt-get install python3-venv
شغل جميع الأوامر اللاحقة في هذه البيئة الافتراضية النشطة.
إنشاء مشروع تعليمة برمجية محلية ودالة
في دالات Azure، مشروع الكود الخاص بك هو تطبيق يحتوي على وظيفة أو أكثر فردية تستجيب كل منها لمحفز محدد. تشترك جميع الدالات في مشروع في نفس التكوينات ويتم نشرها كوحدة إلى Azure. في هذا القسم، يمكنك إنشاء مشروع تعليمة برمجية يحتوي على دالة واحدة.
شغل
func initالأمر لإنشاء مشروع دوال Go:func init MyGoFunctionApp --worker-runtime goينشئ هذا الأمر مجلد مشروع يسمى
MyGoFunctionAppيحتوي على الملفات التالية:ملف Description host.jsonإعداد المضيف لتطبيق الوظائف. local.settings.jsonالإعدادات المستخدمة عند التشغيل محليا. main.goنقطة دخول مع دالة مفعلة عبر HTTP عينة. go.modاذهب إلى ملف الوحدة لإدارة الاعتماديات. go.sumاذهب إلى ملف التحقق من الوحدة. انتقل إلى مجلد المشروع:
cd MyGoFunctionAppمفتوح
main.goلمراجعة الكود المولد. يحتوي على وظيفة نموذجية يتم تفعيلها بواسطة HTTP:package main import ( "log" "net/http" "github.com/azure/azure-functions-golang-worker/sdk" "github.com/azure/azure-functions-golang-worker/worker" ) // HTTPTriggerHandler handles standard HTTP requests func HTTPTriggerHandler(w http.ResponseWriter, r *http.Request) { log.Printf("Processing HTTP Trigger for %s", r.URL.Path) w.WriteHeader(http.StatusOK) w.Write([]byte("Hello from Go Worker!")) } func main() { app := sdk.FunctionApp() app.HTTP("hello", HTTPTriggerHandler, sdk.WithMethods("GET", "POST"), sdk.WithAuth("anonymous"), ) worker.Start(app) }تستخدم دوال Go الأنواع القياسية
net/http(http.ResponseWriterو*http.Request) لمشغلات HTTP. يتم تسجيل الوظائف باستخدامmain()مجموعة تطوير تطوير جو وخيارات الوظائف الخاصة ب "جو وركر"، ولاfunction.jsonتوجد حاجة لملفات.
في terminal أو موجه الأوامر، قم بتشغيل هذا
func initالأمر لإنشاء مشروع تطبيق دالة في المجلد الحالي:func init --worker-runtime dotnet-isolated
في terminal أو موجه الأوامر، قم بتشغيل هذا
func initالأمر لإنشاء مشروع تطبيق دالة في المجلد الحالي:func init --worker-runtime node --language javascript
في terminal أو موجه الأوامر، قم بتشغيل هذا
func initالأمر لإنشاء مشروع تطبيق دالة في المجلد الحالي:func init --worker-runtime powershell
في terminal أو موجه الأوامر، قم بتشغيل هذا
func initالأمر لإنشاء مشروع تطبيق دالة في المجلد الحالي:func init --worker-runtime python
في terminal أو موجه الأوامر، قم بتشغيل هذا
func initالأمر لإنشاء مشروع تطبيق دالة في المجلد الحالي:func init --worker-runtime node --language typescript
في terminal أو موجه الأوامر، قم بتشغيل هذا
func initالأمر لإنشاء مشروع تطبيق دالة في المجلد الحالي:func init --worker-runtime custom
في مجلد فارغ، قم بتشغيل هذا
mvnالأمر لإنشاء مشروع التعليمات البرمجية من نموذج أصلي دالات Azure Maven:mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=17Important
- استخدم
-DjavaVersion=11إذا كنت تريد تشغيل دالاتك على Java 11. لمعرفة المزيد، راجع إصدارات Java. - قم بتعيين
JAVA_HOMEمتغير البيئة إلى موقع تثبيت النسخة الصحيحة من JDK لإكمال هذا المقال.
- استخدم
يطلب منك Maven القيم اللازمة لإنهاء إنشاء المشروع عند النشر.
قم بتوفير القيم التالية عند مطالبتك:Prompt Value Description groupId com.fabrikamقيمة تُعرّف المشروع الخاص بك بشكل فريد عبر جميع المشاريع، باتباع قواعد تسمية الحزمة لـ Java التالية. artifactId fabrikam-functionsقيمة تمثل اسم jar، بدون رقم إصدار. version 1.0-SNAPSHOTاختر القيمة الافتراضية. package com.fabrikamقيمة تمثل حزمة Java للتعليمات البرمجية للدالة التي تم إنشاؤها. استخدم الافتراضي. اكتب
Yأو اضغط إدخال للتأكيد.يقوم Maven بإنشاء ملفات المشروع في مجلد جديد باسم artifactId ، وهو في هذا المثال
fabrikam-functions.انتقل إلى مجلد المشروع:
cd fabrikam-functionsيمكنك مراجعة التعليمات البرمجية التي تم إنشاؤها بواسطة القالب لوظيفة مشغل HTTP الجديدة في Function.java في دليل المشروع \src\main\java\com\fabrikam .
استخدم هذا
func newالأمر لإضافة دالة إلى مشروعك:func new --name HttpExample --template "HTTP trigger" --authlevel "function"تتم إضافة ملف تعليمة برمجية جديد إلى مشروعك. في هذه الحالة، الوسيطة
--nameهي الاسم الفريد للدالة (HttpExample) وتحدد--templateالوسيطة مشغل HTTP.
يحتوي المجلد الجذر للمشروع على ملفات متنوعة للمشروع ، بما في ذلك ملفات التكوينات المسماة local.settings.json و host.json. نظرا لأن local.settings.json يمكن أن تحتوي على أسرار تم تنزيلها من Azure، يتم استبعاد الملف من التحكم في المصدر بشكل افتراضي في ملف .gitignore
إنشاء وبناء دالتك
يعلن ملف function.json في مجلد HttpExample عن دالة مشغل HTTP. يمكنك إكمال الدالة عن طريق إضافة معالج وتحويله برمجيًا إلى قابل للتنفيذ.
اضغط على Ctrl + Shift + ' أو حدد New Terminal من قائمة Terminal لفتح محطة طرفية متكاملة جديدة في VS Code.
في جذر تطبيق الدالة (نفس المجلد مثل host.json)، قم بتهيئة مشروع Rust المسمى
handler.cargo init --name handlerفي Cargo.toml، أضف التبعيات التالية الضرورية لإكمال هذا التشغيل السريع. يستخدم المثال إطار عمل خادم ويب warp.
[dependencies] warp = "0.3" tokio = { version = "1", features = ["rt", "macros", "rt-multi-thread"] }في src/main.rs، أضف التعليمات البرمجية التالية واحفظ الملف. هذا هو معالج Rust المخصص لديك.
use std::collections::HashMap; use std::env; use std::net::Ipv4Addr; use warp::{http::Response, Filter}; #[tokio::main] async fn main() { let example1 = warp::get() .and(warp::path("api")) .and(warp::path("HttpExample")) .and(warp::query::<HashMap<String, String>>()) .map(|p: HashMap<String, String>| match p.get("name") { Some(name) => Response::builder().body(format!("Hello, {}. This HTTP triggered function executed successfully.", name)), None => Response::builder().body(String::from("This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.")), }); let port_key = "FUNCTIONS_CUSTOMHANDLER_PORT"; let port: u16 = match env::var(port_key) { Ok(val) => val.parse().expect("Custom Handler port is not a number!"), Err(_) => 3000, }; warp::serve(example1).run((Ipv4Addr::LOCALHOST, port)).await }قم بالتحويل البرمجي لملف ثنائي للمعالج المخصص لديك. ملف قابل للتنفيذ يسمى
handler(handler.exeعلى Windows) هو الإخراج في المجلد الجذر لتطبيق الوظائف.cargo build --release cp target/release/handler .
تكوين تطبيق وظيفتك
يجب تكوين مضيف الدالة لتشغيل ثنائي المعالج المخصص لديك عند بدء تشغيله.
افتح host.json.
في
customHandler.descriptionالقسم ، قم بتعيين قيمةdefaultExecutablePathإلىhandler(في Windows، قم بتعيينها إلىhandler.exe).في
customHandlerالقسم ، أضف خاصية باسمenableForwardingHttpRequestواضبط قيمتها علىtrue. بالنسبة للوظائف التي تتكون من مشغل HTTP فقط، يبسط هذا الإعداد البرمجة من خلال السماح لك بالعمل مع طلب HTTP نموذجي بدلا من حمولة طلب المعالج المخصص.تأكد من أن
customHandlerالمقطع يبدو مثل هذا المثال. حفظ الملف."customHandler": { "description": { "defaultExecutablePath": "handler", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest": true }
تم تكوين تطبيق الدالة لبدء المعالج المخصص القابل للتنفيذ.
تشغيل الدالة محليًا
تحقق من الدالة الجديدة عن طريق تشغيل المشروع محليا واستدعاء نقطة نهاية الدالة.
استخدم هذا الأمر لبدء مضيف وقت تشغيل دالات Azure المحلي في جذر مجلد المشروع:
func startnpm install npm startmvn clean package mvn azure-functions:runنحو نهاية المخرج، تظهر الأسطر التالية:
... Now listening on: http://0.0.0.0:7071 Application started. Press Ctrl+C to shut down. Http Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample ...نحو نهاية المخرج، يتم عرض نقطة نهاية HTTP لوظيفتك:
Functions: hello: [GET,POST] http://localhost:7071/api/helloاتصل بنقطة نهاية الدالة للتحقق من عملها:
انسخ عنوان URL لوظيفتك
HttpExampleمن هذا المخرج إلى متصفح وتصفح إلى رابط الدالة. يجب أن تتلقى ردا ناجحا برسالة "مرحبا بالعالم".Note
نظرا لأن تفويض مفتاح الوصول غير مطبق عند التشغيل محليا، فإن رابط الوظيفة المرتجع لا يتضمن قيمة مفتاح الوصول ولا تحتاجه لاستدعاء وظيفتك.
مع تشغيل الوظيفة محليا، افتح متصفح وانتقل إلى الرابط التالي:
http://localhost:7071/api/helloيجب أن تشاهد الاستجابة التالية:
Hello from Go Worker!عند الانتهاء ، استخدم Ctrl+C واختر
yإيقاف مضيف الوظائف.
إنشاء موارد Azure الداعمة للدالة
قبل أن تتمكن من نشر التعليمات البرمجية للدالة إلى Azure، تحتاج إلى إنشاء هذه الموارد:
- مجموعة موارد، وهي حاوية منطقية للموارد ذات الصلة.
- حساب تخزين افتراضي، يتم استخدامه من قبل مضيف الوظائف للحفاظ على الحالة والمعلومات الأخرى حول وظائفك.
- هوية مدارة يعينها المستخدم، والتي يستخدمها مضيف الوظائف للاتصال بحساب التخزين الافتراضي.
- تطبيق الوظيفة، الذي يوفر البيئة لتنفيذ التعليمة البرمجية للوظيفة. يقوم تطبيق الدالة بالتعيين إلى مشروع الدالة المحلي الخاص بك ويسمح لك بتجميع الدالات الخاصة بك كوحدة منطقية لتيسير إدارة الموارد، ونشرها، ومشاركتها.
استخدم أوامر Azure CLI في هذه الخطوات لإنشاء الموارد المطلوبة.
إذا لم تكن قد فعلت ذلك بالفعل، سجل الدخول إلى Azure:
az loginaz loginيسجل لك الأمر الدخول إلى حساب Azure الخاص بك. تخطي هذه الخطوة عند التشغيل في Azure Cloud Shell.إذا لم تكن قد فعلت ذلك بالفعل، فاستخدم هذا
az extension addالأمر لتثبيت ملحق Application Insights:az extension add --name application-insightsاستخدم الأمر az group create لإنشاء مجموعة موارد باسم
AzureFunctionsQuickstart-rgفي المنطقة التي اخترتها:az group create --name "AzureFunctionsQuickstart-rg" --location "<REGION>"في هذا المثال، استبدل
<REGION>بمنطقة قريبة منك تدعم خطة استهلاك Flex. استخدم الأمر az functionapp list-flexconsumption-locations لعرض قائمة المناطق المدعومة حاليا.استخدم الأمر az storage account create لإنشاء حساب تخزين للأغراض العامة في مجموعة الموارد والمنطقة:
az storage account create --name <STORAGE_NAME> --location "<REGION>" --resource-group "AzureFunctionsQuickstart-rg" \ --sku "Standard_LRS" --allow-blob-public-access false --allow-shared-key-access falseفي هذا المثال، استبدل
<STORAGE_NAME>باسم مناسب لك وفريد في تخزين Azure. يجب أن تحتوي الأسماء على ثلاثة إلى 24 حرفا من الأرقام والأحرف الصغيرة فقط. يحددStandard_LRSحساب للأغراض العامة، الذي هو مدعوم من قبل الدالات. يمكن الوصول إلى هذا الحساب الجديد فقط باستخدام هويات Microsoft Entra المصادق عليها والتي تم منحها أذونات لموارد معينة.استخدم هذا البرنامج النصي لإنشاء هوية مدارة معينة من قبل المستخدم، وتحليل خصائص JSON التي تم إرجاعها للكائن باستخدام
jq، ومنحStorage Blob Data Ownerالأذونات في حساب التخزين الافتراضي:output=$(az identity create --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" --location <REGION> \ --query "{userId:id, principalId: principalId, clientId: clientId}" -o json) userId=$(echo $output | jq -r '.userId') principalId=$(echo $output | jq -r '.principalId') clientId=$(echo $output | jq -r '.clientId') storageId=$(az storage account show --resource-group "AzureFunctionsQuickstart-rg" --name <STORAGE_NAME> --query 'id' -o tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal \ --role "Storage Blob Data Owner" --scope $storageIdإذا لم يكن لديك
jqالأداة المساعدة في Bash shell المحلية، فهي متوفرة في Azure Cloud Shell. في هذا المثال، استبدل<STORAGE_NAME>و<REGION>باسم حساب التخزين الافتراضي والمنطقة، على التوالي.ينشئ الأمر az identity create هوية تسمى
func-host-storage-user. يتم استخدام الذي تم إرجاعهprincipalIdلتعيين أذونات لهذه الهوية الجديدة في حساب التخزين الافتراضي باستخدامaz role assignment createالأمر .az storage account showيتم استخدام الأمر للحصول على معرف حساب التخزين.استخدم الأمر az functionapp create لإنشاء تطبيق الوظائف في Azure:
az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime dotnet-isolated --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime java --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime node --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime other --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"في هذا المثال، استبدل هذه العناصر النائبة بالقيم المناسبة:
-
<APP_NAME>: اسم فريد عالميا مناسب لك.<APP_NAME>هو أيضا مجال DNS الافتراضي لتطبيق الوظائف. -
<STORAGE_NAME>: اسم الحساب الذي استخدمته في الخطوة السابقة. -
<REGION>: منطقتك الحالية. -
<LANGUAGE_VERSION>: استخدم نفس نسخة مكدس اللغة المدعومة التي تحققت منها محليا، عند الاقتضاء.
ينشئ هذا الأمر تطبيق وظائف يعمل في وقت تشغيل اللغة المحدد على Linux في خطة استهلاك Flex، وهو مجاني لمقدار الاستخدام الذي تتحمله هنا. يقوم الأمر أيضا بإنشاء مثيل Azure Application Insights مقترن في نفس مجموعة الموارد، والتي يمكنك استخدامها لمراقبة عمليات تنفيذ تطبيق الوظائف وعرض السجلات. للمزيد من المعلومات، راجع مراقبة دوال Azure. لا يتحمل المثيل أي تكاليف حتى تقوم بتنشيطه.
-
استخدم هذا البرنامج النصي لإضافة الهوية المدارة المعينة من قبل المستخدم إلى دور Monitoring Metrics Publisher في مثيل Application Insights الخاص بك:
appInsights=$(az monitor app-insights component show --resource-group "AzureFunctionsQuickstart-rg" \ --app <APP_NAME> --query "id" --output tsv) principalId=$(az identity show --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" \ --query principalId -o tsv) az role assignment create --role "Monitoring Metrics Publisher" --assignee $principalId --scope $appInsightsفي هذا المثال، استبدل
<APP_NAME> باسم تطبيق الوظائف الخاص بك. يضيف الأمر az role assignment create المستخدم إلى الدور. يتم الحصول على معرف المورد لمثيل Application Insights الخاص بك والمعرف الأساسي للمستخدم باستخدام عرض مكون az monitor app-insights والأوامرaz identity show، على التوالي.
تحديث إعدادات التطبيق
لتمكين مضيف الوظائف من الاتصال بحساب التخزين الافتراضي باستخدام الأسرار المشتركة، استبدل AzureWebJobsStorage إعداد سلسلة الاتصال بعدة إعدادات مسبقة ب AzureWebJobsStorage__. تحدد هذه الإعدادات إعدادا معقدا يستخدمه تطبيقك للاتصال بالتخزين وApplication Insights بهوية مدارة يعينها المستخدم.
استخدم هذا البرنامج النصي للحصول على معرف العميل للهوية المدارة المعينة من قبل المستخدم ويستخدمه لتعريف اتصالات الهوية المدارة لكل من التخزين وApplication Insights:
clientId=$(az identity show --name func-host-storage-user \ --resource-group AzureFunctionsQuickstart-rg --query 'clientId' -o tsv) az functionapp config appsettings set --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --settings AzureWebJobsStorage__accountName=<STORAGE_NAME> \ AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientId \ APPLICATIONINSIGHTS_AUTHENTICATION_STRING="ClientId=$clientId;Authorization=AAD"في هذا البرنامج النصي، استبدل
<APP_NAME>و<STORAGE_NAME>بأسماء تطبيق الوظائف وحساب التخزين، على التوالي.قم بتشغيل الأمر az functionapp config appsettings delete لإزالة إعداد سلسلة الاتصال الموجودة
AzureWebJobsStorage، والذي يحتوي على مفتاح سري مشترك:az functionapp config appsettings delete --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" --setting-names AzureWebJobsStorageفي هذا المثال، استبدل
<APP_NAME>بأسماء تطبيق الوظائف.
في هذه المرحلة، يمكن لمضيف الوظائف الاتصال بحساب التخزين بأمان باستخدام هويات مدارة بدلا من الأسرار المشتركة. يمكنك الآن نشر التعليمات البرمجية لمشروعك إلى موارد Azure.
إنشاء موارد Azure الداعمة للدالة
قبل أن تتمكن من نشر كود الدالة الخاص بك في Azure، تحتاج إلى إنشاء مجموعة موارد، وحساب تخزين، وتطبيق دالة. استخدم أوامر Azure CLI في هذه الخطوات لإنشاء الموارد المطلوبة.
إذا لم تكن قد فعلت ذلك بالفعل، سجل الدخول إلى Azure:
az loginaz loginيسجل لك الأمر الدخول إلى حساب Azure الخاص بك. تخطي هذه الخطوة عند التشغيل في Azure Cloud Shell.استخدم
az group createالأمر لإنشاء مجموعة موارد تحمل اسمAzureFunctionsQuickstart-rgالمنطقة التي اخترتها:az group create --name AzureFunctionsQuickstart-rg --location <REGION>في هذا المثال، استبدل
<REGION>بمنطقة قريبة منك تدعم خطة استهلاك Flex. استخدم الأمرaz functionapp list-flexconsumption-locationsلعرض قائمة المناطق المدعومة حاليا.استخدم الأمر
az storage account createلإنشاء حساب تخزين عام في مجموعة الموارد والمنطقة الخاصة بك:az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRSفي هذا المثال، استبدلها
<STORAGE_NAME>باسم فريد عالميا. يجب أن تحتوي الأسماء على ثلاثة إلى 24 حرفا وفقط الحروف والأرقام الصغيرة.أنشئ تطبيق الدالة في Azure:
az functionapp create --resource-group AzureFunctionsQuickstart-rg --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4استبدلها
<APP_NAME>باسم فريد عالميا وباسم<STORAGE_NAME>الحساب الذي استخدمته في الخطوة السابقة. هذا الأمر ينشئ أيضا مثيلا مرتبطا ب Azure Application Insights في نفس مجموعة الموارد، حيث يمكنك مراقبة تطبيق الوظائف وعرض السجلات. للمزيد من المعلومات، راجع مراقبة دوال Azure.قم بتعطيل HTTP/2 في تطبيق الوظائف، وهو مطلوب أثناء معاينة Go العامة:
az resource update --resource-group AzureFunctionsQuickstart-rg --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=false
انشر مشروع الوظيفة في Azure
بعد إنشاء تطبيق الوظائف بنجاح في Azure، تصبح الآن جاهزا لنشر مشروع الوظائف المحلية باستخدام func azure functionapp publish الأمر .
في مجلد المشروع الجذر، قم بتشغيل هذا
func azure functionapp publishالأمر:func azure functionapp publish <APP_NAME>في هذا المثال، استبدل
<APP_NAME>باسم تطبيقك. يظهر التوزيع الناجح نتائج مشابهة للإخراج التالي (مقتطع للتبسيط):... Getting site publishing info... Creating archive for current directory... Performing remote build for functions project. ... Deployment successful. Remote build succeeded! Syncing triggers... Functions in msdocs-azurefunctions-qs: HttpExample - [httpTrigger] Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexampleفي طرفك المحلي أو موجه الأوامر، شغل هذا الأمر للحصول على قيمة نقطة نهاية الURL، بما في ذلك مفتاح الوصول:
func azure functionapp list-functions <APP_NAME> --show-keysفي هذا المثال، استبدل
<APP_NAME>مرة أخرى باسم تطبيقك.انسخ عنوان URL ومفتاح نقطة النهاية المرتجع، والذي تستخدمه لاستدعاء نقطة النهاية الخاصة بالدالة.
تحديث ملف pom.xml
بعد أن تنشئ تطبيق الوظائف الخاص بك بنجاح في Azure، قم بتحديث ملف pom.xml حتى يتمكن Maven من نشره في تطبيقك الجديد. وإلا، يقوم Maven بإنشاء مجموعة جديدة من موارد Azure أثناء النشر.
في Azure Cloud Shell، استخدم هذا
az functionapp showالأمر للحصول على عنوان URL لحاوية النشر ومعرف الهوية المدارة الجديدة المعينة من قبل المستخدم:az functionapp show --name <APP_NAME> --resource-group AzureFunctionsQuickstart-rg \ --query "{userAssignedIdentityResourceId: properties.functionAppConfig.deployment.storage.authentication.userAssignedIdentityResourceId, \ containerUrl: properties.functionAppConfig.deployment.storage.value}"في هذا المثال، استبدل
<APP_NAME>بأسماء تطبيق الوظائف.في دليل الجذر للمشروع، افتح ملف pom.xml في محرر نصوص، حدد موقع العنصر
properties، وحدث هذه القيم الخاصة بالخصائص:اسم الخاصية Value java.versionاستخدم نفس إصدار مكدس اللغة المدعوم الذي تحققت منه محليا، مثل 17.azure.functions.maven.plugin.version1.37.1azure.functions.java.library.version3.1.0functionAppNameاسم تطبيق الوظائف في Azure. ابحث عن
configurationقسم منazure-functions-maven-pluginواستبدله بجزء XML هذا:<configuration> <appName>${functionAppName}</appName> <resourceGroup>AzureFunctionsQuickstart-rg</resourceGroup> <pricingTier>Flex Consumption</pricingTier> <region>....</region> <runtime> <os>linux</os> <javaVersion>${java.version}</javaVersion> </runtime> <deploymentStorageAccount>...</deploymentStorageAccount> <deploymentStorageResourceGroup>AzureFunctionsQuickstart-rg</deploymentStorageResourceGroup> <deploymentStorageContainer>...</deploymentStorageContainer> <storageAuthenticationMethod>UserAssignedIdentity</storageAuthenticationMethod> <userAssignedIdentityResourceId>...</userAssignedIdentityResourceId> <appSettings> <property> <name>FUNCTIONS_EXTENSION_VERSION</name> <value>~4</value> </property> </appSettings> </configuration>في العنصر الجديد
configuration، قم بإجراء هذه الاستبدالات المحددة لقيم علامات الحذف (...):Configuration Value regionرمز المنطقة لتطبيق الوظائف الحالي، مثل eastus.deploymentStorageAccountاسم حساب التخزين خاصتك. deploymentStorageContainerاسم مشاركة التوزيع، والذي يأتي بعد \في القيمة التيcontainerUrlحصلت عليها.userAssignedIdentityResourceIdمعرف المورد المؤهل بالكامل لهويتك المدارة، والتي حصلت عليها. احفظ التغييرات التي أجريتها على ملف pom.xml .
يمكنك الآن استخدام Maven لنشر مشروع التعليمات البرمجية إلى تطبيقك الحالي.
انشر مشروع الوظيفة في Azure
من موجه الأوامر، قم بتشغيل هذا الأمر:
mvn clean package azure-functions:deployبعد نجاح النشر، شغل أمر Core Tools هذا للحصول على قيمة نقطة نهاية URL، بما في ذلك مفتاح الوصول:
func azure functionapp list-functions <APP_NAME> --show-keysفي هذا المثال، استبدل
<APP_NAME>مرة أخرى باسم تطبيقك.انسخ عنوان URL ومفتاح نقطة النهاية المرتجع، والذي تستخدمه لاستدعاء نقطة النهاية الخاصة بالدالة.
انشر مشروع الوظيفة في Azure
بعد أن تنشئ تطبيق الدالة الخاص بك بنجاح في Azure، ستكون جاهزا لنشر مشروع الوظائف المحلية الخاص بك. استخدم أمر func azure functionapp publish لنشر مشروعك على Azure:
func azure functionapp publish <APP_NAME>
استبدل <APP_NAME> باسم تطبيق الدالة الخاص بك.
استدعاء الدالة في Azure
نظرا لأن وظيفتك تستخدم مشغل HTTP وتدعم طلبات GET، فإنك تستدعيه عن طريق تقديم طلب HTTP إلى عنوانه الإلكتروني باستخدام مفتاح الوصول على مستوى الوظيفة. من الأسهل تنفيذ طلب GET في المتصفح.
الصق عنوان URL ومفتاح الوصول الذي نسخته في شريط عنوان المتصفح.
يجب أن يبدو عنوان URL لنقطة النهاية مشابها لهذا المثال:
https://contoso-app.azurewebsites.net/api/httpexample?code=aabbccdd...
في هذه الحالة، يجب عليك أيضا توفير مفتاح وصول في سلسلة الاستعلام عند تقديم طلب GET إلى رابط نقطة النهاية. يوصى باستخدام مفتاح الوصول للحد من الوصول من العملاء العشوائيين. عند تقديم طلب POST باستخدام عميل HTTP، يجب عليك بدلا من ذلك توفير مفتاح الوصول في الرأس x-functions-key .
عند الانتقال إلى عنوان URL هذا، يجب أن يعرض المستعرض إخراجا مشابها كما هو الحال عند تشغيل الدالة محليا.
استدعاء الدالة في Azure
بعد اكتمال النشر، افتح الرابط التالي في المتصفح للتحقق من أن الوظيفة تعمل في Azure:
https://<APP_NAME>.azurewebsites.net/api/hello
يجب أن ترى نفس Hello from Go Worker! الاستجابة التي رأيتها عند تشغيل الدالة محليا.
تنظيف الموارد
إذا واصلت إلى الخطوة التالية وأضفت ربط إخراج قائمة انتظار تخزين Azure، فاحتفظ بجميع مواردك في مكانها حيث ستبني على ما قمت به بالفعل.
وإلا، استخدم الأمر التالي لحذف مجموعة الموارد، وجميع الموارد الموجودة فيها لتجنب تكبد المزيد من التكاليف.
- Azure CLI
- Azure PowerShell
az group delete --name AzureFunctionsQuickstart-rg
تنظيف الموارد
إذا واصلت الخطوة التالية، حافظ على جميع الموارد في مكانها أثناء البناء على ما أنشأته بالفعل.
وإلا، استخدم الأمر التالي لحذف مجموعة الموارد، وجميع الموارد الموجودة فيها لتجنب تكبد المزيد من التكاليف.
az group delete --name AzureFunctionsQuickstart-rg
الخطوات التالية
الخطوات التالية
لمزيد من المعلومات حول تطوير وظائف Go، راجع الموارد التالية: