2016-07-29 93 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')))]"