Jay*_*aya 7 json azure octopus-deploy azure-resource-manager
在部署实际应用程序之前,我们使用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"
},
}
}
]
Run Code Online (Sandbox Code Playgroud)
注意:我确实浏览了这个网站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]...)
Run Code Online (Sandbox Code Playgroud)
因此我们可以选择提供subscriptionId和resourceGroupName。
listKeys(resourceId(parameters('ResourceGroupAName'), 'Microsoft.Storage/storageAccounts', variables('ccPaymentStorageName'))
Run Code Online (Sandbox Code Playgroud)
如果它在其他订阅中,则还可以指定订阅。
listKeys(resourceId(parameters('SubscriptionId'), parameters('ResourceGroupAName'), 'Microsoft.Storage/storageAccounts', variables('ccPaymentStorageName'))
Run Code Online (Sandbox Code Playgroud)
如果您的存储帐户名称取决于资源组,例如
"storageName": "[concat('mystorage', uniqueString(resourceGroup().id))]" // in Resource Group A
Run Code Online (Sandbox Code Playgroud)
那么您将需要始终运行创建该帐户的模板并输出storageName和resourceGroup,或者找到一种引用其他资源组的方法来获取其ID,以便可以重新创建名称。
我已经能够使用类似的方法来“重新创建”资源组ID,以便生成存储帐户的正确名称。
"otherResourceGroupId": "[concat(subscription().id, '/resourceGroups/', parameters('ResourceGroupName'))]"
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用它来适当地生成名称:
"storageAccountName": "[concat('mystorage', uniqueString(variables('otherResourceGroupId')))]"
Run Code Online (Sandbox Code Playgroud)
Viv*_*ema -3
您可以尝试以下(例如):-
"subNetId": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', 参数('virtualNetworkNameRG'), '/providers/', 'Microsoft.Network/virtualNetworks/',parameters( 'virtualNetworkName'),'/subnets/', 参数('subnetName'))]",
请参阅https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions
归档时间: |
|
查看次数: |
6213 次 |
最近记录: |