Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 在嵌套模板中引用listKeys()_Azure_Azure Storage_Azure Resource Manager_Arm Template - Fatal编程技术网

Azure 在嵌套模板中引用listKeys()

Azure 在嵌套模板中引用listKeys(),azure,azure-storage,azure-resource-manager,arm-template,Azure,Azure Storage,Azure Resource Manager,Arm Template,我正在创建一个ARM模板,它在不同的资源组中部署了大量资源。实际上,资源组本身就是部署的一部分。在一个简单的版本中,我只创建两个资源组(masterRG和dependentRG),然后创建两个嵌套(内联)部署。第一次内联部署将存储帐户(testsadj1604)放入masterRG。此部署依赖于masterRG 第二个展开创建一个keyvault,并尝试在该vault中存储来自testsadj1604的connectionstring 在我的实际案例中,我有更多的资源组,我实际上尝试部署一个函数

我正在创建一个ARM模板,它在不同的资源组中部署了大量资源。实际上,资源组本身就是部署的一部分。在一个简单的版本中,我只创建两个资源组(
masterRG
dependentRG
),然后创建两个嵌套(内联)部署。第一次内联部署将存储帐户(
testsadj1604
)放入
masterRG
。此部署依赖于masterRG

第二个展开创建一个keyvault,并尝试在该vault中存储来自
testsadj1604
的connectionstring

在我的实际案例中,我有更多的资源组,我实际上尝试部署一个函数应用程序,它的connectionstring为“appsetting”。但方法是一样的

我得到的错误如下:

Deployment failed. Correlation ID: 9c359e8e-8657-4756-a5a3-f9c5698fbb46. {
  "error": {
    "code": "ResourceNotFound",
    "message": "The Resource 'Microsoft.Storage/storageAccounts/testsadj1604' under resource group '<null>' was not found."
  }
}
我很确定错误来自底部的listKeys(),在我的真实模板中进行了一整天的尝试和错误(以及谷歌狂热)。使用listKeys()和嵌套部署是一件麻烦事,但我真的不明白为什么它不起作用。我确保在第二次部署中有dependsOn


这会伤到我的大脑,有没有办法使用嵌套(内联)模板并引用位于不同资源组(但属于整个部署的一部分)中的存储帐户密钥?我还尝试在第一个部署中创建一个输出,并在第二个部署中引用该输出,但没有效果。我完全不知所措,欢迎任何帮助

要在单个模板中工作,您需要做以下几件事:

  • 在keyvault机密部署上设置此属性:
  • 这将延迟表达式的计算,直到部署开始

  • 当您设置#1时,您需要为所需的值定义参数(您不能再使用“全局”参数/vars),您可以像在您的示例中那样硬编码所有字符串,但我猜这不是您在“真实”部署中所做的。定义参数并将值传递到该部署中
  • listKeys()调用需要包含storageAccount的完整resourceId,因为它位于单独/不同的部署中-因此需要提供resourceGroup name param-如果在部署中交叉订阅(您的示例没有),则需要提供subscriptionId param
  • 下面是一个工作示例

    {
      "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageAccountName": {
          "type": "string",
          "defaultValue": "[concat('scratch', uniqueString(newGuid()))]"
        }
       },
      "resources": [
        {
          "type": "Microsoft.Resources/resourceGroups",
          "apiVersion": "2018-05-01",
          "name": "masterRG",
          "location": "West Europe",
          "properties": {
          }
        },
        {
          "type": "Microsoft.Resources/resourceGroups",
          "apiVersion": "2018-05-01",
          "name": "dependentRG",
          "location": "West Europe",
          "properties": {
          }
        },
        {
          "name": "masterRgDeployment",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "resourceGroup": "masterRG",
          "dependsOn": [
            "masterRG"
          ],
          "properties": {
            "mode": "Incremental",
            "template": {
              "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
              "contentVersion": "1.0.0.0",
              "resources": [
                {
                  "apiVersion": "2019-06-01",
                  "type": "Microsoft.Storage/storageAccounts",
                  "name": "[parameters('storageAccountName')]",
                  "location": "West Europe",
                  "sku": {
                    "name": "Standard_GRS"
                  },
                  "kind": "StorageV2",
                  "properties": {
                    "supportsHttpsTrafficOnly": true
                  }
                }
              ]
            }
          }
        },
        {
          "name": "dependentRgDeployment",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "resourceGroup": "dependentRG",
          "dependsOn": [
            "dependentRG",
            "masterRgDeployment"
          ],
          "properties": {
            "mode": "Incremental",
            "expressionEvaluationOptions": {
              "scope": "inner"
            },
            "parameters":{
              "storageAccountName": {
                "value": "[parameters('storageAccountName')]"
              },
              "storageAccountResourceGroupName": {
                "value": "masterRG"
              }
            },
            "template": {
              "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
              "contentVersion": "1.0.0.0",
              "parameters": {
                "storageAccountName": {
                  "type": "string"
                },
                "storageAccountResourceGroupName": {
                  "type": "string"
                }
              },
              "variables": {
                "vaultName": "[concat('kv-', parameters('storageAccountName'))]"
              },
              "resources": [
                {
                  "type": "Microsoft.KeyVault/vaults",
                  "name": "[variables('vaultName')]",
                  "apiVersion": "2019-09-01",
                  "location": "West Europe",
                  "properties": {
                    "enabledForDeployment": false,
                    "enabledForDiskEncryption": false,
                    "enabledForTemplateDeployment": true,
                    "tenantId": "[subscription().tenantId]",
                    "accessPolicies": [ ],
                    "sku": {
                      "name": "Standard",
                      "family": "A"
                    },
                    "networkAcls": {
                      "defaultAction": "Allow",
                      "bypass": "AzureServices"
                    }
                  }
                },
                {
                  "type": "Microsoft.KeyVault/vaults/secrets",
                  "name": "[concat(variables('vaultName'), '/saConnectionString')]",
                  "apiVersion": "2019-09-01",
                  "location": "West Europe",
                  "dependsOn": [
                    "[resourceId('Microsoft.KeyVault/vaults', variables('vaultName'))]"
                  ],
                  "properties": {
                    "value": "[listKeys(resourceId(parameters('storageAccountResourceGroupName'),'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value]"
                  }
                }
              ]
            }
          }
        }
      ]
    }
    

    要在单个模板中工作,您需要做以下几件事:

  • 在keyvault机密部署上设置此属性:
  • 这将延迟表达式的计算,直到部署开始

  • 当您设置#1时,您需要为所需的值定义参数(您不能再使用“全局”参数/vars),您可以像在您的示例中那样硬编码所有字符串,但我猜这不是您在“真实”部署中所做的。定义参数并将值传递到该部署中
  • listKeys()调用需要包含storageAccount的完整resourceId,因为它位于单独/不同的部署中-因此需要提供resourceGroup name param-如果在部署中交叉订阅(您的示例没有),则需要提供subscriptionId param
  • 下面是一个工作示例

    {
      "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageAccountName": {
          "type": "string",
          "defaultValue": "[concat('scratch', uniqueString(newGuid()))]"
        }
       },
      "resources": [
        {
          "type": "Microsoft.Resources/resourceGroups",
          "apiVersion": "2018-05-01",
          "name": "masterRG",
          "location": "West Europe",
          "properties": {
          }
        },
        {
          "type": "Microsoft.Resources/resourceGroups",
          "apiVersion": "2018-05-01",
          "name": "dependentRG",
          "location": "West Europe",
          "properties": {
          }
        },
        {
          "name": "masterRgDeployment",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "resourceGroup": "masterRG",
          "dependsOn": [
            "masterRG"
          ],
          "properties": {
            "mode": "Incremental",
            "template": {
              "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
              "contentVersion": "1.0.0.0",
              "resources": [
                {
                  "apiVersion": "2019-06-01",
                  "type": "Microsoft.Storage/storageAccounts",
                  "name": "[parameters('storageAccountName')]",
                  "location": "West Europe",
                  "sku": {
                    "name": "Standard_GRS"
                  },
                  "kind": "StorageV2",
                  "properties": {
                    "supportsHttpsTrafficOnly": true
                  }
                }
              ]
            }
          }
        },
        {
          "name": "dependentRgDeployment",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "resourceGroup": "dependentRG",
          "dependsOn": [
            "dependentRG",
            "masterRgDeployment"
          ],
          "properties": {
            "mode": "Incremental",
            "expressionEvaluationOptions": {
              "scope": "inner"
            },
            "parameters":{
              "storageAccountName": {
                "value": "[parameters('storageAccountName')]"
              },
              "storageAccountResourceGroupName": {
                "value": "masterRG"
              }
            },
            "template": {
              "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
              "contentVersion": "1.0.0.0",
              "parameters": {
                "storageAccountName": {
                  "type": "string"
                },
                "storageAccountResourceGroupName": {
                  "type": "string"
                }
              },
              "variables": {
                "vaultName": "[concat('kv-', parameters('storageAccountName'))]"
              },
              "resources": [
                {
                  "type": "Microsoft.KeyVault/vaults",
                  "name": "[variables('vaultName')]",
                  "apiVersion": "2019-09-01",
                  "location": "West Europe",
                  "properties": {
                    "enabledForDeployment": false,
                    "enabledForDiskEncryption": false,
                    "enabledForTemplateDeployment": true,
                    "tenantId": "[subscription().tenantId]",
                    "accessPolicies": [ ],
                    "sku": {
                      "name": "Standard",
                      "family": "A"
                    },
                    "networkAcls": {
                      "defaultAction": "Allow",
                      "bypass": "AzureServices"
                    }
                  }
                },
                {
                  "type": "Microsoft.KeyVault/vaults/secrets",
                  "name": "[concat(variables('vaultName'), '/saConnectionString')]",
                  "apiVersion": "2019-09-01",
                  "location": "West Europe",
                  "dependsOn": [
                    "[resourceId('Microsoft.KeyVault/vaults', variables('vaultName'))]"
                  ],
                  "properties": {
                    "value": "[listKeys(resourceId(parameters('storageAccountResourceGroupName'),'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value]"
                  }
                }
              ]
            }
          }
        }
      ]
    }
    

    您能告诉我如何部署模板吗?此外,您能告诉我存储帐户和密钥库是否在同一个组中吗?我使用Az CLI(Az部署子创建),SA和KV不在同一个资源组中。(我注意到我的模板中有一个错误,将第二个部署部署也部署到masterRG,这应该是dependentRG,现在已修复:))由于问题已由您自己解决,请发布您的答案好吗?此问题尚未修复,我在回答您的问题时注意到我的代码中有一个打字错误,但这没有任何效果。问题仍然存在:(您能否告诉我如何部署模板?此外,您能否告诉我存储帐户和密钥保管库是否在同一个组中?我使用Az CLI(Az部署子创建),SA和KV不在同一个资源组中。(我注意到我的模板中有一个错误,将第二个部署部署也部署到masterRG,应该是dependentRG,现在已修复:)由于问题已由您自己解决,您能否发布您的答案?此问题尚未解决,我在回答您的问题时注意到我的代码中有一个拼写错误,但没有任何效果。问题仍然存在:(非常感谢!尤其是expressionEvaluationOptions属性是我必须进一步研究的内容,但这非常有教育意义,解决了我的问题!)非常感谢!特别是expressionEvaluationOptions属性是我必须进一步研究的内容,但这非常有教育意义,解决了我的问题!:)
    {
      "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageAccountName": {
          "type": "string",
          "defaultValue": "[concat('scratch', uniqueString(newGuid()))]"
        }
       },
      "resources": [
        {
          "type": "Microsoft.Resources/resourceGroups",
          "apiVersion": "2018-05-01",
          "name": "masterRG",
          "location": "West Europe",
          "properties": {
          }
        },
        {
          "type": "Microsoft.Resources/resourceGroups",
          "apiVersion": "2018-05-01",
          "name": "dependentRG",
          "location": "West Europe",
          "properties": {
          }
        },
        {
          "name": "masterRgDeployment",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "resourceGroup": "masterRG",
          "dependsOn": [
            "masterRG"
          ],
          "properties": {
            "mode": "Incremental",
            "template": {
              "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
              "contentVersion": "1.0.0.0",
              "resources": [
                {
                  "apiVersion": "2019-06-01",
                  "type": "Microsoft.Storage/storageAccounts",
                  "name": "[parameters('storageAccountName')]",
                  "location": "West Europe",
                  "sku": {
                    "name": "Standard_GRS"
                  },
                  "kind": "StorageV2",
                  "properties": {
                    "supportsHttpsTrafficOnly": true
                  }
                }
              ]
            }
          }
        },
        {
          "name": "dependentRgDeployment",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "resourceGroup": "dependentRG",
          "dependsOn": [
            "dependentRG",
            "masterRgDeployment"
          ],
          "properties": {
            "mode": "Incremental",
            "expressionEvaluationOptions": {
              "scope": "inner"
            },
            "parameters":{
              "storageAccountName": {
                "value": "[parameters('storageAccountName')]"
              },
              "storageAccountResourceGroupName": {
                "value": "masterRG"
              }
            },
            "template": {
              "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
              "contentVersion": "1.0.0.0",
              "parameters": {
                "storageAccountName": {
                  "type": "string"
                },
                "storageAccountResourceGroupName": {
                  "type": "string"
                }
              },
              "variables": {
                "vaultName": "[concat('kv-', parameters('storageAccountName'))]"
              },
              "resources": [
                {
                  "type": "Microsoft.KeyVault/vaults",
                  "name": "[variables('vaultName')]",
                  "apiVersion": "2019-09-01",
                  "location": "West Europe",
                  "properties": {
                    "enabledForDeployment": false,
                    "enabledForDiskEncryption": false,
                    "enabledForTemplateDeployment": true,
                    "tenantId": "[subscription().tenantId]",
                    "accessPolicies": [ ],
                    "sku": {
                      "name": "Standard",
                      "family": "A"
                    },
                    "networkAcls": {
                      "defaultAction": "Allow",
                      "bypass": "AzureServices"
                    }
                  }
                },
                {
                  "type": "Microsoft.KeyVault/vaults/secrets",
                  "name": "[concat(variables('vaultName'), '/saConnectionString')]",
                  "apiVersion": "2019-09-01",
                  "location": "West Europe",
                  "dependsOn": [
                    "[resourceId('Microsoft.KeyVault/vaults', variables('vaultName'))]"
                  ],
                  "properties": {
                    "value": "[listKeys(resourceId(parameters('storageAccountResourceGroupName'),'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value]"
                  }
                }
              ]
            }
          }
        }
      ]
    }