如何在Azure蓝图中正确使用`输出`?

时间:2019-11-25 10:40:59

标签: azure azure-cloud-services

我对蓝图输出是如何工作的以及如何正确地将值从一个工件导入到另一个工件的理解有误。

让我描述一下我试图从工件中获取变量的尝试:

我在资源组内部创建了两个工件:

enter image description here

我尝试使用以下语法将诸如vnet_name,vnet_addresses之类的变量从VNET工件传输到SUBNET_AKS工件:

VNET:

{
  "$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蓝图定义中正常工作?

1 个答案:

答案 0 :(得分:2)

原始问题

  

能否请您帮我弄清楚输出参数应如何在Azure蓝图定义中正常工作?

我的答案

Azure蓝图只是一个编排层,负责对工件进行排序和部署。 ARM模板是three valid types之一-另一个是policyAssignment和roleAssignment。

这意味着您具有两个“模板”构件:VNET和SUBNET_AKS。每个对象都应被视为演员/黑匣子,这意味着您只能使用ARM模板可用的功能。如果您需要蓝图中的参数,则必须将其作为参数输入。

这就是为什么您遇到该特定语法错误的原因。 artifacts() function is only available to Blueprints

相反,您需要更新ARM模板,以便它指定命名的输出值。在您的Azure蓝图中,您可以将先前工件的输出作为后续蓝图工件的输入参数进行引用。

希望these code snippets and docs能为您指明正确的方向。