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

问题描述 投票:7回答:2

在部署实际应用程序之前,我们使用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)。

json azure octopus-deploy azure-resource-manager
2个回答
4
投票

对于存储帐户名称已知且不依赖于资源组的情况(例如,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')))]"

-3
投票

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

“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

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