[英]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.