2016-07-29 94 views
5

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

+0

你有没有得到任何东西了这方面的工作? – MPavlak

回答

-1

你可以试试下面两件事情: - 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

+0

请检查您的答案,第2项中似乎缺少某些东西。 – mkl

+0

这不起作用。你不能只把一个资源组名称concat和().id连起来,希望有什么好的。另外,resourceId需要一个类型和一个名字。订阅和组名称参数是可选的。根据我所知道的,没有办法只指定资源组。 – MPavlak

2

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