繁体   English   中英

Azure ARM模板 - 访问由另一个ARM模板中的一个ARM模板创建的资源ID

[英]Azure ARM Template - accessing a resource Id created by one ARM template in another ARM template

在部署实际应用程序之前,我们使用ARM模板部署azure资源作为构建过程的一部分。

到目前为止,我们所有的应用程序资源都自包含在resource group 例如,需要sql server和存储帐户的Web应用程序被分成一个资源组。

但是,我们遇到了需要共享资源的场景/需求,例如。 跨资源组的存储帐户。 资源组A具有存储帐户,资源组B的Web应用程序需要与其appconfig.json/web.config的存储帐户相关的连接字符串/应用程序密钥。

如何为资源组B中的应用程序构建连接字符串以连接到资源组A中的资源,因为我需要获取B中资源组A的Id

如果它们位于同一资源组中,我将如何构建连接字符串

  "variables"
{
  "storageAccounts_id": "[concat(**resourceGroupA**().id,'/providers/Microsoft.Storage/storageAccounts/', variables('storageAccntName'))]",
},
"resources": [
    {
      "apiVersion": "2015-08-01",
      "type": "config",
      "name": "connectionstrings",
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites', variables('MyWebSiteName'))]"
      ],
      "properties": {
      "AzureWebJobsDashboard": {
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('storageAccntName'),';AccountKey=',concat(listKeys(variables('storageAccounts_id'),'2015-05-01-preview').key1))]",
        "type": "Custom"
      },
      }
    }
  ]

注意:我确实浏览了这个网站https://azure.microsoft.com/en-us/documentation/articles/resource-group-linked-templates/关于链接模板,但它不适合我们当前使用Octo构建过程( 除非有一些我可能会遗漏的东西 )首先部署ARM然后部署应用程序(web)。

对于存储帐户名称已知且不依赖于资源组的情况(例如,uniqueString(resourceGroup()。id)),您可以简单地使用较长形式的resourceId() 完整形式如下:

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2]...)

所以我们可以选择提供subscriptionId和resourceGroupName。

listKeys(resourceId(parameters('ResourceGroupAName'), 'Microsoft.Storage/storageAccounts', variables('ccPaymentStorageName'))

如果它在不同的订阅中,您还可以指定订阅。

listKeys(resourceId(parameters('SubscriptionId'), parameters('ResourceGroupAName'), 'Microsoft.Storage/storageAccounts', variables('ccPaymentStorageName'))

如果您的存储帐户名称取决于资源组

"storageName": "[concat('mystorage', uniqueString(resourceGroup().id))]" // in Resource Group A

然后,您需要始终运行创建此帐户的模板并输出storageName和resourceGroup,或者找到引用其他资源组以获取其ID的方法,以便可以重新创建该名称。

我已经能够使用这样的东西来“重新创建”资源组ID,这样我就可以生成存储帐户的正确名称。

"otherResourceGroupId": "[concat(subscription().id, '/resourceGroups/', parameters('ResourceGroupName'))]"

然后我可以使用它来适当地生成名称:

"storageAccountName": "[concat('mystorage', uniqueString(variables('otherResourceGroupId')))]"

您可以尝试以下(例如): -

“subNetId”:“[concat('/ subscriptions /',subscription()。subscriptionId,'/ resourceGroups /',parameters('virtualNetworkNameRG'),'/ providers /','Microsoft.Network/virtualNetworks /',参数( 'virtualNetworkName'),'/ subnets /',parameters('subnetName'))]“,

参考https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM