التشغيل السريع: إنشاء دالة Java في Azure من سطر الأوامر
في هذه المقالة، يمكنك استخدام أدوات سطر الأوامر لإنشاء دالة Java تستجيب لطلبات HTTP. بعد اختبار التعليمة البرمجية محليًا، يمكنك توزيعها إلى بيئة بلا خادم من دالات Azure.
إذا لم تكن Maven أداة التطوير المفضلة لديك، فتحقق من برامجنا التعليمية المماثلة لمطوري Java:
يتطلب إكمال هذا التشغيل السريع تكلفة صغيرة تبلغ بضعة سنتات أمريكية أو أقل في حساب Azure الخاص بك.
تكوين البيئة المحلية الخاصة بك
قبل أن تبدأ، يجب أن يكون لديك ما يلي:
حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
الإصدار 2.4 من Azure CLI أو أحدث.
حزمة مطوري Java، الإصدار 8، 11، 17، 21 (Linux فقط).
JAVA_HOME
يجب تعيين متغير البيئة إلى موقع تثبيت الإصدار الصحيح من JDK.Apache Maven، الإصدار 3.0 أو إصدار أعلى.
تثبيت الأدوات الأساسية لوظائف Azure
تعتمد الطريقة الموصى بها لتثبيت Core Tools على نظام تشغيل كمبيوتر التطوير المحلي.
الخطوات التالية استخدام مثبت Windows (MSI) لتثبيت أدوات الأساسية v4.x. لمزيدٍ من المعلومات حول المثبتات الأخرى المستندة إلى الحزمة، راجع الملف الأساسي أدوات القراءة.
قم بتنزيل وتشغيل مثبت الأدوات الأساسية، استنادًا إلى إصدار Windows:
- v4.x - Windows 64-bit (موصى به. يتطلب تصحيح أخطاء Visual Studio Code 64 بت.)
- v4.x - Windows 32-بت
إذا كنت قد استخدمت مثبت Windows (MSI) مسبقا لتثبيت Core Tools على Windows، فيجب إلغاء تثبيت الإصدار القديم من إضافة إزالة البرامج قبل تثبيت أحدث إصدار.
إنشاء مشروع دوال محلية
في Azure Functions، يُعد مشروع الدوال حاوية لدالة فردية واحدة أو أكثر يستجيب كل منها لمشغل معين. تشترك جميع الدوال في المشروع في نفس التكوينات المحلية والاستضافة. في هذا المقطع، يمكنك إنشاء مشروع دالة يحتوي على دالة واحدة.
في مجلد فارغ، قم بتشغيل الأمر التالي لإنشاء مشروع الدالات من نموذج Maven الأصلي.
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8
هام
- استخدم
-DjavaVersion=11
إذا كنت تريد تشغيل دالاتك على Java 11. لمعرفة المزيد، راجع إصدارات Java. JAVA_HOME
يجب تعيين متغير البيئة إلى موقع تثبيت الإصدار الصحيح من JDK لإكمال هذه المقالة.
- استخدم
يطلب منك Maven القيم اللازمة لإنهاء إنشاء المشروع عند النشر.
توفير القيم التالية عند المطالبة:المطالبة قيمة الوصف groupId com.fabrikam
قيمة تُعرّف المشروع الخاص بك بشكل فريد عبر جميع المشاريع، باتباع قواعد تسمية الحزمة لـ Java التالية. artifactId fabrikam-functions
قيمة تمثل اسم jar، بدون رقم إصدار. إصدار 1.0-SNAPSHOT
اختر القيمة الافتراضية. الحزمة com.fabrikam
قيمة تمثل حزمة Java للتعليمات البرمجية للدالة التي تم إنشاؤها. استخدم الافتراضي. اكتب
Y
أو اضغط إدخال للتأكيد.يقوم Maven بإنشاء ملفات المشروع في مجلد جديد باسم artifactId، وهو في هذا المثال
fabrikam-functions
.انتقل إلى مجلد المشروع:
cd fabrikam-functions
يحتوي هذا المجلد على ملفات مختلفة للمشروع، بما في ذلك ملفات التهيئة المسماة local.settings.json وhost.json. ونظراً لاحتواء ملفات local.settings.json على الأسرار التي تم تنزيلها من Azure، يُستبعد الملف من التحكم في المصدر افتراضيا في ملف .gitignore.
(اختياري) افحص محتويات الملف
إذا رغبت في ذلك، يمكنك التخطي إلى تشغيل الوظيفة محليًّا وفحص محتويات الملف لاحقًا.
Function.java
يحتوي Function.java على run
أسلوب يتلقى بيانات الطلب في request
المتغير هو HttpRequestMessage مزين بتعليق HttpTrigger التوضيحي، الذي يحدد سلوك المشغل.
package com.fabrikam;
import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import java.util.Optional;
/**
* Azure Functions with HTTP Trigger.
*/
public class Function {
/**
* This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
* 1. curl -d "HTTP Body" {your host}/api/HttpExample
* 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
*/
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
final String query = request.getQueryParameters().get("name");
final String name = request.getBody().orElse(query);
if (name == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
} else {
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
}
}
يتم إنشاء رسالة الاستجابة بواسطة واجهة برمجة تطبيقات HttpResponseMessage.Builder .
pom.xml
يتم تحديد إعدادات موارد Azure التي تم إنشاؤها لاستضافة تطبيقك في عنصر التكوين للمكون الإضافي باستخدام groupId في com.microsoft.azure
ملف pom.xml الذي تم إنشاؤه. على سبيل المثال، يوجه عنصر التكوين أدناه التوزيع المستند إلى Maven لإنشاء تطبيق دالة java-functions-group
في مجموعة الموارد في westus
المنطقة. يتم تشغيل تطبيق الوظائف نفسه على Windows المستضاف java-functions-app-service-plan
في الخطة، والتي تكون بشكل افتراضي خطة استهلاك بلا خادم.
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-functions-maven-plugin</artifactId>
<version>${azure.functions.maven.plugin.version}</version>
<configuration>
<!-- function app name -->
<appName>${functionAppName}</appName>
<!-- function app resource group -->
<resourceGroup>java-functions-group</resourceGroup>
<!-- function app service plan name -->
<appServicePlanName>java-functions-app-service-plan</appServicePlanName>
<!-- function app region-->
<!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-regions for all valid values -->
<region>westus</region>
<!-- function pricingTier, default to be consumption if not specified -->
<!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-pricing-tiers for all valid values -->
<!-- <pricingTier></pricingTier> -->
<!-- Whether to disable application insights, default is false -->
<!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details for all valid configurations for application insights-->
<!-- <disableAppInsights></disableAppInsights> -->
<runtime>
<!-- runtime os, could be windows, linux or docker-->
<os>windows</os>
<javaVersion>8</javaVersion>
</runtime>
<appSettings>
<property>
<name>FUNCTIONS_EXTENSION_VERSION</name>
<value>~4</value>
</property>
</appSettings>
</configuration>
<executions>
<execution>
<id>package-functions</id>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
يمكنك تغيير هذه الإعدادات للتحكم في كيفية إنشاء الموارد في Azure، مثل التغيير runtime.os
من windows
إلى linux
قبل النشر الأولي. للحصول على قائمة كاملة بالإعدادات التي يدعمها المكون الإضافي Maven، راجع تفاصيل التكوين.
FunctionTest.java
يقوم النموذج الأصلي أيضًا بإنشاء اختبار وحدة لدالتك. عند تغيير الدالة لإضافة روابط أو إضافة وظائف جديدة إلى المشروع، ستحتاج أيضا إلى تعديل الاختبارات في ملف FunctionTest.java .
تشغيل الدالة محليًا
شغل الدالة عن طريق بدء تشغيل مضيف وقت تشغيل دوال Azure المحلي من المجلد LocalFunctionProj:
mvn 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 ...
إشعار
إذا لم يظهر HttpExample كما هو موضح أعلاه، فمن المحتمل أن تكون قد بدأت المضيف من خارج المجلد الجذر للمشروع. في هذه الحالة، استخدم Ctrl+C لإيقاف المضيف، انتقل إلى المجلد الجذر للمشروع، وتشغيل الأمر السابق مرة أخرى.
انسخ عنوان URL لدالتك
HttpExample
من هذا الإخراج إلى مستعرض وألحق سلسلة?name=<YOUR_NAME>
الاستعلام ، مما يجعل عنوان URL الكامل مثلhttp://localhost:7071/api/HttpExample?name=Functions
. يجب أن يعرض المتصفح رسالة تعكس قيمة سلسلة الاستعلام الخاصة بك. تُظهر المحطة الطرفية التي بدأت فيها مشروعك أيضًا إخراج السجل أثناء تقديم الطلبات.عند الانتهاء من ذلك، استخدم Ctrl+C واختر
y
إيقاف مضيف الوظائف.
انشر مشروع الوظيفة في Azure
يتم إنشاء تطبيق دالة والموارد ذات الصلة في Azure عند نشر مشروع الدالات لأول مرة. يتم تحديد إعدادات موارد Azure التي تم إنشاؤها لاستضافة تطبيقك في ملف pom.xml. في هذه المقالة، سوف تقبل الإعدادات الافتراضية.
تلميح
لإنشاء تطبيق وظائف يعمل على Linux بدلا من Windows، قم بتغيير runtime.os
العنصر في ملف pom.xml من windows
إلى linux
. يتم دعم تشغيل Linux في خطة استهلاك في هذه المناطق. لا يمكن أن يكون لديك تطبيقات تعمل على Linux وتطبيقات تعمل على Windows في نفس مجموعة الموارد.
قبل أن تتمكن من النشر، قم بتسجيل الدخول إلى اشتراك Azure باستخدام Azure CLI أو Azure PowerShell.
az login
يقوم الأمر تسجيل الدخول إلى az بتسجيل الدخول إلى حساب Azure الخاص بك.
استخدم الأمر التالي لنشر المشروع إلى تطبيق دالة جديد.
mvn azure-functions:deploy
هذا ينشئ الموارد التالية في Azure:
- مجموعة الموارد. يسمى java-functions-group.
- حساب التخزين. مطلوب من الدالات. يتم إنشاء الاسم بشكل عشوائي استنادًا إلى متطلبات اسم حساب التخزين.
- خطة الاستضافة. استضافة بلا خادم لتطبيق الوظائف في منطقة westus . الاسم هو java-functions-app-service-plan.
- تطبيق الدالة. تطبيق الدالة هو نشر الدالات الخاصة بك وتنفيذها. يتم إنشاء الاسم عشوائيا استنادا إلى artifactId الخاص بك، ملحق برقم تم إنشاؤه عشوائيا.
يقوم التوزيع بحزم ملفات المشروع ونشرها في تطبيق الوظائف الجديد باستخدام توزيع zip. يتم تشغيل التعليمات البرمجية من حزمة النشر في Azure.
هام
يتم استخدام حساب التخزين لتخزين بيانات التطبيق المهمة، بما في ذلك أحيانا التعليمات البرمجية للتطبيق نفسه. يجب تقييد الوصول من التطبيقات والمستخدمين الآخرين إلى حساب التخزين.
استدعاء الدالة في Azure
لأن الوظيفة تستخدم مشغل HTTP، يمكنك استدعاؤها عن طريق إجراء طلب HTTP إلى عنوان URL الخاص به في المتصفح أو باستخدام أداة مثل curl.
نسخ URL Invoke الكاملة المعروضة في نتيجة أمر النشر في شريط عناوين المتصفح، مع إرفاق معلمة الاستعلام?name=Functions
. يجب أن يعرض المتصفح نتيجة مشابهة كما هو الحال عند تشغيل الدالة محلياً.
قم بتشغيل الأمر التالي لعرض السجلات الجارية في الوقت الحقيقي تقريباً:
func azure functionapp logstream <APP_NAME>
في نافذة طرفية منفصلة أو في المتصفح، اضغط على وظيفة التحكم عن بعد مرة أخرى. سيُعرض سجلاً مطولاً لتنفيذ الوظيفة في Azure في المحطة الطرفية.
تنظيف الموارد
إذا تابعت إلى الخطوة التالية وأضفت ربط ناتج قائمة انتظار Azure Storage، فاحتفظ بجميع مواردك في مكانها حيث ستبني على ما قمت به بالفعل.
وإلا، استخدم الأمر التالي لحذف مجموعة الموارد، وجميع الموارد الموجودة فيها لتجنب تكبد المزيد من التكاليف.
az group delete --name java-functions-group