إنشاء تطبيقات الوظائف وإدارتها في خطة Flex Consumption

توضح هذه المقالة كيفية إنشاء تطبيقات الوظائف المستضافة في خطة استهلاك Flex في Azure Functions. كما يوضح لك كيفية إدارة ميزات معينة لتطبيق مستضاف لخطة استهلاك Flex.

موارد تطبيق الوظائف خاصة ب langauge. تأكد من اختيار لغة تطوير التعليمات البرمجية المفضلة لديك في بداية المقالة.

هام

خطة Flex Consumption قيد المعاينة حاليا.

المتطلبات الأساسية

إنشاء تطبيق Flex Consumption

يوضح لك هذا القسم كيفية إنشاء تطبيق دالة في خطة Flex Consumption باستخدام إما Azure CLI أو مدخل Microsoft Azure أو Visual Studio Code. للحصول على مثال لإنشاء تطبيق في خطة استهلاك Flex باستخدام قوالب Bicep/ARM، راجع مستودع Flex Consumption.

يمكنك تخطي هذا القسم إذا اخترت بدلا من ذلك إنشاء تطبيقك ونشره باستخدام Maven.

لدعم التعليمات البرمجية للدالة الخاصة بك، تحتاج إلى إنشاء ثلاثة موارد:

  • مجموعة الموارد، وهي حاوية منطقية للموارد ذات الصلة.
  • حساب تخزين، والذي يستخدم للحفاظ على حالة دالاتك والمعلومات الأخرى المتعلقة بها.
  • تطبيق دالة في خطة Flex Consumption، والتي توفر البيئة لتنفيذ التعليمات البرمجية للدالة. يقوم تطبيق الوظائف بتعيين مشروع الدالة المحلي ويتيح لك تجميع الوظائف كوحدة منطقية لتسهيل إدارة الموارد ونشرها ومشاركتها في خطة Flex Consumption.
  1. إذا لم تكن قد فعلت ذلك بالفعل، سجل الدخول إلى Azure:

    az login
    

    az login يسجل لك الأمر الدخول إلى حساب Azure الخاص بك.

  2. az functionapp list-flexconsumption-locations استخدم الأمر لمراجعة قائمة المناطق التي تدعم استهلاك Flex حاليا.

    az functionapp list-flexconsumption-locations --output table
    
  1. إنشاء مجموعة موارد في إحدى المناطق المدعومة حاليا:

    az group create --name <RESOURCE_GROUP> --location <REGION>
    

    في الأمر أعلاه، استبدل <RESOURCE_GROUP> بقيمة فريدة في اشتراكك وبإحدى <REGION> المناطق المدعومة حاليا. ينشئ الأمر az group create مجموعة موارد.

  2. إنشاء حساب تخزين للأغراض العامة في مجموعة الموارد والمنطقة الخاصة بك:

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group <RESOURCE_GROUP> --sku Standard_LRS --allow-blob-public-access false
    

    في المثال السابق، استبدل <STORAGE_NAME> باسم مناسب لك وفريد في تخزين Azure. يجب أن تحتوي الأسماء على ثلاثة إلى 24 حرفا من الأرقام والأحرف الصغيرة فقط. يحدد Standard_LRS حساب للأغراض العامة، الذي هو مدعوم من قبل الدالات. يقوم أمر إنشاء حساب التخزين azبإنشاء حساب التخزين.

    هام

    يتم استخدام حساب التخزين لتخزين بيانات التطبيق المهمة، بما في ذلك أحيانا التعليمات البرمجية للتطبيق نفسه. يجب تقييد الوصول من التطبيقات والمستخدمين الآخرين إلى حساب التخزين.

  3. أنشئ تطبيق الدالة في Azure:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0 
    

    تطبيقات C# التي تعمل قيد المعالجة غير مدعومة حاليا عند التشغيل في خطة Flex Consumption.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime java --runtime-version 17 
    

    بالنسبة لتطبيقات Java، يتم أيضا دعم Java 11 حاليا.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime node --runtime-version 20 
    
    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime python --runtime-version 3.11 
    

    بالنسبة لتطبيقات Python، يتم أيضا دعم Python 3.10 حاليا.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime powershell --runtime-version 7.4 
    

    في هذا المثال، استبدل كل <RESOURCE_GROUP> من و <STORAGE_NAME> بمجموعة الموارد واسم الحساب الذي استخدمته في الخطوة السابقة، على التوالي. استبدل <APP_NAME> أيضا باسم فريد عمومي مناسب لك. <APP_NAME> هو أيضا المجال الافتراضي لخادم اسم المجال (DNS) لتطبيق الوظائف. az functionapp create يقوم الأمر بإنشاء تطبيق الوظائف في Azure.

    ينشئ هذا الأمر تطبيق وظائف يعمل في خطة Flex Consumption. إصدار وقت تشغيل اللغة المحدد المستخدم هو إصدار مدعوم حاليا في المعاينة.

    نظرا لأنك أنشأت التطبيق دون تحديد مثيلات جاهزة دائما، فإن تطبيقك يتحمل التكاليف فقط عند تنفيذ الوظائف بنشاط. يقوم الأمر أيضا بإنشاء مثيل Azure Application Insights مقترن في نفس مجموعة الموارد، والتي يمكنك من خلالها مراقبة تطبيق الوظائف وعرض السجلات. للمزيد من المعلومات، راجع مراقبة دوال Azure.

    
    

نشر مشروع التعليمات البرمجية

يمكنك تخطي هذا القسم إذا اخترت بدلا من ذلك إنشاء تطبيقك ونشره باستخدام Maven.

يمكنك اختيار نشر التعليمات البرمجية لمشروعك إلى تطبيق وظائف موجود باستخدام أدوات مختلفة:

هام

يستبدل التوزيع إلى تطبيق وظائف موجود دائمًا محتويات هذا التطبيق في Azure.

  1. في لوحة الأوامر، أدخل ثم حدد Azure Functions: Deploy to Function App.

  2. حدد تطبيق الوظائف الذي أنشأته للتو. عند مطالبتك بالكتابة فوق عمليات التوزيع السابقة، حدد Deploy لنشر التعليمات البرمجية للدالة إلى مورد تطبيق الوظائف الجديد.

  3. عند اكتمال النشر، حدد عرض الإخراج لعرض نتائج الإنشاء والتوزيع، بما في ذلك موارد Azure التي قمت بإنشائها. إذا فاتك الإعلام، فحدد أيقونة الجرس في الزاوية السفلية اليسرى لرؤيتها مرة أخرى.

    لقطة شاشة تظهر نافذة View Output

إنشاء تطبيقك ونشره باستخدام Maven

يمكنك استخدام Maven لإنشاء تطبيق دالة مستضاف على Flex Consumption والموارد المطلوبة أثناء النشر عن طريق تعديل ملف pom.xml.

  1. إنشاء مشروع تعليمة برمجية Java عن طريق إكمال الجزء الأول من إحدى مقالات التشغيل السريع هذه:

  2. في مشروع تعليمة Java البرمجية، افتح ملف pom.xml وقم بإجراء هذه التغييرات لإنشاء تطبيق الوظائف في خطة Flex Consumption:

    • تغيير قيمة <properties>.<azure.functions.maven.plugin.version> إلى 1.34.0.

    • في <plugin>.<configuration> القسم الخاص ب azure-functions-maven-plugin، أضف العنصر أو ألغ تعليقه <pricingTier> كما يلي:

      <pricingTier>Flex Consumption</pricingTier>
      
  3. (اختياري) قم بتخصيص خطة Flex Consumption في توزيع Maven الخاص بك عن طريق تضمين هذه العناصر أيضا في <plugin>.<configuration> القسم: .

    • <instanceSize>- تعيين حجم ذاكرة المثيل لتطبيق الوظائف. القيمة الافتراضية هي 2048.
    • <maximumInstances> - يعين أعلى قيمة للحد الأقصى لعدد المثيلات لتطبيق الوظائف.
    • <alwaysReadyInstances> - يعين عدد المثيلات الجاهزة دائما مع العناصر التابعة لمجموعات مشغلات HTTP (<http>)، ومجموعات Durable Functions (<durable>)، ومشغلات محددة أخرى (<my_function>). عند تعيين أي عدد مثيل أكبر من الصفر، يتم محاسبتك على هذه المثيلات سواء تم تنفيذ وظائفك أم لا. لمزيد من المعلومات، انظرالفواتير.
  4. قبل أن تتمكن من النشر، سجل الدخول إلى اشتراك Azure باستخدام Azure CLI.

    az login
    

    az login يسجل لك الأمر الدخول إلى حساب Azure الخاص بك.

  5. استخدم الأمر التالي لنشر مشروع التعليمات البرمجية الخاص بك إلى تطبيق وظائف جديد في Flex Consumption.

    mvn azure-functions:deploy
    

    يستخدم Maven الإعدادات في قالب pom.xml لإنشاء تطبيق الوظائف في خطة استهلاك Flex في Azure، جنبا إلى جنب مع الموارد المطلوبة الأخرى. إذا كانت هذه الموارد موجودة بالفعل، يتم نشر التعليمات البرمجية إلى تطبيق الوظائف الخاص بك، والكتابة فوق أي تعليمة برمجية موجودة.

تمكين تكامل الشبكة الظاهرية

يمكنك تمكين تكامل الشبكة الظاهرية لتطبيقك في خطة Flex Consumption. تفترض الأمثلة في هذا القسم أنك قمت بالفعل بإنشاء شبكة ظاهرية مع شبكة فرعية في حسابك. يمكنك تمكين تكامل الشبكة الظاهرية عند إنشاء تطبيقك أو في وقت لاحق.

هام

لا تدعم خطة Flex Consumption حاليا الشبكات الفرعية التي تحتوي على أسماء تحتوي على أحرف تسطير أسفل السطر (_).

لتمكين الشبكات الظاهرية عند إنشاء تطبيقك:

يمكنك تمكين تكامل الشبكة الظاهرية az functionapp create عن طريق تشغيل الأمر وتضمين --vnet المعلمات و --subnet .

  1. إنشاء الشبكة الظاهرية والشبكة الفرعية، إذا لم تكن قد فعلت ذلك بالفعل.

  2. أكمل الخطوات من 1 إلى 4 في إنشاء تطبيق Flex Consumption لإنشاء الموارد المطلوبة من قبل تطبيقك.

  3. az functionapp create قم بتشغيل الأمر ، بما في --vnet ذلك المعلمات و--subnet، كما في هذا المثال:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime <RUNTIME_NAME> --runtime-version <RUNTIME_VERSION> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>
    

    <VNET_RESOURCE_ID> القيمة هي معرف المورد للشبكة الظاهرية، وهو بالتنسيق: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCER_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>. يمكنك استخدام هذا الأمر للحصول على قائمة معرفات الشبكة الظاهرية، التي تمت تصفيتها حسب <RESOURCE_GROUP>: az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id.

للحصول على أمثلة شاملة حول كيفية إنشاء تطبيقات في Flex Consumption مع تكامل الشبكة الظاهرية، راجع هذه الموارد:

لتعديل أو حذف تكامل الشبكة الظاهرية في تطبيق موجود:

az functionapp vnet-integration add استخدم الأمر لتمكين تكامل الشبكة الظاهرية إلى تطبيق وظائف موجود:

az functionapp vnet-integration add --resource-group <RESOURCE_GROUP> --name <APP_NAME> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>

az functionapp vnet-integration remove استخدم الأمر لتعطيل تكامل الشبكة الظاهرية في تطبيقك:

az functionapp vnet-integration remove --resource-group <RESOURCE_GROUP> --name <APP_NAME>

az functionapp vnet-integration list استخدم الأمر لسرد عمليات تكامل الشبكة الظاهرية الحالية لتطبيقك:

az functionapp vnet-integration list --resource-group <RESOURCE_GROUP> --name <APP_NAME>

عند اختيار شبكة فرعية، تنطبق هذه الاعتبارات:

  • لا يمكن استخدام الشبكة الفرعية التي تختارها بالفعل لأغراض أخرى، مثل نقاط النهاية الخاصة أو نقاط نهاية الخدمة، أو تفويضها إلى أي خطة استضافة أو خدمة أخرى.
  • يمكنك مشاركة نفس الشبكة الفرعية مع أكثر من تطبيق واحد يعمل في خطة استهلاك Flex. نظرا لأنه تتم مشاركة موارد الشبكات عبر جميع التطبيقات، قد يؤثر تطبيق دالة واحد على أداء الآخرين على نفس الشبكة الفرعية.
  • في خطة Flex Consumption، قد يستخدم تطبيق وظائف واحد ما يصل إلى 40 عنوان IP، حتى عندما يتجاوز حجم التطبيق 40 مثيلا. في حين أن هذه القاعدة مفيدة عند تقدير حجم الشبكة الفرعية التي تحتاج إليها، فإنه لا يتم فرضها بدقة.

تكوين إعدادات النشر

في خطة Flex Consumption، يتم الاحتفاظ بحزمة التوزيع التي تحتوي على التعليمات البرمجية لتطبيقك في حاوية Azure Blob Storage. بشكل افتراضي، تستخدم عمليات التوزيع نفس حساب التخزين (AzureWebJobsStorage) والقيمة سلسلة الاتصال المستخدمة من قبل وقت تشغيل الوظائف للحفاظ على تطبيقك. يتم تخزين سلسلة الاتصال في DEPLOYMENT_STORAGE_CONNECTION_STRING إعداد التطبيق. ومع ذلك، يمكنك بدلا من ذلك تعيين حاوية كائن ثنائي كبير الحجم في حساب تخزين منفصل كمصدر نشر للتعليمات البرمجية الخاصة بك. يمكنك أيضا تغيير أسلوب المصادقة المستخدم للوصول إلى الحاوية.

يجب أن يفي مصدر التوزيع المخصص بهذه المعايير:

  • يجب أن يكون حساب التخزين موجودا بالفعل.
  • يجب أن تكون الحاوية لاستخدامها في عمليات النشر موجودة أيضا.
  • عندما يستخدم أكثر من تطبيق حساب التخزين نفسه، يجب أن يكون لكل منها حاوية نشر خاصة به. يؤدي استخدام حاوية فريدة لكل تطبيق إلى منع الكتابة فوق حزم التوزيع، وهو ما سيحدث إذا شاركت التطبيقات نفس الحاوية.

عند تكوين مصادقة تخزين النشر، ضع هذه الاعتبارات في الاعتبار:

  • عند استخدام سلسلة الاتصال للاتصال بحساب تخزين النشر، يجب أن يكون إعداد التطبيق الذي يحتوي على سلسلة الاتصال موجودا بالفعل.
  • عند استخدام هوية مدارة معينة من قبل المستخدم، يتم ربط الهوية المقدمة بتطبيق الوظائف. Storage Blob Data Contributor يتم أيضا تعيين الدور المحدد في حساب تخزين النشر إلى الهوية.
  • عند استخدام هوية مدارة معينة من قبل النظام، يتم إنشاء هوية عندما لا تكون الهوية الصالحة المعينة من قبل النظام موجودة بالفعل في تطبيقك. عند وجود هوية معينة من قبل النظام، Storage Blob Data Contributor يتم أيضا تعيين الدور المحدد في حساب تخزين النشر إلى الهوية.

لتكوين إعدادات النشر عند إنشاء تطبيق الوظائف في خطة Flex Consumption:

az functionapp create استخدم الأمر وقم بتوفير هذه الخيارات الإضافية التي تخصص تخزين النشر:

المعلمة ‏‏الوصف‬
--deployment-storage-name اسم حساب تخزين النشر.
--deployment-storage-container-name اسم الحاوية في الحساب لاحتواء حزمة توزيع التطبيق.
--deployment-storage-auth-type نوع المصادقة الذي يجب استخدامه للاتصال بحساب تخزين النشر. تتضمن StorageAccountConnectionStringالقيم المقبولة و UserAssignedIdentityو.SystemAssignedIdentity
--deployment-storage-auth-value عند استخدام StorageAccountConnectionString، يتم تعيين هذه المعلمة إلى اسم إعداد التطبيق الذي يحتوي على سلسلة الاتصال إلى حساب تخزين النشر. عند استخدام UserAssignedIdentity، يتم تعيين هذه المعلمة إلى اسم معرف المورد للهوية التي تريد استخدامها.

ينشئ هذا المثال تطبيق وظائف في خطة Flex Consumption باستخدام حساب تخزين توزيع منفصل وهوية معينة من قبل المستخدم:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime dotnet-isolated --runtime-version 8.0 --flexconsumption-location "<REGION>" --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME> --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value <MI_RESOURCE_ID>

يمكنك أيضا تعديل تكوين تخزين التوزيع لتطبيق موجود.

az functionapp deployment config set استخدم الأمر لتعديل تكوين تخزين التوزيع:

az functionapp deployment config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>

تكوين ذاكرة المثيل

يمكن تعيين حجم ذاكرة المثيل الذي تستخدمه خطة Flex Consumption بشكل صريح عند إنشاء تطبيقك. لمزيد من المعلومات حول الأحجام المدعومة، راجع ذاكرة المثيل.

لتعيين حجم ذاكرة مثيل يختلف عن الحجم الافتراضي عند إنشاء تطبيقك:

حدد المعلمة --instance-memory في الأمر الخاص بك az functionapp create . ينشئ هذا المثال تطبيق C# بحجم مثيل :4096

az functionapp create --instance-memory 4096 --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0

في أي وقت، يمكنك تغيير إعداد حجم ذاكرة المثيل الذي يستخدمه تطبيقك.

يستخدم az functionapp scale config set هذا المثال الأمر لتغيير إعداد حجم ذاكرة المثيل إلى 4096 ميغابايت:

az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 4096

تعيين عدد المثيلات الجاهزة دائما

يمكنك تعيين عدد من المثيلات الجاهزة دائما لمجموعات التحجيم لكل وظيفة أو وظائف فردية، للحفاظ على تحميل الدالات الخاصة بك وجاهزة للتنفيذ. هناك ثلاث مجموعات خاصة، كما هو الحال في التحجيم لكل وظيفة:

  • http - جميع الوظائف التي تم تشغيلها من قبل HTTP في التطبيق تتدرج معا في مثيلاتها الخاصة.
  • durable - جميع الدوال التي تم تشغيلها بشكل دائم (التنسيق والنشاط والكيان) في التطبيق تتدرج معا في مثيلاتها الخاصة.
  • blob - جميع الكائنات الثنائية كبيرة الحجم (شبكة الأحداث) التي تم تشغيلها في توسيع نطاق التطبيق معا في مثيلاتها الخاصة.

استخدم http، durable أو blob كاسم لإعداد زوج قيمة الاسم لتكوين أعداد جاهزة دائما لهذه المجموعات. بالنسبة لجميع الوظائف الأخرى في التطبيق، تحتاج إلى تكوين جاهزة دائما لكل وظيفة فردية باستخدام التنسيق function:<FUNCTION_NAME>=n.

استخدم المعلمة --always-ready-instances az functionapp create مع الأمر لتعريف تعيين مثيل جاهز دائما واحد أو أكثر. يعين هذا المثال عدد المثيلات الجاهزة دائما لجميع الدالات التي تم تشغيلها من HTTP إلى 5:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances http=10

يعين هذا المثال عدد المثيلات الجاهزة دائما لكافة دوال مشغل Durable وتعيين 3 عدد المثيلات الجاهزة دائما إلى 2 لدالة مشغل ناقل خدمة تسمى function5:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances durable=3 function:function5=2

يمكنك أيضا تعديل المثيلات الجاهزة دائما على تطبيق موجود عن طريق إضافة تعيينات المثيل أو إزالتها أو عن طريق تغيير عدد تعيينات المثيلات الموجودة.

يستخدم az functionapp scale config always-ready set هذا المثال الأمر لتغيير عدد المثيلات الجاهزة دائما لمجموعة مشغلات HTTP إلى 10:

az functionapp scale config always-ready set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --settings http=10

لإزالة المثيلات الجاهزة دائما، استخدم az functionapp scale config always-ready delete الأمر ، كما في هذا المثال الذي يزيل جميع المثيلات الجاهزة دائما من كل من مجموعة مشغلات HTTP وأيضا دالة تسمى hello_world:

az functionapp scale config always-ready delete --resource-group <RESOURCE_GROUP> --name <APP_NAME> --setting-names http function:hello_world

تعيين حدود تزامن HTTP

ما لم تقم بتعيين حدود معينة، يتم تحديد الإعدادات الافتراضية لتزامن HTTP لتطبيقات خطة استهلاك Flex استنادا إلى إعداد حجم المثيل الخاص بك. لمزيد من المعلومات، راجع تزامن مشغل HTTP.

إليك كيفية تعيين حدود تزامن HTTP لتطبيق موجود:

az functionapp scale config set استخدم الأمر لتعيين حدود تزامن HTTP معينة لتطبيقك، بغض النظر عن حجم المثيل.

az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --trigger-type http --trigger-settings perInstanceConcurrency=10

يعين هذا المثال مستوى تزامن مشغل HTTP إلى 10. بعد تعيين قيمة تزامن HTTP على وجه التحديد، يتم الاحتفاظ بهذه القيمة على الرغم من أي تغييرات في إعداد حجم مثيل التطبيق.

عرض المناطق المدعومة حاليا

أثناء المعاينة، يمكنك فقط التشغيل على خطة استهلاك Flex فقط في مناطق محددة. لعرض قائمة المناطق التي تدعم حاليا خطط استهلاك Flex:

  1. إذا لم تكن قد فعلت ذلك بالفعل، سجل الدخول إلى Azure:

    az login
    

    az login يسجل لك الأمر الدخول إلى حساب Azure الخاص بك.

  2. az functionapp list-flexconsumption-locations استخدم الأمر لمراجعة قائمة المناطق التي تدعم استهلاك Flex حاليا.

    az functionapp list-flexconsumption-locations --output table
    

عند إنشاء تطبيق في مدخل Microsoft Azure أو باستخدام Visual Studio Code، تتم تصفية المناطق غير المدعومة حاليا من قائمة المنطقة.