Azure ARM 模板 - 使用其他部署的输出

标签 azure azure-resource-manager

我感兴趣的是读取不同资源组中另一个部署的输出参数。 我的 ARM 模板类似于:

  1. platform.json - 设置 DNS、虚拟网络和安全性
  2. storage.json - 设置数据库和其他存储
  3. app.json - 设置网络应用程序/api

每个资源组都部署在不同资源组中,因为它们具有不同的生命周期。但是,当我部署 app.json 时,我想提取最新平台和存储部署的输出并使用它们来配置应用程序。

链接模板不是解决方案,因为链接模板最终部署在与应用程序相同的资源组中,这违背了在资源组中隔离资源的目的。

有什么方法可以从不同的资源组读取部署的输出参数吗?如果没有,Azure 是否计划支持它?

我知道有一种方法可以通过 id 获取资源,使用 resourcesId 函数,并查看它们的属性,但我试图避免这样做,以免进入资源引用 spagetti。

最佳答案

我知道这是一个老问题,但对于其他来的人来说,截至 2018 年 3 月 12 日,您绝对可以做到这一点。

您需要确保输出的格式符合 Microsoft documentation for output variables其大致格式为

"outputs": {
  "resourceID": {
    "type": "string",
    "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
  }
}

然后,您可以通过使用 resource reference 引用部署来在模板中使用这些输出。其格式为

reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])

请注意,您需要提供 api 版本,因为部署可能使用与父模板使用的不同的 api 版本。

您的引用将类似于以下内容

{
  "comments": "This would have an output named myOutput you want to use",
  "apiVersion": "2017-05-10",
  "type": "Microsoft.Resources/deployments",
  "name": "my-deployment",
  "resourceGroup": "...",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "...",
      "contentVersion": "1.0.0.0"
    },
    "parameters": { }
},
{
  "comments": "This makes use of myOutput from my-deployment",
  "apiVersion": "2017-05-10",
  "type": "Microsoft.Resources/deployments",
  "name": "my-dependent-deployment",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "...",
      "contentVersion": "1.0.0.0"
    },
    "parameters": {
      "myValueFromAnotherDeployment": { "value": "[reference('my-deployment', '2017-05-10').outputs.myOutput.value]" }
    }
  }
}

请注意值的稍微尴尬的“重新打包”,我们使用 myOutput.value 作为依赖部署的输入,并将其放入具有键 “value” 的对象中:“....”。这是因为 ARM 参数必须具有“值”属性才能有效。

如果您尝试直接使用输出,您将收到无效模板错误(因为输出变量具有“类型”,并且这不是参数中允许的键) >)。这就是为什么您需要获取 value 属性,然后将其放回下游模板中的 value 中。

关于Azure ARM 模板 - 使用其他部署的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32058494/

相关文章:

c# - 发布到 Azure 后找不到 View

azure - 具有全局管理员权限的用户无法查看 Azure 中的应用程序或资源组

database - 如何使用 azure 资源管理器模板通过地理复制部署 SQL 数据库

azure - 按虚拟机名称查找 Azure 资源组

Azure Lighthouse - 获取订阅级别部署的区域

azure - 如何使用 Azure EventGrid Webhook 维护幂等性?

c# - 将枚举序列化为从 Azure Function 返回的 JSON 中的字符串

azure - 从 Invoke-AzVMRunCommand 将参数传递给脚本

azure - 如何在azure逻辑应用程序中处理Unicode字符(U+200E)

azure - 如何将分区的 parquet 文件写入 blob 存储