如何排查 Azure ARM 模板验证错误?

How can I troubleshoot Azure ARM template validation errors?

我对 Azure ARM 模板文件做了一些小改动,现在当我尝试通过 xplat cli 进行部署或验证时,我收到了这条消息。

error: InvalidTemplateDeployment : The template deployment 'fakedDeploymentName' is not valid according to the validation procedure. The tracking id is '\some kind of GUID here\'. See inner errors for details. Please see http://aka.ms/arm-deploy for usage details.

error: PreflightValidationCheckFailed : Preflight validation failed. Please refer to the details for the specific errors.

我很想解决这个问题,但我在控制台上没有看到任何 "inner errors"。它甚至每次都给我一个唯一的 GUID,这意味着我可以使用这个 GUID 来查找信息更丰富的消息。我在哪里可以查看更详细的错误? (尚未就错误的真正来源寻求帮助)

我认为跟踪 ID 是为了技术支持查看他们的日志,而不是为了用户。 关于您的确切问题,您需要查看日志 - reference.

另一个验证模板的好方法是使用 Resource Explorer.

确保您运行使用的是最新版本的 CLI,我们正在努力冒出详细的错误。如果还是没听懂,请告诉我们 https://github.com/Azure/azure-xplat-cli/issues

然后,如果日志没有向您显示详细信息,运行 使用 -vv 开关的部署,详细的调试输出(虽然冗长)将包含所有错误消息,您通常可以筛选并找出具体故障。

azure group deployment create ... --debug

Powershell:

New-AzResourceGroupDeployment ... -debug

登录到 Azure 门户 portal.azure.com。

打开Activity日志

在活动列表中找到操作名称为验证的记录。它应该有一个红色感叹号,因为它失败了。

点击那个记录。然后单击底部的 JSON 选项卡。阅读并在返回的 Json 深处某处,您可能会在 statusMessage 中发现错误,例如 "The storage account named helloworld is already taken."

我在同一期中 运行。基本上,我无法获得任何详细信息 "InvalidTemplateDeployment"。

我在 Visual Studio: Azure 资源组项目模板中添加了我的 ARM 模板并尝试部署它。我在“输出”选项卡中获得了详细信息。这帮助我解决了我的问题。

在我的例子中,它是集群的名称,它只能是小写字母和数字。

运行 提供跟踪 ID 的以下 PowerShell Azure cmdlet:

Get-AzureRMLog -CorrelationId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -DetailedOutput

建立在@nftw 上:

$deploymentGroupName = 'deploymentGroupName'
$correlationId = ((Get-AzureRMLog -ResourceGroup $deploymentGroupName)[0]).CorrelationId
$logentry = (Get-AzureRMLog -CorrelationId $correlationId -DetailedOutput)
#$logentry
$rawStatusMessage = $logentry.Properties
$status = $rawStatusMessage.Content.statusMessage | ConvertFrom-Json
$status.error.details
$status.error.details.details

基于 nftw 的回答...

为了 faster/easier 找到错误问题,我使用了 grepless 以及如下变量:

$correlationId ='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' # store your correlation ID here
Get-AzureRmLog -CorrelationId $correlationID -DetailedOutput | grep -C 10 $correlationID | less

在我的测试中,错误接近输出的顶部。您可以使用 less 和正斜杠键 / 并搜索 "error" 以更快地找到错误。

az vm list [--only-show-errors]
           [--resource-group]
           [--show-details]
           [--subscription]