2016-07-29 4 views
5

Мы развертываем ресурсы Azure с помощью шаблона ARM как часть нашего процесса сборки перед развертыванием реального приложения.Шаблон Azure ARM - доступ к идентификатору ресурса, созданному одним шаблоном ARM в другом шаблоне ARM

До сих пор все наши ресурсы приложения были автономными в пределах resource group. например Веб-приложение, для которого требуется сервер sql и учетная запись хранилища, сгруппированы в одну группу ресурсов.

Однако мы столкнулись с сценарием/необходимостью, где нам нужно разделить ресурс, например. учетная запись хранилища в группах ресурсов. Группа ресурсов A имеет учетную запись хранилища, а веб-приложение группы ресурсов B требует, чтобы строки строки подключения/приложения были связаны с учетной записью хранилища в ее appconfig.json/web.config.

Вопрос

Как построить строку подключения для приложения в группу ресурсов B для подключения к ресурсу в ресурсной группе А, как мне нужно, чтобы получить идентификатор группы ресурсов A в B

Вот как я строки соединения, если они находятся в одной и той же группе ресурсов

"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, а затем приложение (сеть).

+0

вы когда-нибудь что-нибудь работать для этого? – MPavlak

ответ

-1

Вы можете попробовать ниже две вещи: - 1. Использование переменной "resourcegroupAid": или 2.RGID ":" "CONCAT [(переменные ('resourceGroupAName'), '() идентификатор.')]" 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]...) 

, поэтому мы можем по желанию поставлять подпискуInd и 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 или найти способ ссылаться на другую группу ресурсов, чтобы получить ее идентификатор, чтобы имя могло быть воссоздано.

Я смог использовать что-то вроде этого для «воссоздания» идентификатора группы ресурсов, чтобы я мог создать собственное имя учетной записи хранилища.

"otherResourceGroupId": "[concat(subscription().id, '/resourceGroups/', parameters('ResourceGroupName'))]" 

Тогда я могу использовать, чтобы сгенерировать имя надлежащим образом:

"storageAccountName": "[concat('mystorage', uniqueString(variables('otherResourceGroupId')))]"