如何链接和管理 IoT 中心

Azure IoT 中心设备预配服务 (DPS) 可以跨一个或多个 IoT 中心预配设备。 在 DPS 可以将设备预配到某个 IoT 中心之前,该 IoT 中心必须已链接到 DPS 实例。 链接后,可以在分配策略中使用 IoT 中心。 分配策略确定 DPS 如何将设备分配到 IoT 中心。 本文提供有关如何链接 IoT 中心并在 DPS 实例中对其进行管理的说明。

链接的 IoT 中心和分配策略

DPS 只能将设备预配到已链接到它的 IoT 中心。 将 IoT 中心链接到 DPS 实例可提供对 IoT 中心设备注册表的服务读取/写入权限。 有了这些权限,DPS 可以注册设备 ID 并设置设备孪生的初始配置。 链接 IoT 中心可能位于任何 Azure 区域。 可将其他订阅中的中心链接到 DPS 实例。

IoT 中心在链接到 DPS 后,它可以参与分配。 它是否以及如何参与分配取决于用于预配设备的注册中的设置,以及链接的 IoT 中心本身的设置。

以下设置控制 DPS 如何使用链接的 IoT 中心:

  • 连接字符串:设置由 DPS 用来连接到链接的 IoT 中心的 IoT 中心连接字符串。 该连接字符串基于 IoT 中心的共享访问策略之一。 DPS 需要对 IoT 中心拥有以下权限:RegistryWrite 和 ServiceConnect。 该连接字符串必须用于拥有这些权限的共享访问策略。 若要详细了解 IoT 中心共享访问策略,请参阅 IoT 中心访问控制和权限

  • 分配权重:确定当 DPS 对一组 IoT 中心的设备分配进行哈希处理时选择某个 IoT 中心的可能性。 该值可以介于 1 和 1000 之间。 默认值为 1(或 null)。 较高的值会提高 IoT 中心被选中的概率。

  • 应用分配策略:设置 IoT 中心是否参与分配策略。 默认值为“是”(true)。 如果设置为“否”(false),则不会将设备分配到 IoT 中心。 仍可以在注册时选择 IoT 中心,但它不会参与分配。 可以使用此设置暂时或永久禁止某个 IoT 中心参与分配;例如,在接近允许的设备数时。

若要了解 DPS 分配策略以及链接的 IoT 中心如何参与这些策略,请参阅管理分配策略

添加链接的 IoT 中心

将 IoT 中心链接到 DPS 实例后,它可以参与分配。 可以添加订阅内部或外部的 IoT 中心。 链接 IoT 中心时,它不一定可用于现有注册中的分配:

  • 对于未显式设置要应用分配策略的 IoT 中心的注册,新链接的 IoT 中心将立即开始参与分配。

  • 对于显式设置了要应用分配策略的 IoT 中心的注册,需要手动或以编程方式将新的 IoT 中心添加到注册设置,这样它才能参与分配。

限制

  • 使用链接的 IoT 中心和专用终结点时存在一些限制。 有关详细信息,请参阅专用终结点的限制

  • 链接的 IoT 中心的“使用共享访问策略进行连接”必须设置为“允许”

在 Azure 门户中,可以从 DPS 实例的左侧菜单中或者在创建或更新注册时从注册链接 IoT 中心。 在这两种情况下,IoT 中心的范围都限定为 DPS 实例(而不仅仅是注册)。

若要在 Azure 门户中将 IoT 中心链接到 DPS 实例,请执行以下操作:

  1. 在 DPS 实例的左侧菜单中,选择“链接的 IoT 中心”。

  2. 在页面顶部,选择“+ 添加”。

  3. 在“添加 IoT 中心的链接”页上,选择包含该 IoT 中心的订阅,然后从“IoT 中心”列表中选择该 IoT 中心的名称。

  4. 选择 IoT 中心后,选择由 DPS 用来连接到 IoT 中心的访问策略。 “访问策略”列表会显示在选定的 IoT 中心上定义的所有共享访问策略,为这些策略定义了“RegistryWrite”和“ServiceConnect”权限。 默认值为“iothubowner”策略。 选择要使用的策略。

  5. 选择“保存”。

创建或更新注册时,可以使用注册中的“链接新的 IoT 中心”按钮。 你将看到与上述相同的页面和选项。 保存链接的中心后,它将在 DPS 实例上可用,并且可以从注册中选择。

注意

在 Azure 门户中,无法在添加链接的 IoT 中心时设置“分配权重”和“应用分配策略”设置。 可以在链接 IoT 中心之后更新这些设置。 有关详细信息,请参阅更新链接的 IoT 中心

使用 az iot dps linked-hub create Azure CLI 命令将 IoT 中心链接到 DPS 实例。

例如,以下命令使用名为 MyExampleHub 的 IoT 中心的 iothubowner 共享访问策略的连接字符串链接该 IoT 中心。 此命令将“分配权重”和“应用分配策略”设置保留默认值,但你可以根据需要为这些设置指定值。

az iot dps linked-hub create --dps-name MyExampleDps --resource-group MyResourceGroup --connection-string "HostName=MyExampleHub.azure-devices.cn;SharedAccessKeyName=iothubowner;SharedAccessKey=XNBhoasdfhqRlgGnasdfhivtshcwh4bJwe7c0RIGuWsirW0=" --location chinanorth

DPS 还支持使用创建或更新 DPS 资源 REST API、资源管理器模板DPS 管理 SDK 链接 IoT 中心。

更新链接的 IoT 中心

可以更新链接的 IoT 中心上的设置,以更改其分配权重、是否可以对其应用分配策略,以及由 DPS 用来连接该 IoT 中心的连接字符串。 更新 IoT 中心的设置时,更改会立即生效,无论 IoT 中心是在注册中指定的还是默认使用的。

使用 Azure 门户更新链接的 IoT 中心

在 Azure 门户中,可以更新“分配权重”和“应用分配策略”设置。

若要使用 Azure 门户更新链接的 IoT 中心的设置,请执行以下操作:

  1. 在 DPS 实例的左侧菜单中选择“链接的 IoT 中心”,然后从列表中选择该 IoT 中心。

  2. 在“链接的 IoT 中心详细信息”页上:

    Screenshot that shows the linked IoT hub details page.

    • 使用“分配权重”滑块或文本框选择介于 1 和 1000 之间的权重。 默认值为 1。

    • 设置“应用分配策略”开关,指定链接的 IoT 中心是否应包含在分配中。

  3. 保存设置。

注意

无法在 Azure 门户中更新由 DPS 用来连接 IoT 中心的连接字符串。 可以改用 Azure CLI 更新连接字符串,或者可以从 DPS 实例中删除链接的 IoT 中心,然后重新链接它。 有关详细信息,请参阅更新链接的 IoT 中心的密钥

使用 Azure CLI 更新链接的 IoT 中心

使用 Azure CLI 可以更新“分配权重”、“应用分配策略”和“连接字符串”设置。

使用 az iot dps linked-hub update 命令更新“分配权重”或“应用分配策略”设置。 例如,以下命令为链接的 IoT 中心设置“分配权重”和“应用分配策略”:

az iot dps linked-hub update --dps-name MyExampleDps --resource-group MyResourceGroup --linked-hub MyExampleHub --allocation-weight 2 --apply-allocation-policy true

使用 az iot dps update 命令更新链接的 IoT 中心的连接字符串。 可以将 --set 参数与你要使用的 IoT 中心共享访问策略的连接字符串一起使用。 有关详细信息,请参阅更新链接的 IoT 中心的密钥

DPS 还支持使用创建或更新 DPS 资源 REST API、资源管理器模板DPS 管理 SDK 更新链接的 IoT 中心。

删除链接的 IoT 中心

从 DPS 实例中删除链接的 IoT 中心后,不再可以在将来的注册中设置该 IoT 中心。 但是,不一定会从现有注册的分配中删除它:

  • 对于未显式设置要应用分配策略的 IoT 中心的注册,已删除的链接 IoT 中心不再可用于分配。

  • 对于显式设置了要应用分配策略的 IoT 中心的注册,需要手动或以编程方式从注册设置中删除该 IoT 中心,这样才能禁止它参与分配。 如果不这样做,当设备尝试通过注册进行预配时可能会导致错误。

使用 Azure 门户删除链接的 IoT 中心

若要在 Azure 门户上从 DPS 实例中删除链接的 IoT 中心,请执行以下操作:

  1. 在 DPS 实例的左侧菜单中,选择“链接的 IoT 中心”。

  2. 从 IoT 中心列表中,选中要删除的一个或多个 IoT 中心旁边的复选框。 然后选择页面顶部的“删除”,并在出现提示时确认所做的选择。

使用 Azure CLI 删除链接的 IoT 中心

使用 az iot dps linked-hub delete 命令从 DPS 实例中删除链接的 IoT 中心。 例如,以下命令删除名为 MyExampleHub 的 IoT 中心:

az iot dps linked-hub delete --dps-name MyExampleDps --resource-group MyResourceGroup --linked-hub MyExampleHub

DPS 还支持使用创建或更新 DPS 资源 REST API、资源管理器模板DPS 管理 SDK 从 DPS 实例中删除链接的 IoT 中心。

更新链接的 IoT 中心的密钥

有时需要轮换或更新已链接到 DPS 的 IoT 中心的对称密钥。 在这种情况下,还需要在 DPS 中更新链接的 IoT 中心的连接字符串设置。 请注意,在更新 IoT 中心的密钥之后、使用基于该密钥的新连接字符串更新 DPS 实例之前的这一段过渡期,预配到 IoT 中心的操作将会失败。 因此,我们建议使用 Azuer CLI 更新密钥,因为这样可以直接更新链接的中心的连接字符串。 如果使用 Azure 门户,必须从 DPS 实例中删除 IoT 中心,然后重新链接它才能更新连接字符串。

使用 Azure 门户更新密钥

使用 Azure 门户时无法更新链接的 IoT 中心的连接字符串设置。 而是需要从 DPS 实例中删除链接的 IoT 中心,然后重新添加它。

若要在 Azure 门户中更新链接的 IoT 中心的对称密钥,请执行以下操作:

  1. 在 Azure 门户上 DPS 实例的左侧菜单中,选择要更新其密钥的 IoT 中心。

  2. 在“链接的 IoT 中心详细信息”页上,记下“分配权重”和“应用分配策略”的值,稍后在将 IoT 中心重新链接到 DPS 实例时需要这些值。 然后,选择“管理资源”转到 IoT 中心。

  3. 在 IoT 中心的左侧菜单中的“安全设置”下,选择“共享访问策略”。

  4. 在“共享访问策略”中的“管理共享访问策略”下,选择由 DPS 实例用来连接到链接的 IoT 中心的策略。

  5. 在页面顶部,选择“重新生成主密钥”、“重新生成辅助密钥”或“交换密钥”,并在出现提示时确认所做的选择。

  6. 导航回 DPS 实例。

  7. 按照删除 IoT 中心中的步骤从 DPS 实例中删除 IoT 中心。

  8. 按照链接 IoT 中心中的步骤使用策略的新连接字符串将 IoT 中心重新链接到 DPS 实例。

  9. 如果需要还原“分配权重”和“应用分配策略”设置,请使用在步骤 2 中保存的值执行更新链接的 IoT 中心中的步骤。

使用 Azure CLI 更新密钥

若要使用 Azure CLS 更新链接的 IoT 中心的对称密钥,请执行以下操作:

  1. 使用 az iot hub policy renew-key 命令交换或重新生成 IoT 中心的共享访问策略的对称密钥。 例如,以下命令续订 IoT 中心的 iothubowner 共享访问策略的主密钥:

    az iot hub policy renew-key --hub-name MyExampleHub --name owner --rk primary
    
  2. 使用 az iot hub connection-string show 命令获取共享访问策略的新连接字符串。 例如,以下命令获取 iothubowner 共享访问策略的主连接字符串,上一个命令为该策略重新生成了主密钥:

    az iot hub connection-string show --hub-name MyExampleHub --policy-name owner --key-type primary
    
  3. 使用 az iot dps linked-hub list 命令查找 IoT 中心在 DPS 实例的链接 IoT 中心集合中的位置。 例如,以下命令获取 owner 共享访问策略的主连接字符串,上一个命令为该策略重新生成了主密钥:

    az iot dps linked-hub list --dos-name MyExampleDps
    

    输出将显示你要更新其连接字符串的链接 IoT 中心在 DPS 实例维护的链接 IoT 中心表中的位置。 在本例中,它是列表中的第一个 IoT 中心,即 MyExampleHub。

    [
    {
        "allocationWeight": null,
        "applyAllocationPolicy": null,
        "connectionString": "HostName=MyExampleHub.azure-devices.cn;SharedAccessKeyName=iothubowner;SharedAccessKey=****",
        "location": "chinanorth",
        "name": "MyExampleHub.azure-devices.cn"
    },
    {
        "allocationWeight": null,
        "applyAllocationPolicy": null,
        "connectionString": "HostName=MyExampleHub-2.azure-devices.cn;SharedAccessKeyName=iothubowner;SharedAccessKey=****",
        "location": "chinanorth",
        "name": "NyExampleHub-2.azure-devices.cn"
    }
    ]
    
  4. 使用 az iot dps update 命令更新链接的 IoT 中心的连接字符串。 使用 --set 参数和链接的 IoT 中心在 properties.iotHubs[] 表中的位置来定位 IoT 中心。 例如,以下命令更新上一个命令中首先返回的 MyExampleHub 的连接字符串:

    az iot dps update --name MyExampleDps --set properties.iotHubs[0].connectionString="HostName=MyExampleHub-2.azure-devices.cn;SharedAccessKeyName=iothubowner;SharedAccessKey=NewTokenValue"
    

后续步骤