运行 通过同一 VM 上的 Azure 模板的多个自定义脚本

Run multiple custom scripts through Azure templates on same VM

在使用以下代码段通过 ARM 模板创建 VM 后,我有 python script1.py 和 bash 脚本 script2.sh 到 运行。出于某种原因,当我添加此 script2.sh VM 创建失败。 'fileUris' 以及 commandToExecute 都是正确的。可能是什么原因,在哪里查找错误?

{
              "name": "[concat(variables('web'),'/script1')]",                                
              "properties":
               {                   
                    "settings": {
                        "fileUris": ["https://.../script1.py"],
                        "commandToExecute": "python script1.py"
                   }
              }
          },
     {
              "name": "[concat(variables('web'),'/script2')]",                                                 
              "properties":
               {                
                    "settings": {
                        "fileUris": ["https://.../script2.sh"],
                        "commandToExecute": "bash script2.sh"
                   }
              }
          },

为了清楚起见,我省略了类型、apiVersion、位置以及发布者、类型和 typeHandlerVersion。这两个脚本都依赖于 "[concat('Microsoft.Compute/virtualMachines/', variables('web'))]"

对于 Azure VM 扩展,它是一个 Azure 资源,而不是资源的 属性。因此,如果你想在一个模板中将多个扩展添加到 VM,你应该将每个扩展作为一个资源。这是 example.

更新

并且如果一个模板中有两个或多个扩展,您应该确定扩展执行的顺序。虽然在一个模板中有多个扩展,但它们仍然在虚拟机中一个一个地执行。

例如,第一个名为

的扩展
"[concat(variables('vmName'),'/', 'antiMalwareExtension')]"

并且您需要在第二个扩展中添加"dependsOn":

"dependsOn":[  
     "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]",
     "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),'/', 'antiMalwareExtension')]"
  ],

后面的扩展也应该这样做。