تغييرات إدارة أدوار IoT Edge لجهاز Azure Stack Edge

بالنسبة إلى إدارة أدوار Azure IoT Edge لجهاز Azure Stack Edge، استخدم الإصدار المحدث من واجهة برمجة التطبيقات وSDK وAzure PowerShell، والذي من المقرر إصداره في يناير 2021.

توضح هذه المقالة بالتفصيل التغييرات التي تحتاج إلى إجراء عند استخدام هذا الإصدار الأحدث.

لن يكون تحديث يناير 2021 متاحًا إلا لأجهزة Azure Stack Edge Pro - GPU وAzure Stack Edge Pro R وAzure Stack Edge Mini R. لا تنطبق المعلومات الواردة في هذه المقالة إلا على هذه الأجهزة.

ملاحظة

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

تغييرات إدارة أدوار IoT Edge

بعد تثبيت تحديث يناير 2021 الاختياري على جهاز Azure Stack Edge، ستحتاج إلى استخدام أحدث إصدار من API وSDK وPowerShell cmdlets لإدارة أدوار IoT Edge.

لن تكون التغييرات التالية ضرورية إلا إذا قمت بتطبيق تحديث يناير 2021:

  • إذا كنت تستخدم حاليا إصدار Role Management API 2019-08-01، فقم بالترقية إلى إصدار واجهة برمجة التطبيقات الذي سيتم إصداره في يناير 2021.
  • إذا كنت تستخدم حاليا إدارة الأدوار عبر الإصدار 1.0.0 من SDK، فقم بالترقية إلى الإصدار الذي سيتم إصداره في يناير 2021.
  • إذا كنت تستخدم إدارة الأدوار بـ Azure PowerShell cmdlets (معاينة)، مثل ⁧Get-AzStackEdgeRole⁩، أو⁧New-AzStackEdgeRole⁩، أو ⁧Set-AzStackEdgeRole⁩، أو ⁧Remove-AzStackEdgeRole⁩انتظر حتى يتم إصدار cmdlets الجديدة في فبراير 2021.

استخدام واجهة برمجة التطبيقات API

إذا كنت تقوم حاليًا بإدارة دور IoT Edge عبر واجهة برمجة التطبيقات API، فإنه يجب عليك استخدام إصدار API الجديد 2020-12-01، والذي سيتم نشره لاحقًا. إذا كنت تستخدم API الدور الحالي، بعد تثبيت إصدار برنامج الجهاز القادم، يجب الانتقال إلى دور PUT أو GET أو DELETE Kubernetes، متبوعًا بـ API للوظيفة الإضافية لـ PUT IoT.

لطريقة PUT

طلب HTTP الحالي

  • يتم إجراء اتصالات API في URI هذا: '⁧ https://management.azure.com/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/testedgedevice/roles/IoTRole1?api-version=2019-08-01 ⁩'

  • يبدو نص الطلب كما يلي:

    {
        "kind": "IOT",
        "properties": {
            "hostPlatform": "Linux",
            "ioTDeviceDetails": {
                "deviceId": "iotdevice",
                "ioTHostHub": "iothub.azure-devices.net",
                "ioTHostHubId": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/Microsoft.Devices/IotHubs/testrxiothub",
                "authentication": {
                    "symmetricKey": {
                        "connectionString": {
                            "value": "Encrypted<<HostName=iothub.azure-devices.net;DeviceId=iotDevice;SharedAccessKey=2C750FscEas3JmQ8Bnui5yQWZPyml0/UiRt1bQwd8=>>",
                            "encryptionCertThumbprint": "348586569999244",
                            "encryptionAlgorithm": "AES256"
                        }
                    }
                }
            },
            "ioTEdgeDeviceDetails": {
                "deviceId": "iotEdge",
                "ioTHostHub": "iothub.azure-devices.net",
                "ioTHostHubId": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/Microsoft.Devices/IotHubs/testrxiothub",
                "authentication": {
                    "symmetricKey": {
                        "connectionString": {
                            "value": "Encrypted<<HostName=iothub.azure-devices.net;DeviceId=iotEdge;SharedAccessKey=2C750FscEas3JmQ8Bnui5yQWZPyml0/UiRt1bQwd8=>>",
                            "encryptionCertThumbprint": "1245475856069999244",
                            "encryptionAlgorithm": "AES256"
                        }
                    }
                }
            },
            "shareMappings": [],
            "roleStatus": "Enabled"
        }
    }
    

طلب HTTP القادم

  • يتم إجراء اتصالات API لدور Kubernetes في URI التالية:

    'https://management.azure.com/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/testedgedevice/roles/KubernetesRole1?api-version=2020-12-01'

    سيبدو نص الطلب كما يلي:

    {
        "kind": "Kubernetes",
        "properties": {
            "hostPlatform": "Linux",
            "kubernetesClusterInfo": {
                "version": "v1.17.3"
            },
            "kubernetesRoleResources": {
                "storage": {
                    "endpoints": []
                },
                "compute": {
                    "vmProfile": "DS1_v2"
                }
            }
        }
    }
    
  • يتم إجراء اتصالات API للوظيفة الإضافية لـ IoT Edge في URI التالي:

    'https://management.azure.com/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/testedgedevice/roles/KubernetesRole1/addons/iotaddon?api-version=2020-12-01'

    سيبدو نص الطلب كما يلي:

    {
        "kind": "IoT",
        "properties": {
            "ioTDeviceDetails": {
                "deviceId": "iotdevice",
                "ioTHostHub": "iothub.azure-devices.net",
                "ioTHostHubId": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/Microsoft.Devices/IotHubs/testrxiothub",
                "authentication": {
                    "symmetricKey": {
                        "connectionString": {
                            "value": "Encrypted<<HostName=iothub.azure-devices.net;DeviceId=iotDevice;SharedAccessKey=2C750FscEas3JmQ8Bnui5yQWZPyml0/UiRt1bQwd8=>>",
                            "encryptionCertThumbprint": "348586569999244",
                            "encryptionAlgorithm": "AES256"
                        }
                    }
                }
            },
            "ioTEdgeDeviceDetails": {
                "deviceId": "iotEdge",
                "ioTHostHub": "iothub.azure-devices.net",
                "ioTHostHubId": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/Microsoft.Devices/IotHubs/testrxiothub",
                "authentication": {
                    "symmetricKey": {
                        "connectionString": {
                            "value": "Encrypted<<HostName=iothub.azure-devices.net;DeviceId=iotEdge;SharedAccessKey=2C750FscEas3JmQ8Bnui5yQWZPyml0/UiRt1bQwd8=>>",
                            "encryptionCertThumbprint": "1245475856069999244",
                            "encryptionAlgorithm": "AES256"
                        }
                    }
                }
            }
        }
    }
    

لأسلوب GET

استجابة HTTP الحالية

  • يتم إجراء اتصالات API في URI التالي:

    'https://management.azure.com/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/testedgedevice/roles/IoTRole1?api-version=2019-08-01'

  • يبدو نص الاستجابة كما يلي:

        "kind": "IOT",
        "properties": {
            "hostPlatform": "Linux",
            "ioTDeviceDetails": {
                "deviceId": "iotdevice",
                "ioTHostHub": "iothub.azure-devices.net",
                "ioTHostHubId": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/Microsoft.Devices/IotHubs/testrxiothub",
                "authentication": {
                    "symmetricKey": {}
                }
            },
            "ioTEdgeDeviceDetails": {
                "deviceId": "iotEdge",
                "ioTHostHub": "iothub.azure-devices.net",
                "ioTHostHubId": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/Microsoft.Devices/IotHubs/testrxiothub",
                "authentication": {
                    "symmetricKey": {}
                }
            },
            "shareMappings": [],
            "roleStatus": "Enabled"
        },
        "id": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/testedgedevice/roles/IoTRole1",
        "name": "IoTRole1",
        "type": "dataBoxEdgeDevices/roles"
    }    
    

استجابة HTTP القادمة

  • يتم إجراء اتصالات API في URI التالي:

    'https://management.azure.com/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/testedgedevice/roles/KubernetesRole1/addons/iotaddon?api-version=2020-12-01'

  • يبدو نص الاستجابة كما يلي:

    {
        "kind": "IoT",
        "properties": {
            "provisioningState": "Creating",
            "ioTDeviceDetails": {
                "deviceId": "iotdevice",
                "ioTHostHub": "iothub.azure-devices.net",
                "ioTHostHubId": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/Microsoft.Devices/IotHubs/testrxiothub",
                "authentication": {
                    "symmetricKey": {}
                }
            },
            "ioTEdgeDeviceDetails": {
                "deviceId": "iotEdge",
                "ioTHostHub": "iothub.azure-devices.net",
                "ioTHostHubId": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/Microsoft.Devices/IotHubs/testrxiothub",
                "authentication": {
                    "symmetricKey": {}
                }
            },
            "version": "0.1.0-beta10"
        },
        "id": "/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/res1/roles/kubernetesRole/addons/iotName",
        "name": " iotName",
        "type": "Microsoft.DataBoxEdge/dataBoxEdgeDevices/roles/addon",
    }
    

للأسلوب DELETE

اتصالات API الحالية

يتم إجراء اتصالات API في URI التالي:

'https://management.azure.com/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/testedgedevice/roles/IoTRole1?api-version=2019-08-01'

اتصالات API القادمة

يتم إجراء اتصالات API في URI التالي:

'https://management.azure.com/subscriptions/4385cf00-2d3a-425a-832f-f4285b1c9dce/resourceGroups/GroupForEdgeAutomation/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/testedgedevice/roles/KubernetesRole1/addons/iotaddon?api-version=2020-12-01'

استخدام SDK

إذا كنت تستخدم SDK، بعد تثبيت تحديث يناير 2021، فستحتاج إلى تغيير الطريقة التي تقوم بها بإعداد دور IoT Edge، كما هو موضح في العينة التالية. ستقوم بعد ذلك بتنزيل حزمة NuGet القادمة وتثبيتها للانتقال إلى SDK الجديد، كما هو موضح هنا.

عينة SDK الحالية

var iotRoleStatus = "Enabled";
var iotHostPlatform = "Linux";
var id = $@"/subscriptions/546ec571-2d7f-426f-9cd8-0d695fa7edba/resourceGroups/resourceGroup/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/deviceName/roles/iotrole"; 
var name = "iotrole";
var type = "Microsoft.DataBoxEdge/dataBoxEdgeDevices/role";
var iotRoleName = "iotrole";
var ioTDeviceDetails = new IoTDeviceInfo(...);
var ioTEdgeDeviceDetails = new IoTDeviceInfo(...);
var ioTEdgeAgentInfo = new IoTEdgeAgentInfo(...);
var shareMappings = new List<MountPointMap>(...);

var role = new IoTRole(roleStatus, 
    hostPlatform, 
    shareMappings, 
    ioTDeviceDetails, 
    ioTEdgeDeviceDetails, 
    ioTEdgeAgentInfo, 
    id, 
    name, 
    type);

DataBoxEdgeManagementClient.Roles.CreateOrUpdate(deviceName, iotRoleName, role, resourceGroup);

عينة SDK الجديدة

var k8sRoleStatus = "Enabled";
var k8sHostPlatform = "Linux";
var k8sId = $@"/subscriptions/546ec571-2d7f-426f-9cd8-0d695fa7edba/resourceGroups/resourceGroup/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/deviceName/roles/KubernetesRole"; 
var k8sRoleName = "KubernetesRole";
var k8sClusterVersion = "v1.17.3"; //Final values will be updated here around January 2021
var k8sVmProfile = "DS1_v2"; //Final values will be updated here around January 2021
var type = "Microsoft.DataBoxEdge/dataBoxEdgeDevices/role";
var k8sRole = new KubernetesRole(
    roleStatus,
    hostPlatform,
    shareMappings,
    k8sClusterVersion,
    k8sVmProfile,
    k8sId,
    k8sRoleName,
    type
);
DataBoxEdgeManagementClient.Roles.CreateOrUpdate(deviceName, k8sRoleName, k8sRole, resourceGroup); //Final usage will be updated here around January 2021

var ioTId = $@"/subscriptions/546ec571-2d7f-426f-9cd8-0d695fa7edba/resourceGroups/resourceGroup/providers/Microsoft.DataBoxEdge/dataBoxEdgeDevices/deviceName/roles/KubernetesRole/addons/iotaddon";
var ioTAddonName = "iotaddon";
var ioTAddonType = "Microsoft.DataBoxEdge/dataBoxEdgeDevices/roles/addons";
var addon = new IoTAddon(
    ioTDeviceDetails, 
    ioTEdgeDeviceDetails, 
    ioTEdgeAgentInfo, 
    ioTId, 
    ioTAddonName, 
    ioTAddonType);
DataBoxEdgeManagementClient.AddOns.CreateOrUpdate(deviceName, k8sRoleName, addonName, addon, resourceGroup); //Final usage will be updated here around January 2021

استخدام Cmdlet

إذا كنت تستخدم حاليًا ⁧Get-AzStackEdgeRole⁩، أو ⁧New-AzStackEdgeRole⁩، أو ⁧Set-AzStackEdgeRole⁩ أو ⁧Remove-AzStackEdgeRole⁩ cmdlet، فستحتاج إلى انتظار الإصدار الجديد المخطط لإصداره في فبراير 2021.

الأسئلة المتداولة

أنا أستخدم Azure Stack Edge Pro - FPGA. هل يؤثر تحديث يناير 2021 على نموذج FPGA؟

كلا. لن ينطبق تحديث يناير 2021 إلا على أجهزة Azure Stack Edge Pro - FPGA وAzure Stack Edge Pro R وAzure Stack Edge Mini R. لا يتأثر Azure Stack Edge Pro - FPGA بهذا التحديث ولا يتطلب أي تغييرات على إدارة أدوار IoT Edge.

⁩بعد تحديث Azure Stack Edge Pro - GPU إلى برنامج الجهاز الجديد في يناير 2021، هل تتأثر أي من الخدمات الحالية؟⁧

كلا. لن تتأثر الخدمات المكونة بعد تثبيت تحديث يناير 2021 للجهاز.

⁩ما هي التغييرات عالية المستوى على واجهة برمجة تطبيقات إدارة IoT Edge أو SDK أو cmdlet؟⁧

IoT Edge هو وظيفة إضافية ضمن دور Kubernetes، ما يعني أنك ستحتاج أولاً إلى التأكد من تكوين Kubernetes ثم إجراء تكوين IoT Edge.

الخطوات التالية