簡體   English   中英

Azure ARM模板 - 訪問由另一個ARM模板中的一個ARM模板創建的資源ID

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM