توفر Azure Functions دعمًا متكاملاً لتطوير ونشر وإدارة تطبيقات الوظائف الموجودة في حاوية على تطبيقات Azure Container. وهذا يجعل من السهل تشغيل Azure Functions وإدارتها باستخدام مدخل إدارة Azure المتكامل، مقارنة بتشغيل Azure Functions بشكل مستقل في بيئات الحاويات مثل Azure Kubernetes Service (AKS). بالإضافة إلى ذلك، من خلال الاستفادة من الميزات التي توفرها Azure Container Apps، يمكنك بسهولة الاستفادة من الوظائف مثل KEDA وDapr وEnvoy والقياس والمراقبة والأمان والتحكم في الوصول لوظائف Azure الخاصة بك.
[مرجع]
استضافة تطبيقات Azure Container لوظائف Azure
أنشئ أول وظائفك الحاوية على تطبيقات Azure Container
فيما يلي متغيرات البيئة المتعلقة بإنشاء موارد Azure Container Apps. هنا، يمكنك تحديد أسماء ومواقع تثبيت مختلفة للموارد التي ستقوم بإنشائها، بالإضافة إلى اسم صورة الحاوية وعلامتها.
# Azure Container Apps resource names export LOCATION=eastus export RESOURCE_GROUP_NAME=yoshio-rg export CONTAINER_REGISTRY_NAME=cajava2411 export CONTAINER_ENVIRONMENT=YoshioContainerEnvironment export STORAGE_NAME=yoshiojavastorage export AZURE_FUNCTION_NAME=yoshiojavafunc # Container image name and tag export C_IMAGE_NAME=tyoshio2002/java-function-on-aca export C_IMAGE_TAG=1.0
أولاً، قم بإنشاء مشروع Maven لوظائف Azure لـ Java. تم تصميم مشروع Maven هذا لإنشاء وظائف Azure باستخدام Java 21. استخدم الأمر mvn الأصلي: إنشاء لإنشاء المشروع، وتعديل المعلمات حسب الحاجة.
mvn archetype:generate \ -DinteractiveMode=false \ -DarchetypeGroupId=com.microsoft.azure \ -DarchetypeArtifactId=azure-functions-archetype \ -DgroupId=com.yoshio3 \ -Dpackage=com.yoshio3 \ -DartifactId=yoshiojavafunc \ -DappName=Java-Azure-Functions \ -DappRegion=$LOCATION \ -DjavaVersion=21 \ -Dversion=1.0-SNAPSHOT \ -Ddocker
سيؤدي تنفيذ الأمر أعلاه إلى إنشاء بنية دليل تلقائيًا، وسيحتوي Function.java على نموذج تعليمة برمجية لوظيفة Azure مع مشغل HTTP. سيتم أيضًا إنشاء ملف Dockerfile، والذي يحتوي على التكوين لتشغيل Azure Functions في بيئة حاوية Docker.
├── Dockerfile ├── host.json ├── local.settings.json ├── pom.xml └── src ├── main │ └── java │ └── com │ └── yoshio3 │ └── Function.java └── test └── java └── com └── yoshio3 ├── FunctionTest.java └── HttpResponseMessageMock.java
قم ببناء مشروع Maven وتشغيل وظائف Azure محليًا. قم بتنفيذ الأوامر التالية لبدء وظائف Azure باستخدام مشغل HTTP.
mvn clean package mvn azure-functions:run
بمجرد تشغيل وظائف Azure، افتح محطة طرفية أخرى وقم بتنفيذ الأمر التالي لإرسال طلب إلى مشغل HTTP. من المفترض أن تتلقى ردًا يقول "Hello, World".
curl "http://localhost:7071/api/HttpExample?name=World" # Output: Hello, World
استخدم ملف Dockerfile الذي تم إنشاؤه تلقائيًا لإنشاء صورة حاوية Azure Functions. قم بتنفيذ الأمر التالي لبناء الصورة.
docker build -t $C_IMAGE_NAME:$C_IMAGE_TAG -f ./Dockerfile .
بعد اكتمال الإنشاء، قم بتشغيل الأمر التالي للتحقق من إنشاء الصورة.
docker images | grep $C_IMAGE_NAME # Output: tyoshio2002/java-function-on-aca 1.0 bcf471e6f774 9 hours ago 1.46GB
بمجرد إنشاء الصورة، قم بتشغيل الأمر التالي لاختبار صورة حاوية Azure Functions محليًا. تستخدم حاوية Azure Functions داخليًا منفذ HTTP رقم 80، لذلك ستقوم بتعيينه إلى المنفذ 8080 للوصول المحلي. بعد بدء تشغيل الحاوية، قم بتنفيذ أمر الضفيرة لإرسال طلب إلى مشغل Azure Functions HTTP. إذا كان كل شيء يعمل بشكل صحيح، يجب أن تتلقى "Hello, World".
docker run -p 8080:80 -it $C_IMAGE_NAME:$C_IMAGE_TAG curl "http://localhost:8080/api/HttpExample?name=World" # Output: Hello, World
أولاً، قم بتسجيل الدخول إلى Azure باستخدام Azure CLI. قم بتنفيذ الأمر التالي لتسجيل الدخول.
az login
إنشاء مجموعة موارد في Azure. سيتم استخدام مجموعة الموارد هذه لتجميع الموارد ذات الصلة بـ Azure Container Registry وتطبيقات Azure Container Apps.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
أنشئ سجل حاوية Azure وقم بتسجيل الدخول. Azure Container Registry هو سجل حاوية خاص لدفع صور الحاوية.
az acr create --resource-group $RESOURCE_GROUP_NAME --name $CONTAINER_REGISTRY_NAME --sku Basic az acr login --name $CONTAINER_REGISTRY_NAME
استرجع اسم الخادم الخاص بـ Azure Container Registry الذي تم إنشاؤه. سيكون اسم الخادم بالتنسيق $CONTAINER_REGISTRY_NAME.azurecr.io.
CONTAINER_REGISTRY_SERVER=$(az acr show --name $CONTAINER_REGISTRY_NAME --query loginServer --output tsv)
لدفع صورة الحاوية التي تم إنشاؤها محليًا إلى Azure Container Registry، قم بوضع علامة على الصورة باستخدام أمر العلامة. بعد وضع العلامات، استخدم أمر الدفع لدفع الصورة.
docker tag $C_IMAGE_NAME:$C_IMAGE_TAG $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG docker push $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG
لإنشاء تطبيقات Azure Container Apps وإدارتها من Azure CLI، قم بتسجيل الامتدادات وموفري الموارد الضروريين.
az upgrade az extension add --name containerapp --upgrade -y az provider register --namespace Microsoft.Web az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
إنشاء بيئة لتطبيقات Azure Container. يقوم هذا الأمر بإعداد التكوين المطلوب لاستضافة تطبيقات Azure Container Apps.
az containerapp env create --name $CONTAINER_ENVIRONMENT --enable-workload-profiles --resource-group $RESOURCE_GROUP_NAME --location $LOCATION
تتطلب Azure Functions حساب تخزين عند إنشاء مثيل تطبيق وظيفي. ولذلك، قم بإنشاء حساب تخزين للأغراض العامة لوظائف Azure.
az storage account create --name $STORAGE_NAME --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --sku Standard_LRS
قم بإنشاء مثيل لوظيفة Java Azure في تطبيقات Azure Container. قم بتنفيذ الأمر التالي لإنشاء المثيل. نظرًا لأنه تم إنشاء وظيفة Azure باستخدام Java 21، حدد --runtime java.
az functionapp create --name $AZURE_FUNCTION_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --environment $CONTAINER_ENVIRONMENT \ --storage-account $STORAGE_NAME \ --workload-profile-name "Consumption" \ --max-replicas 15 \ --min-replicas 1 \ --functions-version 4 \ --runtime java \ --image $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG \ --assign-identity
أخيرًا، قم بتكوين الوصول الآمن لوظائف Azure إلى Azure Container Registry. قم بتمكين الهوية التي يديرها النظام لوظائف Azure وقم بتعيين دور ACRPull للوصول.
FUNCTION_APP_ID=$(az functionapp identity assign --name $AZURE_FUNCTION_NAME --resource-group $RESOURCE_GROUP_NAME --query principalId --output tsv) ACR_ID=$(az acr show --name $CONTAINER_REGISTRY_NAME --query id --output tsv) az role assignment create --assignee $FUNCTION_APP_ID --role AcrPull --scope $ACR_ID
أخيرًا، قم باسترداد عنوان URL لوظيفة مشغل HTTP لوظيفة Azure المنشورة. استخدم الأمر az functionapp function show للحصول على تفاصيل وظيفة Azure Functions.
az functionapp function show --resource-group $RESOURCE_GROUP_NAME --name $AZURE_FUNCTION_NAME --function-name HttpExample --query invokeUrlTemplate # Output: "https://yoshiojavafunc.niceocean-********.eastus.azurecontainerapps.io/api/httpexample"
يمكنك بعد ذلك إرسال طلب إلى عنوان URL المسترد باستخدام أمر الضفيرة للتأكد من أن وظائف Azure تعمل بشكل صحيح.
curl "https://yoshiojavafunc.niceocean-********.eastus.azurecontainerapps.io/api/httpexample?name=World" # Expected Output: Hello, World
إذا تم إعداد كل شيء بشكل صحيح، فيجب أن تتلقى ردًا يقول "Hello, World"، مما يؤكد أن وظيفة Azure الخاصة بك تعمل كما هو متوقع.
تعلمت في هذا الدليل كيفية:
باتباع هذه الخطوات، يمكنك نشر وظيفة Java Azure بنجاح على تطبيقات Azure Container، مع الاستفادة من فوائد النقل بالحاويات وإمكانيات الإدارة المتكاملة لـ Azure. إذا كان لديك أي أسئلة أخرى أو كنت بحاجة إلى مساعدة بشأن خطوات محددة، فلا تتردد في طرحها!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3