2016-07-29 13 views
5

Wdrażamy zasoby azure za pomocą szablonu ARM w ramach naszego procesu budowania przed wdrożeniem rzeczywistej aplikacji.Szablon ARM Azure - uzyskiwanie dostępu do identyfikatora zasobu utworzonego przez jeden szablon ARM w innym szablonie ARM

Do tej pory wszystkie nasze zasoby aplikacji są samodzielne w ramach resource group. na przykład Aplikacja internetowa, która wymaga serwera sql i konta magazynu, jest odtwarzana w jednej grupie zasobów.

Jednak natrafiliśmy na scenariusz/potrzebę, w której musimy udostępnić zasoby, np. przechowywanie kont pomiędzy grupami zasobów. Grupa zasobów A ma konto magazynu i aplikacja internetowa grupy zasobów B wymaga kluczy połączenia/aplikacji związanych z kontem pamięci w jego appconfig.json/web.config.

Pytanie

Jak zbudować ciąg połączenia dla aplikacji w grupie zasobów B do podłączenia do zasobu w grupie zasobów A jak trzeba uzyskać identyfikator grupy zasobów A w B

Oto jak zbudować ciąg połączenia, jeśli są w tej samej grupie zasobów

"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" 
     }, 
     } 
    } 
    ] 

Uwagi: Przejrzałem tę stronę https://azure.microsoft.com/en-us/documentation/articles/resource-group-linked-templates/ o połączonych szablonach, ale nie pasuje ona do naszego obecnego procesu kompilacji, który używa Octo (, chyba że jest coś, czego może mi brakować), który wdraża najpierw ARM, a następnie aplikację (sieć).

+0

czy kiedykolwiek dostać coś działa to? – MPavlak

Odpowiedz

-1

Można spróbować poniżej dwóch rzeczy: - 1. Zastosowanie zmienna "resourcegroupAid": lub 2.RGID ":" "concat [(zmienne ('resourceGroupAName'), '() id.')]" RESOURCEID [concat ('/ subskrypcje /' subskrypcja(). subscriptionId, '/ resourceGroups /', zmienne ('resourceGroupAName')])”

odnoszą https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions

+0

Proszę sprawdzić odpowiedź, czegoś brakuje w poz. 2. – mkl

+0

To nie działa. Nie można po prostu wstawić nazwy grupy zasobów z() .id i mieć nadzieję na cokolwiek dobrego. Ponadto resourceId wymaga typu i nazwy. Parametry subskrypcji i nazwy grupy są opcjonalne. Nie ma sposobu, aby określić tylko grupę zasobów, z tego co mogę powiedzieć. – MPavlak

2

W tym scenariuszu, w którym nazwa konta przechowywanie jest znany i nie zależy od grupy zasobów (np. uniqueString (resourceGroup(). id)), następnie można po prostu użyć dłuższego formularza dla resourceId(). Pełny formularz wygląda następująco:

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2]...) 

dzięki czemu możemy opcjonalnie dostarczyć subscriptionId i resourceGroupName.

listKeys(resourceId(parameters('ResourceGroupAName'), 'Microsoft.Storage/storageAccounts', variables('ccPaymentStorageName')) 

Jeśli był w innej subskrypcji, można również określić subskrypcję.

listKeys(resourceId(parameters('SubscriptionId'), parameters('ResourceGroupAName'), 'Microsoft.Storage/storageAccounts', variables('ccPaymentStorageName')) 

Jeśli nazwa konta przechowywania zależy od grupy zasobów jak

"storageName": "[concat('mystorage', uniqueString(resourceGroup().id))]" // in Resource Group A 

Pokochasz więc albo trzeba zawsze uruchomić szablon, który tworzy to konto i wysyłać storageName i resourceGroup lub znaleźć sposób odniesienia się do innej grupy zasobów, aby uzyskać jej identyfikator, aby można było ponownie utworzyć nazwę.

Byłem w stanie użyć czegoś takiego, aby "odtworzyć" identyfikator grupy zasobów, aby móc wygenerować prawidłową nazwę konta magazynu.

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

Wtedy mogę używać, aby wygenerować nazwy odpowiednio:

"storageAccountName": "[concat('mystorage', uniqueString(variables('otherResourceGroupId')))]" 
Powiązane problemy