كيفية توفير إيجارات متعددة
توضح هذه الإرشادات كيفية توفير العديد من الأجهزة الرئيسية المتماثلة المحاكية بشكل آمن لمجموعة من مراكز إنترنت الأشياء باستخدام سياسة تخصيص. تدعم سياسات التخصيص التي يتم تعريفها بواسطة خدمة التوفير مجموعة متنوعة من سيناريوهات التخصيص. سيناريوهين شائعين كما يلي:
تحديد الموقع الجغرافي / زمن الوصول الجغرافي: أثناء تنقل الجهاز بين المواقع، يتم تحسين زمن انتقال الشبكة من خلال توفير الجهاز لمركز إنترنت الأشياء الأقرب إلى كل موقع. في هذا السيناريو، تُحدد مجموعة من مراكز IoT التي تمتد عبر المناطق للتسجيلات. يتم تحديد نهج تخصيص أقل زمن انتقال لهذه التسجيلات. يؤدي هذا النهج خدمة تزويد الأجهزة لتقييم زمن انتقال الجهاز وتحديد مركز IoT الأقرب خارج المجموعة من مراكز IoT.
الإيجار المتعدد: قد يلزم تعيين الأجهزة المستخدمة ضمن حل إنترنت الأشياء إلى مركز إنترنت الأشياء معين أو مجموعة من محاور إنترنت الأشياء. قد يتطلب الحل كافة الأجهزة لمستأجر معين للاتصال بمجموعة معينة من مراكز IoT. في بعض الحالات، قد يمتلك المستأجر مراكز IoT ويتطلب تعيين أجهزة إلى مراكز IoT الخاصة به.
من الشائع الجمع بين هذين السيناريوهين. على سبيل المثال، عادة ما يقوم حل إنترنت الأشياء متعدد المستأجرين بتعيين أجهزة مستأجرة باستخدام مجموعة من محاور إنترنت الأشياء المنتشرة عبر مناطق مختلفة. يمكن تعيين أجهزة المستأجر هذه إلى مركز إنترنت الأشياء في المجموعة التي لديها أقل زمن انتقال استنادا إلى الموقع الجغرافي.
تستخدم هذه المقالة عينة جهاز محاكاة من Azure IoT C SDK لتوضيح كيفية توفير الأجهزة في سيناريو متعدد المستأجرين عبر المناطق. ستقوم بتنفيذ الخطوات التالية في هذه المقالة:
- استخدم Azure CLI لإنشاء مركزين إقليميين لإنترنت الأشياء (غرب الولايات المتحدة 2وشرق الولايات المتحدة)
- إنشاء تسجيل متعدد المستأجرين
- استخدم Azure CLI لإنشاء جهازين ظاهريين إقليميين لنظام التشغيل Linux للعمل كأجهزة في نفس المناطق (غرب الولايات المتحدة 2وشرق الولايات المتحدة)
- إعداد بيئة التطوير ل Azure IoT C SDK على كل من أجهزة Linux الظاهرية
- قم بمحاكاة الأجهزة للتأكد من توفيرها لنفس المستأجر في أقرب منطقة.
هام
قد تفرض بعض المناطق، من وقت لآخر، قيودا على إنشاء الأجهزة الافتراضية. في وقت كتابة هذا الدليل ، سمحت منطقتا Westus2 و Eastus بإنشاء VMs. إذا لم تتمكن من الإنشاء في إحدى هاتين المنطقتين، فيمكنك تجربة منطقة مختلفة. لمعرفة المزيد حول اختيار مناطق Azure الجغرافية عند إنشاء الأجهزة الظاهرية، راجع المناطق للأجهزة الظاهرية في Azure
المتطلبات الأساسية
إذا لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.
إكمال الخطوات في إعداد خدمة تزويد الأجهزة بمركز IoT باستخدام مدخل Azure.
استخدم بيئة Bash في Azure Cloud Shell. لمزيد من المعلومات، راجع تشغيل سريع لـ Azure Cloud Shell - Bash.
إذا كنت تفضل تشغيل أوامر مرجع CLI محلياً قم بتثبيت CLI Azure. إذا كنت تعمل على Windows أو macOS، ففكر في تشغيل Azure CLI في حاوية Docker. لمزيد من المعلومات، راجع كيفية تشغيل Azure CLI في حاوية Docker.
إذا كنت تستخدم تثبيت محلي، يُرجى تسجيل الدخول إلى Azure CLI مستخدمًا أمر az login. لإنهاء عملية المصادقة، التزم بالخطوات المعروضة في وحدتك الطرفية. للحصول على خيارات إضافية لتسجيل دخول، راجع تسجيل الدخول باستخدام Azure CLI.
عند مطالبتك، يوصى بتثبيت امتدادات Azure CLI عند الاستخدام الأول. لمزيد من المعلومات بشأن الامتدادات، راجع استخدام امتدادات مع Azure CLI.
يُرجى تشغيل إصدار az للوصول إلى الإصدار والمكتبات التابعة التي تم تثبيتها. للتحديث لآخر إصدار، يُرجى تشغيل تحديث az.
إنشاء مركزين إقليميين لإنترنت الأشياء
في هذا القسم، ستقوم بإنشاء مجموعة موارد Azure وموردين إقليميين جديدين لمركز إنترنت الأشياء لأحد المستأجرين. سيكون أحد مراكز إنترنت الأشياء لمنطقة غرب الولايات المتحدة 2 والآخر سيكون لمنطقة شرق الولايات المتحدة .
هام
يوصى باستخدام نفس مجموعة الموارد لكافة الموارد التي تم إنشاؤها في هذه المقالة. هذا سيجعل التنظيف أسهل بعد الانتهاء.
في Azure Cloud Shell، قم بإنشاء مجموعة موارد باستخدام الأمر "إنشاء مجموعة az" التالي:
az group create --name contoso-us-resource-group --location eastusقم بإنشاء مركز إنترنت الأشياء في موقع eastus ، وأضفه إلى مجموعة الموارد التي أنشأتها باستخدام الأمر "إنشاء" التالي "az iot hub" (استبدل
{unique-hub-name}باسمك الفريد):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1ربما يستغرق هذا الأمر بضع دقائق حتى يكتمل.
الآن ، قم بإنشاء مركز إنترنت الأشياء في موقع westus2 ، وأضفه إلى مجموعة الموارد التي أنشأتها باستخدام أمر إنشاء مركز az iot التالي (استبدله
{unique-hub-name}باسمك الفريد):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1ربما يستغرق هذا الأمر بضع دقائق حتى يكتمل.
إنشاء التسجيل متعدد المستأجرين
في هذا القسم، ستنشئ مجموعة تسجيل جديدة للأجهزة المستأجرة.
للبساطة، يستخدم هذا المقال شهادة مفتاح متماثل مع التسجيل. للحصول على حل أكثر أماناً، فكر في استخدام الشهادة X.509 مع سلسلة من الثقة.
في مدخل Azure، حدد خدمة تزويد الجهاز.
في قائمة الإعدادات حدد إدارة التسجيلات.
حدد + إضافة مجموعة تسجيل.
في الصفحة إضافة مجموعة تسجيل ، أدخل المعلومات التالية:
اسم المجموعة: أدخل contoso-us-devices. اسم مجموعة التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة:
'-', , ,'_''.'':'. يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-').نوع التصديق: حدد مفتاح متماثل.
إنشاء مفاتيح تلقائية: يجب تحديد خانة الاختيار هذه بالفعل.
تحديد الطريقة التي تريد بها تعيين الأجهزة إلى الموزعات: حدد أقل زمن انتقال.
حدد ربط مركز إنترنت الأشياء جديد
في الصفحة إضافة ارتباط إلى مركز إنترنت الأشياء ، أدخل المعلومات التالية:
الاشتراك: إذا كان لديك اشتراكات متعددة، فاختر الاشتراك الذي أنشأت فيه مراكز إنترنت الأشياء الإقليمية.
محور إنترنت الأشياء: حدد محور إنترنت الأشياء الذي أنشأته لموقع Eastus.
سياسة الوصول: حدد iothubowner.
حدد حفظ.
كرر الخطوات من 5 إلى 7 لمركز إنترنت الأشياء الثاني الذي قمت بإنشائه لموقع westgus .
حدد منفذي مراكز إنترنت الأشياء اللذين قمت بإنشائهما في القائمة المنسدلة تحديد موزعات إنترنت الأشياء التي يمكن تعيين هذه المجموعة إليها .
تحديد الحفظ
حدد contoso-us-devices في قائمة مجموعات التسجيل.
انسخ المفتاح الأساسي. سيتم استخدام هذا المفتاح لاحقا لإنشاء مفاتيح جهاز فريدة لكلا الجهازين المحاكاة.
إنشاء أجهزة لينكس الظاهرية الإقليمية
في هذا القسم، ستقوم بإنشاء جهازين ظاهريين إقليميين لنظام التشغيل Linux (VMs). ستقوم هذه الأجهزة الظاهرية بتشغيل عينة محاكاة للجهاز من كل منطقة لإظهار توفير الأجهزة للأجهزة المستأجرة من كلتا المنطقتين.
لتسهيل عملية التنظيف، ستتم إضافة هذه الأجهزة الظاهرية إلى نفس مجموعة الموارد التي تحتوي على محاور إنترنت الأشياء التي تم إنشاؤها، وهي مجموعة موارد contoso-us-resource-group. ومع ذلك ، سيتم تشغيل VMs في مناطق منفصلة (غرب الولايات المتحدة 2 وشرق الولايات المتحدة).
في Azure Cloud Shell، قم بتشغيل الأمر التالي لإنشاء جهاز ظاهري لمنطقة شرق الولايات المتحدة بعد إجراء تغييرات المعلمة التالية في الأمر:
--name: أدخل اسما فريدا لجهازك الإقليمي في شرق الولايات المتحدة VM.
--admin-username: استخدم اسم مستخدم المسؤول الخاص بك.
--admin-password: استخدم كلمة مرور المسؤول الخاصة بك.
az vm create \ --resource-group contoso-us-resource-group \ --name ContosoSimDeviceEast \ --location eastus \ --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \ --admin-username contosoadmin \ --admin-password myContosoPassword2018 \ --authentication-type password --public-ip-sku Standardسيستغرق هذا الأمر بضع دقائق ليكتمل.
بمجرد اكتمال الأمر، انسخ قيمة publicIpAddress للجهاز الظاهري لمنطقة شرق الولايات المتحدة.
في Azure Cloud Shell، قم بتشغيل الأمر لإنشاء جهاز ظاهري لمنطقة غرب الولايات المتحدة 2 بعد إجراء تغييرات المعلمة التالية في الأمر:
--name: أدخل اسما فريدا لجهاز West US 2 الإقليمي VM.
--admin-username: استخدم اسم مستخدم المسؤول الخاص بك.
--admin-password: استخدم كلمة مرور المسؤول الخاصة بك.
az vm create \ --resource-group contoso-us-resource-group \ --name ContosoSimDeviceWest2 \ --location westus2 \ --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \ --admin-username contosoadmin \ --admin-password myContosoPassword2018 \ --authentication-type password --public-ip-sku Standardسيستغرق هذا الأمر بضع دقائق ليكتمل.
بمجرد اكتمال الأمر، انسخ قيمة publicIpAddress للجهاز الظاهري لمنطقة غرب الولايات المتحدة 2.
افتح قذيفتين من سطر الأوامر.
الاتصال إلى أحد الأجهزة الظاهرية الإقليمية في كل غلاف باستخدام SSH.
مرر اسم مستخدم المسؤول وعنوان IP العام الذي نسخته كمعلمات إلى SSH. أدخل كلمة مرور المسؤول عند مطالبتك بذلك.
ssh contosoadmin@1.2.3.4 contosoadmin@ContosoSimDeviceEast:~$ssh contosoadmin@5.6.7.8 contosoadmin@ContosoSimDeviceWest:~$
إعداد بيئة تطوير Azure IoT C SDK
في هذا القسم، ستقوم باستنساخ Azure IoT C SDK على كل جهاز ظاهري. تحتوي SDK على نموذج يحاكي توفير جهاز المستأجر من كل منطقة.
لكل جهاز ظاهري:
قم بتثبيت CMake و g++ و gcc و Git باستخدام الأوامر التالية:
sudo apt-get update sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-allابحث عن اسم العلامة وانسخه لأحدث إصدار من SDK.
استنساخ Azure IoT C SDK على كل من VMs. استخدم العلامة التي وجدتها في الخطوة السابقة كقيمة
-bللمعلمة:git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --initينبغي أن تتوقع أنَّ هذه العملية سوف تستغرق عدة دقائق لإكمالها.
إنشاء مجلد cmake جديد داخل المستودع والتغيير إلى هذا المجلد.
mkdir ~/azure-iot-sdk-c/cmake cd ~/azure-iot-sdk-c/cmakeقم بتشغيل الأمر التالي، الذي ينشئ إصدارا من SDK خاصا بالنظام الأساسي لعميل التطوير:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..بمجرد نجاح البنية، ستبدو أسطر الإخراج القليلة الأخيرة مشابهة للإخراج التالي:
-- IoT Client SDK Version = 1.7.0 -- Provisioning SDK Version = 1.7.0 -- Looking for include file stdint.h -- Looking for include file stdint.h - found -- Looking for include file stdbool.h -- Looking for include file stdbool.h - found -- target architecture: x86_64 -- Performing Test CXX_FLAG_CXX11 -- Performing Test CXX_FLAG_CXX11 - Success -- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.1.1") -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so (found version "7.58.0") -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so -- target architecture: x86_64 -- iothub architecture: x86_64 -- Configuring done -- Generating done -- Build files have been written to: /home/contosoadmin/azure-iot-sdk-c/azure-iot-sdk-c
اشتقاق مفاتيح جهاز فريدة
عند استخدام مصادقة المفتاح المتماثل مع تسجيلات المجموعة، لا تستخدم مفاتيح مجموعة التسجيل مباشرة. بدلا من ذلك، يمكنك اشتقاق مفتاح فريد من مفتاح مجموعة التسجيل لكل جهاز. لمزيد من المعلومات، راجع تسجيلات المجموعة باستخدام مفاتيح متماثلة.
في هذا الجزء من البرنامج التعليمي، ستقوم بإنشاء مفتاح جهاز من المفتاح الرئيسي لمجموعتك لحساب HMAC-SHA256 من معرف التسجيل الفريد للجهاز. سيتم بعد ذلك تحويل النتيجة إلى تنسيق Base64.
هام
لا تقم بتضمين المفتاح الرئيسي للمجموعة في رمز جهازك.
لكل منأجهزة Eastus و Westus 2:
قم بإنشاء مفتاحك الفريد باستخدام openssl. ستستخدم البرنامج النصي Bash shell التالي (استبدله بالمفتاح الأساسي لمجموعة التسجيل الذي نسخته سابقا واستبدله
{contoso-simdevice}{primary-key}بمعرف التسجيل الفريد الخاص بك لكل جهاز. معرف التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة:'-'، ، ، ،'_''.'':'. يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-').KEY={primary-key} REG_ID={contoso-simdevice} keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000) echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64سيقوم البرنامج النصي بإخراج شيء مثل المفتاح التالي:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=الآن يحتوي كل جهاز مستأجر على مفتاح الجهاز المشتق الخاص به ومعرف التسجيل الفريد لإجراء مصادقة مفتاح متماثلة مع مجموعة التسجيل أثناء عملية التوفير.
محاكاة الأجهزة من كل منطقة
في هذا القسم، ستقوم بتحديث نموذج إدارة حسابات في Azure IoT C SDK لكل من الأجهزة الظاهرية الإقليمية.
يحاكي نموذج التعليمة البرمجية تسلسل تمهيد الجهاز الذي يرسل طلب إدارة الحسابات إلى مثيل خدمة توفير الأجهزة. يؤدي تسلسل التمهيد إلى التعرف على الجهاز وتعيينه إلى مركز إنترنت الأشياء الأقرب استنادا إلى زمن الاستجابة.
في مدخل Microsoft Azure، حدد علامة التبويب Overview لخدمة إدارة الأجهزة الخاصة بك وقم بتدوين قيمة ID Scope.
على كل من VMS ، افتح ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c للتحرير.
vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.cعلى كلا الجهازين الظاهريين، ابحث عن الثابت، واستبدل القيمة بقيمة نطاق المعرف
id_scopeالتي نسختها سابقا.static const char* id_scope = "0ne00002193";على كلا الجهازين الظاهريين، ابحث عن تعريف الدالة
main()في نفس الملف. تأكد منhsm_typeتعيين المتغير إلىSECURE_DEVICE_TYPE_SYMMETRIC_KEYكما هو موضح أدناه لمطابقة طريقة تصديق مجموعة التسجيل.احفظ التغييرات التي أجريتها على الملفات الموجودة على كلا الجهازين الظاهريين.
SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;على كلا الجهازين الظاهريين ، ابحث عن المكالمة إلى
prov_dev_set_symmetric_key_info()prov_dev_client_sample.c التي تم التعليق عليها.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");قم بإلغاء التعليق على استدعاءات الدالة، واستبدل قيم العنصر النائب (بما في ذلك أقواس الزاوية) بمعرفات التسجيل الفريدة ومفاتيح الأجهزة المشتقة لكل جهاز قمت باشتقاقه في القسم السابق. المفاتيح الموضحة أدناه هي لأغراض على سبيل المثال فقط. استخدم المفاتيح التي أنشأتها سابقا.
شرق الولايات المتحدة:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");غرب الولايات المتحدة:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");على كلا الجهازين الظاهريين، احفظ الملف.
على كلا الجهازين الظاهريين، انتقل إلى المجلد النموذجي الموضح أدناه، وقم بإنشاء العينة.
cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/ cmake --build . --target prov_dev_client_sample --config Debugبمجرد نجاح الإنشاء ، قم بتشغيل prov_dev_client_sample.exe على كلا الجهازين الظاهريين لمحاكاة جهاز مستأجر من كل منطقة. لاحظ أنه يتم تخصيص كل جهاز لمركز إنترنت الأشياء المستأجر الأقرب إلى مناطق الجهاز المحاكي.
تشغيل المحاكاة:
~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sampleمثال على الإخراج من VM شرق الولايات المتحدة:
contosoadmin@ContosoSimDeviceEast:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample Provisioning API Version: 1.2.9 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-east-hub.azure-devices.net, deviceId: contoso-simdevice-east Press enter key to exit:مثال على الإخراج من VM غرب الولايات المتحدة:
contosoadmin@ContosoSimDeviceWest:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample Provisioning API Version: 1.2.9 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-west-hub.azure-devices.net, deviceId: contoso-simdevice-west Press enter key to exit:
تنظيف الموارد
إذا كنت تخطط لمواصلة العمل مع الموارد التي تم إنشاؤها في هذه المقالة، فيمكنك تركها. وإلا، اتبع الخطوات التالية لحذف كافة الموارد التي تم إنشاؤها بواسطة هذه المقالة لتجنب الرسوم غير الضرورية.
تفترض الخطوات هنا أنك قمت بإنشاء كافة الموارد في هذه المقالة كما هو موضح في نفس مجموعة الموارد المسماة contoso-us-resource-group.
هام
حذف مجموعة الموارد لا يمكن التراجع عنه. يتم حذف مجموعة الموارد وكافة الموارد المضمنة فيها بشكل دائم. تأكد من عدم حذف مجموعة الموارد الخاطئة عن طريق الخطأ. إذا قمت بإنشاء مركز IoT داخل مجموعة موارد موجودة تحتوي على الموارد التي تريد الاحتفاظ بها، فقط احذف مورد IoT Hub نفسه بدلاً من حذف مجموعة الموارد.
لحذف مجموعة الموارد حسب الاسم:
تسجيل الدخول إلى مدخل Azure.
حدد Resource groups.
في مربع النص Filter by name...، اكتب اسم مجموعة الموارد التي تحتوي على الموارد الخاصة بك، contoso-us-resource-group.
على يسار مجموعة الموارد في قائمة النتائج، انقر فوق ... ثم حذف مجموعة الموارد.
سيطلب منك تأكيد حذف مجموعة الموارد. اكتب اسم مجموعة الموارد مرة أخرى لتأكيده، واختر Delete. بعد لحظات قليلة، يتم حذف مجموعة الموارد وكافة الموارد المضمنة.
الخطوات التالية
- لمعرفة المزيد حول إعادة التوفير، راجع:
- لمعرفة المزيد حول إلغاء التوفير، راجع
