【问题标题】:How to configure ARM templates and parameter file to create multiple service bus topics across different environments如何配置 ARM 模板和参数文件以跨不同环境创建多个服务总线主题
【发布时间】:2019-11-04 17:34:22
【问题描述】:

我的 repo 为两种不同的环境提供了不同的 arm 模板(azure deploy json 文件)。每个环境都有自己的服务总线命名空间。我想为 arm 模板中的每个环境生成相同的主题列表。

我想在他们的透视臂模板中保留服务总线命名空间名称,但我不确定这样做是否正确。

主题列表将在 parameters.json 文件中。我想为两个环境/模板使用相同的参数文件。我也不确定这是否可能。从this article开始,使用同一个参数文件可能不可行。

我使用this site 作为参考来创建主题循环。

这是一个 armtemplate.json 文件的示例:

...
 "parameters": {
        "serviceBusNamespaceName": {
            "type": "string",
            "defaultValue": "serviceBusName1",
            "metadata": {
                "description": "Name of the Service Bus namespace"
            }
        },
        "serviceBusTopics": {
            "type": "array",
            "metadata": {
                "description": "List of topics"
            }
        },
...
"resources": [
        {
            "apiVersion": "2017-04-01",
            "name": "[parameters('serviceBusNamespaceName')]",
            "type": "Microsoft.ServiceBus/namespaces",
            "location": "[resourceGroup().location]",
            "sku": {
                "name": "Standard"
            },
            "properties": {}
        },
        {
            "apiVersion": "2017-04-01",
            "name": "[concat(parameters('serviceBusNamespaceName'), '/', parameters('serviceBusTopics')[copyIndex()])]",
            "type": "Microsoft.ServiceBus/namespaces/topics",
            "location": "[resourceGroup().location]",
            "copy": {
                "name": "topicLoop",
                "count": "[length(parameters('serviceBusTopics'))]"
            },
            "properties": {},
            "dependsOn": [
                "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
            ]
        },
....

这里是parameters.json文件:

"parameters": {
        "serviceBusTopics": {
            "value": [
                "topic1",
                "topic2"
            ]
        }
    }

我已将 Azure Pipelines 配置为构建和部署 Azure 资源。当我导航到 Azure 门户并检查每个服务总线时,我希望看到创建的主题。但是,这对我不起作用。

我可以为不同的模板/环境使用相同的参数文件吗? 在语法上,我有什么错误吗?

【问题讨论】:

    标签: azure-devops azure-resource-manager servicebus arm-template azure-servicebus-topics


    【解决方案1】:

    一种方法是使用参数文件,每个环境一个 然后在您的管道中指定正确的参数文件

    另一种方法是根本不使用参数文件,而只使用 Azure DevOps 内部的变量

    我知道这是一个简短的答案,希望现在没问题

    【讨论】:

      【解决方案2】:

      因为每个环境都有自己的模板文件,您只需使用服务总线和主题参数更新所有文件,并将主题列为资源,就像我在上面所做的那样。默认值足以针对不同的服务总线。 (可能不是最优雅的解决方案,但它有效)

      我发现我的模板最初不起作用的原因是使用该模板的管道与我所针对的服务总线不在同一个资源组中。

      部署到同一个资源组时,我在上面所做的工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 2022-10-13
        相关资源
        最近更新 更多