【问题标题】:ARM Template (InvalidTemplate) Deployment template validation failedARM 模板 (InvalidTemplate) 部署模板验证失败
【发布时间】:2022-09-29 21:02:54
【问题描述】:

我正在尝试使用 ARM 模板部署密钥库。我用作基础的模板位于azuredeploy.json,我不提供创建参数,我的目的是使用模板中可用的默认值来开始。
参数文件:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters":
  {
  }
}

(无效模板)部署模板验证失败:'模板参数'$schema,contentVersion,参数'在 参数文件无效;它们在原版中不存在 模板,因此无法在部署时提供。这 此模板仅支持的参数是 'vaultName, location, enabledForDeployment、enabledForDiskEncryption、 enabledForTemplateDeployment、enablePurgeProtection、 enableRbacAuthorization,enableSoftDelete,softDeleteRetentionInDays, 租户 ID、networkRuleBypassOptions、NetworkRuleAction、ipRules、 accessPolicies、virtualNetworkRules、skuName、标签'。请参见 https://aka.ms/arm-deploy/#parameter-file 了解使用详情。'。
#代码:无效模板
#信息:部署模板验证失败:参数中的'模板参数'$schema,contentVersion,参数' 文件无效;它们不在原始模板中,并且 因此无法在部署时提供。唯一支持的 此模板的参数是 'vaultName, location, enabledForDeployment、enabledForDiskEncryption、 enabledForTemplateDeployment、enablePurgeProtection、 enableRbacAuthorization,enableSoftDelete,softDeleteRetentionInDays, 租户 ID、networkRuleBypassOptions、NetworkRuleAction、ipRules、 accessPolicies、virtualNetworkRules、skuName、标签'。请参见 https://aka.ms/arm-deploy/#parameter-file 了解使用详情。'。
附加信息:类型:模板违规
信息:{ “行号”:0, “线位置”:0, “小路”: ”” }

我也尝试提供一两个参数,但错误仍然相同(例如:如果我提供 vaultName 和/或位置,这些参数不会从错误消息中消失)。
根据错误消息,问题出在参数文件中,但我无法确定问题所在。你知道错误可能在哪里吗?

我正在尝试使用 PowerShell (New-AzDeployment) 和 python 部署它

**Python代码:

import os
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
from azure.mgmt.resource.resources.models import Deployment
from azure.mgmt.resource.resources.models import DeploymentProperties
from miscellaneous.logger import Logger
from msrestazure.azure_cloud import get_cloud_from_metadata_endpoint
from uuid6 import uuid7
class AzureConnection(object):
    def __init__(self, subscriptionId, resourceGroup):
        self.logger = Logger("Azure Connection")
        self.logger.info("Retrieving the list of available endpoint")
        endpoints = get_cloud_from_metadata_endpoint(os.environ.get("ARM_ENDPOINT"))
        self.subscriptionId = subscriptionId
        self.resourceGroup = resourceGroup
        self.credentials = DefaultAzureCredential()
        self.logger.info("Creating a client for deploying resources on subscription {}".format(self.subscriptionId))
        self.client = ResourceManagementClient(self.credentials, self.subscriptionId,
            base_url=endpoints.endpoints.resource_manager)
        self.logger.success("Client was successfully created")
    def deploy(self, template):
        resources = ""
        for resource in template.get("resources"):
            resources += "\n\t {}".format(resource.get("type"))
        self.logger.info("The following resources: {}\nwill be deployed".format(resources))
        deploymentProperties = DeploymentProperties(
            mode=DeploymentMode.incremental,
            template=template
        )
        self.logger.info("Attempting deploy operation")
        try:
            deployment_async_operation = self.client.deployments.begin_create_or_update(
                self.resourceGroup,
                uuid7(),
                Deployment(properties=deploymentProperties)
            )
        except:
            self.logger.error("The resources could not be deployed");
        self.logger.success("Resources were successfully deployed")
    def deployWithParameters(self, template, parameters):
        resources = ""
        for resource in template.get("resources"):
            resources += "\n\t {}".format(resource.get("type"))
        self.logger.info("The following resources: {}\nwill be deployed".format(resources))
        parameters = {k: {"value": v} for k, v in parameters.items()}
        deploymentProperties = DeploymentProperties(
            mode=DeploymentMode.incremental,
            template=template,
            parameters=parameters
        )
        self.logger.info("Attempting deploy operation")
        deployment_async_operation = self.client.deployments.begin_create_or_update(
            self.resourceGroup,
            uuid7(),
            Deployment(properties=deploymentProperties)
        )

from dotenv import load_dotenv
load_dotenv()
azureConnection = AzureConnection(os.environ.get("AZURE_SUBSCRIPTION_ID"), os.environ.get("AZURE_RESOURCE_GROUP"))
with open((os.path.dirname(__file__), "templates", <fileName>), "r") as file:
  template = json.load(file)
with open((os.path.dirname(__file__), "parameters", <fileName>), "r") as file:
  json = json.load(file)
deployment = azureConnection.deployWithParameters(template, parameter)

【问题讨论】:

    标签: azure azure-resource-manager arm-template


    【解决方案1】:

    如果要使用模板中提供的默认参数,则无需传递参数文件。例如,您可以使用以下命令部署 Key Vault:

    New-AzResourceGroupDeployment -Name MyKeyVaultDeployment -ResourceGroupName MyRg -Mode Incremental -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/modules/Microsoft.KeyVault/vaults/1.0/azuredeploy.json
    

    由于我们没有指定参数文件或将参数传递到命令中,因此部署过程将简单地使用模板中的默认值。

    【讨论】:

    • 嗨@holger,我正在尝试使用一个空的参数文件,因为无论我指定哪个参数,我总是会收到相同的错误消息例如:{“$schema”:“schema.management.azure.com/schemas/2019-04-01/…”,“contentVersion”:“1.0.0.0 ", "parameters": { "vaultName": { "value": "testkeyvault" } } } 错误信息还是一样的。关于参数文件有什么问题的任何想法?
    • 嗯。我测试成功了。创建了一个文件 param.json,添加了内容 { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "vaultName": { "value": "testkeyvault29092022" } } } 然后运行 ​​New-AzResourceGroupDeployment -Name md -ResourceGroupName myRg -Mode Incremental -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/modules/Microsoft.KeyVault/vaults/1.0/azuredeploy.json -TemplateParameterFile .param.json
    • 也许这是json文件的编码问题?它保存为utf-8吗? (我猜是真的)
    • 是的,它是 UTF-8 格式的。我刚刚尝试使用您在示例中提供的相同 keyvault 名称(以防该名称可能导致冲突)但仍然出现相同的错误
    • 奇怪的。顺便说一句,您是如何部署模板的? PowerShell、Azure CLI 还是 Azure 门户?
    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2022-09-30
    • 2021-01-03
    • 1970-01-01
    • 2019-02-11
    • 2020-08-31
    • 2020-07-21
    相关资源
    最近更新 更多