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

问题描述 投票:0回答:9

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

错误:InvalidTemplateDeployment:模板部署 根据验证,“fakedDeploymentName”无效 程序。跟踪 ID 是“\此处的某种 GUID\”。 有关详细信息,请参阅内部错误。请参阅 http://aka.ms/arm-deploy 了解 使用详情。

错误:预检验证检查失败:预检 验证失败。具体请参阅详情 错误。

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

azure azure-resource-manager
9个回答
64
投票

登录 Azure 门户 Portal.azure.com。

打开活动日志

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

单击该记录。然后单击底部的 JSON 选项卡。仔细阅读,在返回的 Json 深处,您可能会在 statusMessage 中发现错误,例如“名为 helloworld 的存储帐户已被占用。”


28
投票

确保您运行的是最新版本的 CLI,我们正在努力显示详细的错误。如果仍未解决问题,请告诉我们 https://github.com/Azure/azure-xplat-cli/issues

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

azure group deployment create ... --debug

Powershell:

New-AzResourceGroupDeployment ... -debug

20
投票

更新(2024 年 2 月)

使用

Get-AzLog
,因为
Get-AzureRMLog
现已弃用。

Get-AzLog -CorrelationId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -DetailedOutput


原始答案(2016 年 11 月)

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

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


2
投票

以 nftw 的答案为基础...

为了更快/更容易地找到错误问题,我使用了

grep
less
以及变量,如下所示:

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

在我的测试中,错误接近输出的顶部。您可以使用

less
和正斜杠键 / 并搜索“错误”以更快地找到错误。


1
投票

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

验证模板的另一个好方法是使用资源浏览器


1
投票

以@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

0
投票

我也遇到了同样的问题。基本上,我无法通过“InvalidTemplateDeployment”获得任何详细信息。

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

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


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

0
投票

如果您在 PowerShell 中使用 Az 模块,则可以使用

Get-AzLog
代替
Get-AzureRMLog
(基于 @nftw 的答案):

Get-AzLog -CorrelationId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -DetailedOutput
© www.soinside.com 2019 - 2024. All rights reserved.