إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
في هذا البدء السريع، تستخدم أدوات سطر الأوامر من Azure Developer لبناء واجهة ويب قابلة للتوسع مع نقاط نهاية للوظائف تستجيب لطلبات HTTP. بعد اختبار التعليمات البرمجية محليا، يمكنك نشرها إلى تطبيق وظائف بلا خادم جديد تقوم بإنشائه قيد التشغيل في خطة Flex Consumption في Azure Functions.
يستخدم مصدر المشروع Azure Developer CLI (azd) لتبسيط نشر التعليمات البرمجية الخاصة بك إلى Azure. يتبع هذا النشر أفضل الممارسات الحالية لتوزيع وظائف Azure الآمنة والقابلة للتطوير.
بشكل افتراضي، تتبع خطة الاستهلاك المرن نموذج الفوترة بالدفع مقابل ما تستخدمه ، مما يعني أن إكمال هذه البداية السريعة يكلف تكلفة صغيرة بضعة سنتات أمريكية أو أقل في حساب Azure الخاص بك.
Prerequisites
حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
-
مجموعة مطوري Java 17
- إذا كنت تستخدم إصدارا آخر مدعوما من Java، يجب تحديث ملف pom.xml للمشروع.
-
JAVA_HOMEيجب تعيين متغير البيئة إلى موقع تثبيت الإصدار الصحيح من Java Development Kit (JDK).
- أباتشي مافن 3.8.x
-
أداة اختبار HTTP آمنة لإرسال الطلبات مع حمولات JSON إلى نقاط نهاية الدالة. يستخدم هذا المقال
curl.
تهيئة المشروع
استخدم الأمر azd init لإنشاء مشروع كود Azure Functions محلي من قالب.
في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذا
azd initالأمر في مجلد فارغ:azd init --template functions-quickstart-dotnet-azd -e httpendpoint-dotnetيسحب هذا الأمر ملفات المشروع من مستودع القالب ويهيئ المشروع في المجلد الحالي.
-eتعين العلامة اسما للبيئة الحالية. فيazd، تحتفظ البيئة بسياق توزيع فريد لتطبيقك، ويمكنك تحديد أكثر من واحد. كما يتم استخدامه في اسم مجموعة الموارد التي تقوم بإنشائها في Azure.قم بتشغيل هذا الأمر للانتقال إلى
httpمجلد التطبيق:cd httpقم بإنشاء ملف باسم local.settings.json في
httpالمجلد الذي يحتوي على بيانات JSON هذه:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } }هذا الملف مطلوب عند التشغيل محليا.
في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذا
azd initالأمر في مجلد فارغ:azd init --template azure-functions-java-flex-consumption-azd -e httpendpoint-javaيسحب هذا الأمر ملفات المشروع من مستودع القالب ويهيئ المشروع في المجلد الحالي.
-eتعين العلامة اسما للبيئة الحالية. فيazd، تحتفظ البيئة بسياق توزيع فريد لتطبيقك، ويمكنك تحديد أكثر من واحد. كما يتم استخدامه في اسم مجموعة الموارد التي تقوم بإنشائها في Azure.قم بتشغيل هذا الأمر للانتقال إلى
httpمجلد التطبيق:cd httpقم بإنشاء ملف باسم local.settings.json في
httpالمجلد الذي يحتوي على بيانات JSON هذه:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java" } }هذا الملف مطلوب عند التشغيل محليا.
في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذا
azd initالأمر في مجلد فارغ:azd init --template functions-quickstart-javascript-azd -e httpendpoint-jsيسحب هذا الأمر ملفات المشروع من مستودع القالب ويهيئ المشروع في المجلد الجذر.
-eتعين العلامة اسما للبيئة الحالية. فيazd، تحتفظ البيئة بسياق توزيع فريد لتطبيقك، ويمكنك تحديد أكثر من واحد. كما يتم استخدامه في اسم مجموعة الموارد التي تقوم بإنشائها في Azure.قم بإنشاء ملف باسم local.settings.json في المجلد الجذر الذي يحتوي على بيانات JSON هذه:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }هذا الملف مطلوب عند التشغيل محليا.
في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذا
azd initالأمر في مجلد فارغ:azd init --template functions-quickstart-powershell-azd -e httpendpoint-psيسحب هذا الأمر ملفات المشروع من مستودع القالب ويهيئ المشروع في المجلد الجذر.
-eتعين العلامة اسما للبيئة الحالية. فيazd، تحتفظ البيئة بسياق توزيع فريد لتطبيقك، ويمكنك تحديد أكثر من واحد. كما يتم استخدامه في اسم مجموعة الموارد التي تقوم بإنشائها في Azure.قم بتشغيل هذا الأمر للانتقال إلى
srcمجلد التطبيق:cd srcقم بإنشاء ملف باسم local.settings.json في
srcالمجلد الذي يحتوي على بيانات JSON هذه:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2" } }هذا الملف مطلوب عند التشغيل محليا.
في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذا
azd initالأمر في مجلد فارغ:azd init --template functions-quickstart-typescript-azd -e httpendpoint-tsيسحب هذا الأمر ملفات المشروع من مستودع القالب ويهيئ المشروع في المجلد الجذر.
-eتعين العلامة اسما للبيئة الحالية. فيazd، تحتفظ البيئة بسياق توزيع فريد لتطبيقك، ويمكنك تحديد أكثر من واحد. يستخدم اسم البيئة أيضا في اسم مجموعة الموارد التي تنشئها في Azure.قم بإنشاء ملف باسم local.settings.json في المجلد الجذر الذي يحتوي على بيانات JSON هذه:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }هذا الملف مطلوب عند التشغيل محليا.
في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذا
azd initالأمر في مجلد فارغ:azd init --template functions-quickstart-python-http-azd -e httpendpoint-pyيسحب هذا الأمر ملفات المشروع من مستودع القالب ويهيئ المشروع في المجلد الجذر.
-eتعين العلامة اسما للبيئة الحالية. فيazd، تحتفظ البيئة بسياق توزيع فريد لتطبيقك، ويمكنك تحديد أكثر من واحد. يستخدم اسم البيئة أيضا في اسم مجموعة الموارد التي تنشئها في Azure.قم بإنشاء ملف باسم local.settings.json في المجلد الجذر الذي يحتوي على بيانات JSON هذه:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python" } }هذا الملف مطلوب عند التشغيل محليا.
إنشاء وتنشيط البيئة الظاهرية
في المجلد الجذر، قم بتشغيل هذه الأوامر لإنشاء وتنشيط بيئة ظاهرية باسم .venv:
python3 -m venv .venv
source .venv/bin/activate
إذا لم تقم بايثون بتثبيت حزمة venv على توزيعة لينكس الخاصة بك، شغل الأمر التالي:
sudo apt-get install python3-venv
تشغيل في بيئتك المحلية
قم بتشغيل هذا الأمر من مجلد التطبيق في محطة طرفية أو موجه أوامر:
func startmvn clean package mvn azure-functions:runnpm install func startnpm install npm startعندما يبدأ مضيف الوظائف في مجلد المشروع المحلي، فإنه يكتب نقاط نهاية عنوان URL للوظائف التي تم تشغيلها من قبل HTTP إلى إخراج المحطة الطرفية.
Note
نظرا لأن تفويض مفتاح الوصول غير مطبق عند التشغيل محليا، فإن رابط الوظيفة المرتجع لا يتضمن قيمة مفتاح الوصول ولا تحتاجه لاستدعاء وظيفتك.
في متصفحك، اذهب إلى
httpgetنقطة النهاية، والتي يجب أن تبدو كهذا العنوان:من محطة طرفية جديدة أو نافذة موجه الأوامر، قم بتشغيل هذا
curlالأمر لإرسال طلب POST مع حمولة JSON إلىhttppostنقطة النهاية:curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.jsoncurl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"يقرأ هذا الأمر بيانات حمولة JSON من
testdata.jsonملف المشروع. يمكنك العثور على أمثلة لكلا طلبي HTTP فيtest.httpملف المشروع.عند الانتهاء، اضغط على Ctrl+C في نافذة المحطة الطرفية لإيقاف
func.exeعملية المضيف.
- قم بتشغيل
deactivateلإيقاف تشغيل البيئة الظاهرية.
راجع الكود (اختياري)
يمكنك مراجعة التعليمات البرمجية التي تحدد نقطتي نهاية دالة مشغل HTTP:
[Function("httpget")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
HttpRequest req,
string name)
{
var returnValue = string.IsNullOrEmpty(name)
? "Hello, World."
: $"Hello, {name}.";
_logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");
return new OkObjectResult(returnValue);
}
@FunctionName("httpget")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.FUNCTION)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
}
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
};
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: httpGetFunction
});
يعرف هذا function.json الملف الدالة httpget :
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get"
],
"route": "httpget"
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
ينفذ هذا run.ps1 الملف التعليمات البرمجية للدالة:
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters
$name = $Request.Query.name
$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
name = req.params.get("name", "World")
logging.info(f"Processing GET request. Name: {name}")
return func.HttpResponse(f"Hello, {name}!")
يمكنك مراجعة مشروع القالب الكامل هنا.
يمكنك مراجعة مشروع القالب الكامل هنا.
يمكنك مراجعة مشروع القالب الكامل هنا.
يمكنك مراجعة مشروع القالب الكامل هنا.
يمكنك مراجعة مشروع القالب الكامل هنا.
يمكنك مراجعة مشروع القالب الكامل هنا.
بعد التحقق من وظائفك محليا، حان الوقت لنشرها على Azure.
نشر في Azure
تم تكوين هذا المشروع لاستخدام azd up الأمر لنشر هذا المشروع إلى تطبيق وظائف جديد في خطة استهلاك Flex في Azure.
Tip
يتضمن المشروع مجموعة من ملفات Bicep (في المجلد infra ) تستخدم azd لإنشاء نشر آمن ضمن خطة استهلاك مرنة تتبع أفضل الممارسات.
قم بتشغيل هذا الأمر لإنشاء
azdموارد Azure المطلوبة في Azure ونشر مشروع التعليمات البرمجية إلى تطبيق الوظائف الجديد:azd upيحتوي المجلد الجذر على
azure.yamlملف التعريف المطلوب من قبلazd.إذا لم تكن مسجلا الدخول بالفعل، يطلب منك المصادقة باستخدام حساب Azure الخاص بك.
عند المطالبة، قم بتوفير معلمات النشر المطلوبة هذه:
Parameter Description اشتراك Azure الاشتراك الذي يتم فيه إنشاء مواردك. موقع Azure منطقة Azure التي يتم فيها إنشاء مجموعة الموارد التي تحتوي على موارد Azure الجديدة. يتم عرض المناطق التي تدعم حاليا خطة استهلاك Flex فقط. vnetEnabled اختر الزائف. عند ضبطه على True ، ينشئ النشر تطبيق الوظائف الخاص بك في شبكة افتراضية جديدة. azd upيستخدم الأمر ردودك على هذه التعليمات باستخدام ملفات تكوين Bicep لإكمال مهام النشر هذه:إنشاء وتكوين موارد Azure المطلوبة هذه (ما يعادل
azd provision):- خطة استهلاك Flex وتطبيق الوظائف
- Azure Storage (مطلوب) وApplication Insights (مستحسن)
- نهج الوصول والأدوار لحسابك
- اتصالات الخدمة إلى الخدمة باستخدام الهويات المدارة (بدلا من سلسلة الاتصال المخزنة)
- (خيار) شبكة افتراضية لتشغيل كل من تطبيق الوظائف وموارد Azure الأخرى بأمان
قم بحزم التعليمات البرمجية ونشرها في حاوية التوزيع (ما يعادل
azd deploy). ثم يتم بدء تشغيل التطبيق وتشغيله في الحزمة المنشورة.
بعد اكتمال الأمر بنجاح، سترى ارتباطات إلى الموارد التي قمت بإنشائها.
استدعاء الدالة في Azure
يمكنك الآن استدعاء نقاط نهاية الوظائف في Azure عن طريق إجراء طلبات HTTP إلى روابطها باستخدام أداة اختبار HTTP أو من المتصفح (لطلبات GET). عند تشغيل وظائفك في Azure، يتم فرض تخويل مفتاح الوصول، ويجب توفير مفتاح وصول دالة مع طلبك.
يمكنك استخدام الأدوات الأساسية لتشغيل نقاط نهاية URL لوظائفك في Azure.
في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذه الأوامر للحصول على قيم نقطة نهاية URL:
$APP_NAME = azd env get-value AZURE_FUNCTION_NAME func azure functionapp list-functions $APP_NAME --show-keysazd env get-valueيحصل الأمر على اسم تطبيق الوظائف من البيئة المحلية. عند استخدام--show-keysالخيار معfunc azure functionapp list-functions، فإن قيمة Invoke URL: العائد لكل نقطة نهاية تتضمن مفتاح وصول على مستوى الوظيفة.كما كان من قبل، استخدم أداة اختبار HTTP للتحقق من صحة عناوين URL هذه في تطبيق الوظائف الذي يعمل في Azure.
إعادة نشر التعليمات البرمجية الخاصة بك
شغل azd up الأمر عدة مرات تحتاج لتوفير موارد Azure ونشر تحديثات الكود إلى تطبيق الوظائف الخاص بك.
Note
تتم دائما الكتابة فوق ملفات التعليمات البرمجية المنشورة بواسطة أحدث حزمة نشر.
يتم تخزين استجاباتك الأولية للمطالبات azd وأي متغيرات بيئة تم إنشاؤها بواسطة azd محليا في البيئة المسماة. استخدم الأمر azd env get-values لمراجعة جميع المتغيرات في بيئتك التي استخدمتها عند إنشاء موارد Azure.
تنظيف الموارد
عندما تنتهي من العمل مع تطبيق الوظائف والموارد ذات الصلة، استخدم هذا الأمر لحذف تطبيق الوظائف وموارده ذات الصلة من Azure وتجنب تحمل أي تكاليف إضافية:
azd down --no-prompt
Note
يرشد --no-promptazd الخيار إلى حذف مجموعة الموارد الخاصة بك دون تأكيد منك.
لا يؤثر هذا الأمر على مشروع التعليمات البرمجية المحلية.