无法在 ARM 模式下将 Azure DSC 扩展添加到 VM

Can't Add Azure DSC Extension to VM in ARM mode

我需要基于映像(SQL Server 2016 on Windows Server 2016)创建 VM,并通过 powershell 向其添加 DSC 扩展。我有 template.json 并且它是我在门户中创建 VM(windows 2016 服务器上的 sql2016 服务器)时保存的 parameters.json 文件(在参数文件中我定义 url 发布的 sdc zip 和管理员密码)。 带有配置的 Zip 文件位于 github public 存储库中。它是由 powershell publish commandlet 创建的。 在此之后我的下一步是:

Login-AzureRmAccount
# Create resource group
New-AzureRmResourceGroup -Name orsql1 -Location 'North Europe' # succeed

# Define deployment variables
$Deployment = @{
    ResourceGroupName = 'orsqllast';
    Mode = 'Complete';
    TemplateFile = 'template.json';
    TemplateParameterFile = 'parameters.json';
    Force = $true;
}
New-AzureRmResourceGroupDeployment @Deployment  -DeploymentDebugLogLevel All

dsc1.ps1内容:

configuration IISInstall
{
    node ("localhost")
    {
        WindowsFeature IIS
        {
            Ensure = "Present"
            Name = "Web-Server"
        }
    }
}

经过很多时间我得到这个错误:

New-AzureRmResourceGroupDeployment : 14:02:10 - Resource Microsoft.Resources/deployments 'Microsoft.DSC-20161
010122604' failed with message '{
  "status": "Failed",
  "error": {
    "code": "ResourceDeploymentFailure",
    "message": "The resource operation completed with terminal provisioning state 'Failed'.",
    "details": [
      {
        "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\": \"ResourceDeploymen
tFailure\",\r\n    \"message\": \"The resource operation completed with terminal provisioning state 'Failed'.
\",\r\n    \"details\": [\r\n      {\r\n        \"code\": \"VMExtensionProvisioningError\",\r\n        \"mess
age\": \"VM has reported a failure when processing extension 'Microsoft.Powershell.DSC'. Error message: \\"E
rror unpacking 'dsc1.ps1.zip'; verify this is a valid ZIP package.\nError details: Exception calling \\"Ext
ractToDirectory\\" with \\"2\\" argument(s): \\"End of Central Directory record could not be found.\\"\
\".\"\r\n      }\r\n    ]\r\n  }\r\n}"
          }
        ]
      }
    ]
  }
}'
At line:14 char:1
+ New-AzureRmResourceGroupDeployment @Deployment  -DeploymentDebugLogLe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-AzureRmResourceGroupDeployment], Exception
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResour 
   ceGroupDeploymentCmdlet

New-AzureRmResourceGroupDeployment : 14:02:10 - At least one resource deployment operation failed. Please lis
t deployment operations for details. Please see https://aka.ms/arm-debug for usage details.
At line:14 char:1
+ New-AzureRmResourceGroupDeployment @Deployment  -DeploymentDebugLogLe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-AzureRmResourceGroupDeployment], Exception
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResour 
   ceGroupDeploymentCmdlet

New-AzureRmResourceGroupDeployment : 14:02:10 - Template output evaluation skipped: at least one resource dep
loyment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug 
for usage details.
At line:14 char:1
+ New-AzureRmResourceGroupDeployment @Deployment  -DeploymentDebugLogLe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-AzureRmResourceGroupDeployment], Exception
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResour 
   ceGroupDeploymentCmdlet

New-AzureRmResourceGroupDeployment : 14:02:10 - Template output evaluation skipped: at least one resource dep
loyment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug 
for usage details.
At line:14 char:1
+ New-AzureRmResourceGroupDeployment @Deployment  -DeploymentDebugLogLe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-AzureRmResourceGroupDeployment], Exception
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResour 
   ceGroupDeploymentCmdlet

zip 有效,我使用另一个 - 同样的错误。 parameters.json

的一部分
"ex0_vmName": {
"value": "node1"
},
"ex0_location": {
"value": "northeurope"
},
"ex0_modulesUrl": {
"value": "https://github.com/myname/mydsc/blob/master/dsc1.ps1.zip"
},
"ex0_configurationFunction": {
"value": "dsc1.ps1\IISInstall"
},
"ex0_wmfVersion": {
"value": "latest"
},
"ex0_privacy": {
"value": "Enable"
},
"ex0_version": {
"value": "2.8"
}

我建议您查阅 c:\windowsazure\logs 中虚拟机本身的日志。在 c:\extensions(现在是 C:\Packages\Plugins)下,您可以找到您的 zip 包和 DSC 扩展文件。

最简单的故障排除方法是使用门户创建 DSC 扩展。如果失败并出现相同的错误,您可能需要重新创建 zip 文件。我在 zip 包中遇到了同样的错误,并通过重新创建解决了这些错误。

我还建议您转向 Azure 自动化。根据你的范围,每月 500 分钟的免费时间可能没问题,你可以将 mof 上传到 Azure 自动化。而且我发现 Azure 自动化比 DSC 扩展更一致。