Azure ARM模板 - 访问由另一个ARM模板中的一个ARM模板创建的资源ID
在部署实际应用程序之前,我们使用ARM模板作为构建过程的一部分来部署Azure资源。Azure ARM模板 - 访问由另一个ARM模板中的一个ARM模板创建的资源ID
到目前为止,我们所有的应用程序资源都包含在resource group
之内。例如需要SQL服务器和存储帐户的Web应用程序会被分成一个资源组。
但是我们遇到了需要共享资源的场景/需求,例如。跨资源组的存储帐户。资源组A具有存储帐户,并且资源组B的Web应用程序需要与appconfig.json/web.config
中的存储帐户有关的连接字符串/应用程序密钥。
问题
如何建立您在B资源组的应用程序的连接字符串来连接到资源的资源组,因为我需要获得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)。
你可以试试下面两件事情: - 1.使用变量 “resourcegroupAid”: 或 2.RGID “:” “CONCAT [(变量( 'resourceGroupAName'), '()ID')。]” RESOURCEID [CONCAT( '/订阅/',订阅()。subscriptionId, '/ resourceGroups /',变量( 'resourceGroupAName')])”,
参阅https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions
对于这种情形,其中存储的帐户名称是已知的并且不依赖于资源组(例如,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和资源组的模板或找到方法来引用其他资源组以获取其ID,以便可以重新创建该名称。
我已经能够使用这样的东西来“重新创建”资源组ID,所以我可以生成存储帐户的专有名称。
"otherResourceGroupId": "[concat(subscription().id, '/resourceGroups/', parameters('ResourceGroupName'))]"
然后,我可以用它来生成恰当的名称:
"storageAccountName": "[concat('mystorage', uniqueString(variables('otherResourceGroupId')))]"
你有没有得到任何东西了这方面的工作? – MPavlak