有没有验证导出的Azure ARM模板的好方法?

时间:2019-07-04 10:41:54

标签: azure arm-template

我是Azure ARM模板的新手,我想做的就是利用Web应用程序,SQL Server等现有资源快速构建测试环境。 在尝试从现有资源的ARM模板进行部署时,遇到了一些问题,并且不确定是否有很好的方法来测试模板是否正常工作。

  1. 对于练习模板的部署,我使用Azure门户,并首先从Web app + SQL Azure模板创建了一些资源。

    (1)创建资源

    (2)输入Web App + SQL

    (3)设置资源名称和内容,然后完成。

  2. 然后转到源组并导出这些资源的ARM模板。

    (1)转到资源组

    (2)单击选中所有复选框

    (3)导出模板

    (4)下载

  3. 最后,使用此template.json进行部署。

    (1)创建资源

    (2)输入template并选择Template deployment (deploy using custom template)

    (3)在编辑器中构建自己的模板

    (4)加载文件

    (5)上传之前下载的template.json

    (6)保存

    (7)选择资源组并设置与先前创建的资源没有重复的资源名称。

    (8)选中“我同意”复选框,然后单击“购买”按钮。

所以基本上我没有更改任何资源,只是导出并部署,部署失败。

这是错误消息:

{
  "code": "DeploymentFailed",
  "message": "At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details.",
  "details": [
    {
      "code": "Conflict",
      "message": "{\r\n \"status\": \"Failed\",\r\n \"error\": {\r\n \"code\": \"ResourceDeploymentFailure\",\r\n \"message\": \"The resource operation completed with terminal provisioning state 'Failed'.\",\r\n \"details\": [\r\n {\r\n \"code\": \"InvalidParameterValue\",\r\n \"message\": \"Invalid value given for parameter Password. Specify a valid parameter value.\"\r\n }\r\n ]\r\n }\r\n}"
    }
  ]
}

经过研究,我发现如果部署SQL Server,也需要在模板中设置管理员密码参数。

我想问的是,有没有一种构建ARM模板的好方法,您实际上并不需要去部署并获得错误消息来告诉您 缺少哪个参数?

或者您只是构建json文件,进行部署,然后尝试&错误...:S

2 个答案:

答案 0 :(得分:0)

说实话,导出的模板有点狡猾。他们出口一些东西,但是不出口其他东西,他们确实出口了一些东西。它们还倾向于创建大量参数,而通常您可以避免使用前缀参数+名称的资源后缀,而其他一些东西也可以进行硬编码。为了简化您的生活,您可以使用here,它提供了一些intellisense和一些语法检查,但是一些intellisense是错误的(lol),并且如果模板没有显示任何语法错误,那并不意味着它会工作...

因此,唯一的真正方法是尝试部署\修复错误\重复。

答案 1 :(得分:0)

也许对你来说迟了,但可以帮助别人。导航到Azure文档以自动化ARM部署时,我发现此“ Whatif”功能似乎很新鲜。我尚无法测试,但绝对是我想要尝试部署任何东西之前要运行的东西。我假设这将进行一些依赖项检查。一旦测试完成,我将在这里更新。

这些是API参考文档:

https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-deploy-what-if

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.resourcemanager.models.deploymentwhatif