首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流分析工作部署为Azure资源管理器(ARM)模板

流分析工作部署为Azure资源管理器(ARM)模板
EN

Stack Overflow用户
提问于 2018-08-14 13:35:50
回答 2查看 1.6K关注 0票数 1

我正在尝试为定义为JSON模板的Stream作业设置一个输出 EventHub。如果没有输出位,模板将成功部署,但是当添加输出定义时,它会失败:

代码语言:javascript
复制
Deployment failed. Correlation ID: <SOME_UUID>. {
    "code": "BadRequest",
    "message": "The JSON provided in the request body is invalid. Property 'eventHubName' value 'parameters('eh_name')' is not acceptable.",
    "details": {
        "code": "400",
        "message": "The JSON provided in the request body is invalid. Property 'eventHubName' value 'parameters('eh_name')' is not acceptable.",
        "correlationId": "<SOME_UUID>",
        "requestId": "<SOME_UUID>"
    }
}

我将ARM模板定义为:

代码语言:javascript
复制
{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "type": "string",
            "defaultValue": "westeurope"
        },
        "hubName": {
            "type": "string",
            "defaultValue": "fooIotHub"
        },
        "eh_name": {
            "defaultValue": "fooEhName",
            "type": "String"
        },
        "eh_namespace": {
            "defaultValue": "fooEhNamespace",
            "type": "String"
        },
        "streamAnalyticsJobName": {
            "type": "string",
            "defaultValue": "fooStreamAnalyticsJobName"
        }
    },
    "resources": [{
        "type": "Microsoft.StreamAnalytics/StreamingJobs",
        "apiVersion": "2016-03-01",
        "name": "[parameters('streamAnalyticsJobName')]",
        "location": "[resourceGroup().location]",
        "properties": {
            "sku": {
                "name": "standard"
            },
            "outputErrorPolicy": "Drop",
            "eventsOutOfOrderPolicy": "adjust",
            "eventsOutOfOrderMaxDelayInSeconds": 0,
            "eventsLateArrivalMaxDelayInSeconds": 86400,
            "inputs": [{
                "Name": "IoTHubInputLable",
                "Properties": {
                    "DataSource": {
                        "Properties": {
                            "iotHubNamespace": "[parameters('hubName')]",
                            "sharedAccessPolicyKey": "[listkeys(resourceId('Microsoft.Devices/IotHubs/IotHubKeys',parameters('hubName'), 'iothubowner'),'2016-02-03').primaryKey]",
                            "sharedAccessPolicyName": "iothubowner",
                            "endpoint": "messages/events"
                        },
                        "Type": "Microsoft.Devices/IotHubs"
                    },
                    "Serialization": {
                        "Properties": {
                            "Encoding": "UTF8"
                        },
                        "Type": "Json"
                    },
                    "Type": "Stream"
                }
            }],
            "transformation": {
                "name": "Transformation",
                "properties": {
                    "streamingUnits": 1,
                    "query": "<THE SQL-LIKE CODE FOR THE JOB QUERY>"
                }
            },
            "outputs": [{
                "name": "EventHubOutputLable",
                "properties": {
                    "dataSource": {
                        "type": "Microsoft.ServiceBus/EventHub",
                        "properties": {
                            "eventHubName": "parameters('eh_name')",
                            "serviceBusNamespace": "parameters('eh_namespace')",
                            "sharedAccessPolicyName": "RootManageSharedAccessKey"
                        }
                    },
                    "serialization": {
                        "Properties": {
                            "Encoding": "UTF8"
                        }
                    }
                }
            }]
        }
    }]
}

在这里检查https://learn.microsoft.com/en-us/azure/templates/microsoft.streamanalytics/streamingjobs输出的JSON结构与预期的结构相同( properties字段和type)。

我已经使用开发人员工具和检查HTTP请求"GetOutputs“的细节从Chrome浏览器中找出了那些”事件集线器属性“,否则我不知道如何指定这些属性?该结构看起来非常类似于输入IoT集线器(它正在工作)的结构,在这种情况下,对于与IoT集线器细节相关的属性使用不同的标签。

查看这篇博客文章https://blogs.msdn.microsoft.com/david/2017/07/20/building-azure-stream-analytics-resources-via-arm-templates-part-2-the-template/输出部分与PowerBI相关,它似乎为属性使用了不同的结构:outputPowerBISource,因此我尝试为事件集线器使用字段outputEventHubSource (使用Chrome工具进行检查),而不是properties,但随后得到了以下错误:

代码语言:javascript
复制
Deployment failed. Correlation ID: <SOME_UUID>. {
    "code": "BadRequest",
    "message": "The JSON provided in the request body is invalid. Required property 'properties' not found in JSON. Path '', line 1, position 1419.",
    "details": {
        "code": "400",
        "message": "The JSON provided in the request body is invalid. Required property 'properties' not found in JSON. Path '', line 1, position 1419.",
        "correlationId": "<SOME_UUID>",
        "requestId": "<SOME_UUID>"
    }
}

用于部署此模板的命令是Azure CLI (来自Linux计算机):

代码语言:javascript
复制
az group deployment create \
  --name "deployStreamAnalyticsJobs" \
  --resource-group "MyRGName" \
  --template-file ./templates/stream-analytics-jobs.json

如何在流分析作业的Azure资源管理器(ARM)模板中指定输出

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-29 10:54:37

我发现所有的参数都需要包装在方格中(正如这个问题的另一个答案所指出的)。

此外,要动态检索共享访问策略键(或现有资源(如事件集线器)的任何其他参数),必须使用listKeysresourceId等函数的组合,有关描述为流分析作业输出的事件集线器的完整示例,请参阅下面。

详情如下:

  • 必须使用方括号计算为eventHubNameserviceBusNamespace定义的参数(请参阅我在上述问题正文中JSON示例中如何定义这些参数),
  • 共享访问策略可以是硬编码字符串(或像以前一样的参数),也可以是使用"sharedAccessPolicyKey": "[listKeys(resourceId('Microsoft.EventHub/namespaces/eventhubs/authorizationRules', parameters('eh_namespace'), parameters('eh_name'), 'RootManageSharedAccessKey'),'2017-04-01').primaryKey]"sharedAccessPolicyKey动态检索的(这是敏感数据,应该保护它,避免将硬编码信息作为普通字符串)。

下面的JSON配置显示了一个现有的事件集线器,该事件集线器定义为为Stream作业定义的输出:

代码语言:javascript
复制
        "outputs": [{
            "Name": "EventHubOutputLable",
            "Properties": {
                "DataSource": {
                    "Type": "Microsoft.ServiceBus/EventHub",
                    "Properties": {
                        "eventHubName": "[parameters('eh_name')]",
                        "serviceBusNamespace": "[parameters('eh_namespace')]",
                        "sharedAccessPolicyKey": "[listKeys(resourceId('Microsoft.EventHub/namespaces/eventhubs/authorizationRules', parameters('eh_namespace'), parameters('eh_name'), 'RootManageSharedAccessKey'),'2017-04-01').primaryKey]",
                        "sharedAccessPolicyName": "RootManageSharedAccessKey"
                    }
                },
                "Serialization": {
                    "Properties": {
                        "Encoding": "UTF8"
                    },
                    "Type": "Json"
                }
            }
        }]
票数 0
EN

Stack Overflow用户

发布于 2018-08-22 22:18:24

任何包含参数(或任何需要计算的表达式)的属性都必须包含方括号。

代码语言:javascript
复制
"eventHubName": "[parameters('eh_name')]",
"serviceBusNamespace": "[parameters('eh_namespace')]",

否则,将使用引号中的文字值。

有帮助吗?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51842809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档