我正在尝试使用ARM模板和PowerShell将Azure IoT设备连接的事件订阅部署到Azure存储队列。我已使用以下模板进行部署。另外,我已经阅读了很多有关Microsoft的文章。但是找不到任何解决方案。请帮我弄清楚。
"resources": [
{
"type": "Microsoft.EventGrid/eventSubscriptions",
"name": "DeviceConnected",
"location": "[resourceGroup().location]",
"apiVersion": "2018-01-01",
"dependsOn": [
"[resourceId('Microsoft.Devices/IotHubs', variables('iotHubName'))]"
],
"properties": {
"destination": {
"endpointType": "storagequeue",
"properties": {
"queueName":"device-connnection-state-queue",
"resourceId": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]"
}
},
"filter": {
"includedEventTypes": [
"Microsoft.Devices.DeviceConnected"
]
}
}
}
],
答案 0 :(得分:1)
您看到的错误与您指定的dependsOn
属性有关。
在部署此资源之前必须先部署的资源。资源管理器评估资源之间的依赖关系,并以正确的顺序部署它们。当资源彼此不依赖时,它们将并行部署。该值可以是资源名称或资源唯一标识符的逗号分隔列表。仅列出此模板中部署的资源。该模板中未定义的资源必须已经存在。避免添加不必要的依赖项,因为它们会减慢部署速度并创建循环依赖项。有关设置依赖项的指导,请参见Defining dependencies in Azure Resource Manager templates。
因此,无法在DependsOn
属性中使用ARM模板中未定义的资源。
以下是与事件订阅创建相关的文档:
Microsoft.EventGrid eventSubscriptions template reference
关于如何创建事件订阅的示例并不多,但是您可以从Azure门户中提取模板的某些部分:
以下是示例ARM模板的外观:
"resources": [
{
"type": "Microsoft.Devices/IotHubs/providers/eventSubscriptions",
"apiVersion": "2019-01-01",
"name": "[concat(parameters('iotHubName'), '/Microsoft.EventGrid/', parameters('eventSubName'))]",
"location": "[resourceGroup().location]",
"properties": {
"topic": "[resourceId('Microsoft.Devices/IotHubs', parameters('iotHubName'))]",
"destination": {
"endpointType": "StorageQueue",
"properties": {
"resourceId": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
"queueName": "[parameters('queueName')]"
}
},
"filter": {
"includedEventTypes": [
"Microsoft.Devices.DeviceConnected"
],
"advancedFilters": []
},
"labels": [],
"eventDeliverySchema": "EventGridSchema"
}
}
]
答案 1 :(得分:-2)
某些功能无法使用或无法在模板中使用。您可以做的是,在执行模板后运行Powershell脚本。如果使用的是AzureDevOps(VSTS),则可以在模板执行后添加另一步骤来运行脚本。