ARM 模板:通过 Copy 输出实例资源名称

问题描述 投票:0回答:3

寻找有关如何输出我的应用程序服务实例名称的一些反馈。我与 CopyIndex 一起工作,但我不明白我该怎么做。

首先是我的参数。请注意,我使用数组作为参数位置。

"parameters": {
    "location": {
        "type": "array",
        "metadata": {
            "description": "array of region"
        },
        "allowedValues": [
            "centralus",
            "eastus"
        ]
    } 

然后我实例化我的 AppServices 并迭代我的不同位置

{ // App Services
        "type": "Microsoft.Web/sites",
        "name": "[concat(variables('appServiceName'), parameters('location')[copyIndex()])]",
        "apiVersion": "2018-11-01",
        "copy": {
            "name": "Copy website",
            "count": "[length(parameters('location'))]"
        },
        "location": "[parameters('location')[copyIndex()]]",
        "tags": {
            "cost": "[parameters('Stage')]"
        }
        ....

        

它运行良好,现在我想输出应用程序服务实例名称:

 "outputs": {
    "websitesname": {
        "type": "array",
        "copy": {
            "count": "[length(parameters('location'))]",
            "input":{
                "id": "here i struggle :("
            } 
        }
    }
}

我真的不知道如何获取实例名称? 首先,我尝试返回 variable 的值,但失败了。其次,我尝试返回 reference 的值,但再次失败。

有什么想法吗?

更新1 我应用了 Stringfellow 提供的建议,得到的结果与您的屏幕截图相同。 enter image description here

我可以使用 $deploymentResult.Outputs.keyVaultName.Value 检索 KeyVault 名称

但对于 appServicename 我没有运气。我尝试了 $deploymentResult.Outputs.websitesname.Value 然后尝试分离该值,但失败了。我也尝试过转换为 json。我相信它存在一种聪明的方式。根据我的示例,我如何检索值 AppService-Prod-centralus 和 AppService-Prod-eastus ?

azure azure-resource-manager azure-rm-template
3个回答
3
投票

您可以使用复制运算符构造一个新变量并在其中定义资源命名。然后使用新数组复制资源并构造您需要的输出,或者直接输出新数组。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "array"
    }
  },
  "variables": {
    "appServiceName": "prefix",
    "copy": [
      {
        "name": "webSiteNames",
        "count": "[length(parameters('location'))]",
        "input": {
          "name": "[concat(variables('appServiceName'), parameters('location')[copyIndex('webSiteNames')])]",
          "location": "[parameters('location')[copyIndex('webSiteNames')]]"
        }
      }
    ]
  },
  "resources": [
    { // App Services
        "type": "Microsoft.Web/sites",
        "name": "[variables('webSiteNames')[copyIndex()].name]",
        "apiVersion": "2018-11-01",
        "copy": {
            "name": "Copy website",
            "count": "[length(parameters('location'))]"
        },
        "location": "[variables('webSiteNames')[copyIndex()].location]",
        ...
    }
  ],
  "outputs": {
    "websitesname": {
      "type": "array",
      "copy": {
        "count": "[length(variables('webSiteNames'))]",
        "input": {
          "id": "[variables('webSiteNames')[copyIndex()].name]"
        }
      }
    },
    "webSiteName": {
      "type": "array",
      "value": "[variables('webSiteNames')]"
    }
  }
}

输出看起来像这样。 enter image description here


3
投票

如果您只想输出您创建的站点的数组,只需使用您在名称上使用的相同表达式,例如

    "outputs": {
        "sites": {
            "type": "array",
            "copy": {
                "count": "[length(parameters('location'))]",
                "input": "[concat(variables('appServiceName'), parameters('location')[copyIndex()])]"
            }
        },

有帮助吗?


0
投票

您可能会依赖来自 lekman.com 的以下显示逻辑应用部署的代码片段。在那里,他依赖于二头肌部署,但其输出机制是兼容的: 通过名称引用访问输出变量

© www.soinside.com 2019 - 2024. All rights reserved.