2016-07-29 5 views
5

실제 응용 프로그램을 배포하기 전에 빌드 프로세스의 일부로 ARM 템플릿을 사용하여 Azure 리소스를 배포합니다.Azure ARM 템플릿 - 다른 ARM 템플릿에서 하나의 ARM 템플릿으로 생성 된 리소스 ID에 액세스

지금까지 우리의 모든 응용 프로그램 자원은 resource group 내에 자체적으로 포함되어 있습니다. 예 : SQL Server와 스토리지 계정이 필요한 웹 응용 프로그램은 하나의 리소스 그룹에 포함됩니다.

그러나 리소스를 공유해야하는 시나리오/필요성이 있습니다. 자원 그룹 전체에서 스토리지 계정. 리소스 그룹 A에 스토리지 계정이 있고 리소스 그룹 B의 웹 앱에 스토리지 계정에 속하는 연결 문자열/앱 키가 필요합니다 (appconfig.json/web.config).

나는 B의 자원 그룹 A의 ID를 얻으려면 필요로하는 내가 자원 그룹 B의 응용 프로그램에 대한 연결 문자열을 구축하려면 어떻게

자원 A 군의 리소스에 연결할 수있는 질문 여기

은 동일한 자원 그룹

"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/을 살펴 보았습니다.하지만 현재 응용 프로그램 (웹)을 ARM에 배포 한 Octo (이없는 경우를 제외하고는)을 사용하는 현재 빌드 프로세스에 적합하지 않습니다.

+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 

같은 리소스 그룹에 따라 경우에 당신은 항상 저장소 이름과 resourceGroup을이 계정과 출력을 생성하는 템플릿을 실행하거나 찾을해야 하나 다른 자원 그룹을 참조하여 ID를 얻는 방법으로 이름을 다시 만들 수 있습니다.

자원 계정의 고유 이름을 생성 할 수 있도록 자원 그룹 ID를 "다시 작성"하는 데 이와 같은 방법을 사용할 수있었습니다.

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

그럼 적절하게 이름을 생성하기 위해 그것을 사용할 수 있습니다

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