在部署实际应用程序之前,我们使用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