从 PowerShell 使用 ARM 函数
Use ARM functions from PowerShell
TL;DR
以下行在 Azure DevOps ARM Template Deployment
任务中作为 ARM 脚本 运行 的一部分工作正常,但是,当从 PowerShell 运行 时,它无法提取订阅和资源组。
"serverFarmId": "[concat('/subscriptions/', subscription(), '/resourcegroups/', resourceGroup(), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
如何设置订阅和资源组变量以便 ARM 函数可以提取值?
P.S。没关系,如果我必须先获取它们,然后手动设置它们以便脚本使用,只要我可以对 DevOps 和 PowerShell 使用相同的脚本。
这是模板的资源部分,同样,当从管道部署时,它会从任务参数中设置的任何内容中提取订阅和资源组。
"resources": [
{
"apiVersion": "2018-11-01",
"name": "[parameters('name')]",
"type": "Microsoft.Web/sites",
"location": "[resourceGroup().location]",
"tags": {},
"dependsOn": [
"[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
],
"properties": {
"name": "[parameters('name')]",
"siteConfig": {
"metadata": [
{
"name": "CURRENT_STACK",
"value": "[parameters('currentStack')]"
}
]
},
"serverFarmId": "[concat('/subscriptions/', subscription(), '/resourcegroups/', resourceGroup(), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
"clientAffinityEnabled": true
}
},
{
"apiVersion": "2018-11-01",
"name": "[parameters('hostingPlanName')]",
"type": "Microsoft.Web/serverfarms",
"location": "[resourceGroup().location]",
"kind": "",
"tags": {},
"dependsOn": [],
"properties": {
"name": "[parameters('hostingPlanName')]"
},
"sku": {
"Tier": "[parameters('sku')]",
"Name": "[parameters('skuCode')]"
}
}
]
subscription()
和 resourceGroup()
根据您的上下文执行 return objects。您应该考虑查询属性,而不是像:subscription().subscriptionId
和 resourceGroup().name
考虑到您是如何构建 ID 的。不过我不确定为什么它可以在您的 ARM 模板中使用。
作为旁注,您可以使用 resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
函数,如 here 所解释的那样,在引擎盖下它的执行与您所做的相同 (concat)。
TL;DR
以下行在 Azure DevOps ARM Template Deployment
任务中作为 ARM 脚本 运行 的一部分工作正常,但是,当从 PowerShell 运行 时,它无法提取订阅和资源组。
"serverFarmId": "[concat('/subscriptions/', subscription(), '/resourcegroups/', resourceGroup(), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
如何设置订阅和资源组变量以便 ARM 函数可以提取值?
P.S。没关系,如果我必须先获取它们,然后手动设置它们以便脚本使用,只要我可以对 DevOps 和 PowerShell 使用相同的脚本。
这是模板的资源部分,同样,当从管道部署时,它会从任务参数中设置的任何内容中提取订阅和资源组。
"resources": [
{
"apiVersion": "2018-11-01",
"name": "[parameters('name')]",
"type": "Microsoft.Web/sites",
"location": "[resourceGroup().location]",
"tags": {},
"dependsOn": [
"[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
],
"properties": {
"name": "[parameters('name')]",
"siteConfig": {
"metadata": [
{
"name": "CURRENT_STACK",
"value": "[parameters('currentStack')]"
}
]
},
"serverFarmId": "[concat('/subscriptions/', subscription(), '/resourcegroups/', resourceGroup(), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
"clientAffinityEnabled": true
}
},
{
"apiVersion": "2018-11-01",
"name": "[parameters('hostingPlanName')]",
"type": "Microsoft.Web/serverfarms",
"location": "[resourceGroup().location]",
"kind": "",
"tags": {},
"dependsOn": [],
"properties": {
"name": "[parameters('hostingPlanName')]"
},
"sku": {
"Tier": "[parameters('sku')]",
"Name": "[parameters('skuCode')]"
}
}
]
subscription()
和 resourceGroup()
根据您的上下文执行 return objects。您应该考虑查询属性,而不是像:subscription().subscriptionId
和 resourceGroup().name
考虑到您是如何构建 ID 的。不过我不确定为什么它可以在您的 ARM 模板中使用。
作为旁注,您可以使用 resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
函数,如 here 所解释的那样,在引擎盖下它的执行与您所做的相同 (concat)。