如何在 Azure 蓝图中正确使用“输出”?
How to properly use `outputs` in Azure Blueprints?
我对蓝图输出的工作原理以及如何将值从一个工件正确导入另一个工件有误解。
让我描述一下我从工件中获取变量的尝试:
我在资源组中创建了两个工件:
我尝试使用以下语法将 vnet_name、vnet_addresses 等变量从 VNET 工件传输到 SUBNET_AKS 工件:
越南网:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
........
"outputs": {
"vnet_name_output": {
"type": "string",
"value": "[variables('vnet_name')]"
},
"vnet_ip_range_output": {
"type": "string",
"value": "[parameters('vnet_ip_range')]"
},
"vnet_path_output": {
"type": "string",
"value": "[resourceId('Microsoft.Network/virtualNetworks', variables('vnet_name'))]"
}
}
}
下一步是将输出变量添加到 SUBNET_AKS 个工件:
"resources": [
{
"apiVersion": "2018-04-01",
"type": "Microsoft.Network/virtualNetworks/subnets",
"name": "[concat(artifacts('VNET').outputs.vnet_name_output, '/', concat(parameters('deployment_prefix'),'-aks-subnet'))]",
但是出现如下错误:
Deployment template validation failed: 'The template resource '[concat(artifacts('VNET').outputs.vnet_name_output, '/', concat(parameters('deployment_prefix'),'-aks-subnet'))]' at line '27' and column '9' is not valid: The template function 'artifacts' is not valid. Please see https://aka.ms/arm-template-expressions for usage details.. Please see https://aka.ms/arm-template-expressions for usage details.'.
我如何理解输出参数应该如何在 Azure 蓝图定义中正常工作?
Azure Blueprint 只是一个负责排序和部署工件的编排层。 ARM 模板是其中之一 three valid types - policyAssignment 和 roleAssignment 是另外两个。
这意味着您有两个 "template" 工件:VNET 和 SUBNET_AKS。每一个都应该像演员/黑盒子一样对待,这意味着您只能使用 ARM 模板可用的功能。如果您需要来自蓝图的参数,它必须作为参数传入。
这就是您遇到特定语法错误的原因。 artifacts() function is only available to Blueprints。
相反,您需要更新您的 ARM 模板,以便它指定一个命名的输出值。在您的 Azure 蓝图中,您可以引用先前工件的输出作为后续蓝图工件的输入参数。
希望these code snippets and docs能为您指明正确的方向。
我对蓝图输出的工作原理以及如何将值从一个工件正确导入另一个工件有误解。
让我描述一下我从工件中获取变量的尝试:
我在资源组中创建了两个工件:
我尝试使用以下语法将 vnet_name、vnet_addresses 等变量从 VNET 工件传输到 SUBNET_AKS 工件:
越南网:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
........
"outputs": {
"vnet_name_output": {
"type": "string",
"value": "[variables('vnet_name')]"
},
"vnet_ip_range_output": {
"type": "string",
"value": "[parameters('vnet_ip_range')]"
},
"vnet_path_output": {
"type": "string",
"value": "[resourceId('Microsoft.Network/virtualNetworks', variables('vnet_name'))]"
}
}
}
下一步是将输出变量添加到 SUBNET_AKS 个工件:
"resources": [
{
"apiVersion": "2018-04-01",
"type": "Microsoft.Network/virtualNetworks/subnets",
"name": "[concat(artifacts('VNET').outputs.vnet_name_output, '/', concat(parameters('deployment_prefix'),'-aks-subnet'))]",
但是出现如下错误:
Deployment template validation failed: 'The template resource '[concat(artifacts('VNET').outputs.vnet_name_output, '/', concat(parameters('deployment_prefix'),'-aks-subnet'))]' at line '27' and column '9' is not valid: The template function 'artifacts' is not valid. Please see https://aka.ms/arm-template-expressions for usage details.. Please see https://aka.ms/arm-template-expressions for usage details.'.
我如何理解输出参数应该如何在 Azure 蓝图定义中正常工作?
Azure Blueprint 只是一个负责排序和部署工件的编排层。 ARM 模板是其中之一 three valid types - policyAssignment 和 roleAssignment 是另外两个。
这意味着您有两个 "template" 工件:VNET 和 SUBNET_AKS。每一个都应该像演员/黑盒子一样对待,这意味着您只能使用 ARM 模板可用的功能。如果您需要来自蓝图的参数,它必须作为参数传入。
这就是您遇到特定语法错误的原因。 artifacts() function is only available to Blueprints。
相反,您需要更新您的 ARM 模板,以便它指定一个命名的输出值。在您的 Azure 蓝图中,您可以引用先前工件的输出作为后续蓝图工件的输入参数。
希望these code snippets and docs能为您指明正确的方向。