![在打包程序构建期间启动后在 Windows Azure VM 中运行脚本以配置 WinRM 和防火墙](https://linux22.com/image/771576/%E5%9C%A8%E6%89%93%E5%8C%85%E7%A8%8B%E5%BA%8F%E6%9E%84%E5%BB%BA%E6%9C%9F%E9%97%B4%E5%90%AF%E5%8A%A8%E5%90%8E%E5%9C%A8%20Windows%20Azure%20VM%20%E4%B8%AD%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E4%BB%A5%E9%85%8D%E7%BD%AE%20WinRM%20%E5%92%8C%E9%98%B2%E7%81%AB%E5%A2%99.png)
背景:显然帕克主要问题在从发布者创建的 Azure VM 上配置 WinRM Microsoft Windows Server
。这只是我发现的几个问题和线程之一,它可以追溯到几年前。因此,我无法使用 Packer 连接到实例,以便配置和准备我们自己的 Windows 映像以供公司内部使用。我尝试过更改超时,尝试过不同的 VM 大小,但都不起作用。Packer 的 ARM 模板在配置 WinRM 方面简直是垃圾。而且他们不愿意解决这个问题。建议提供一种方式以与 AWS 用户数据相同的方式在 Azure 上运行脚本,Hashicorp 的愚蠢“解决方案”是“准备一个自定义映像来处理自定义数据脚本,以便您可以使用打包程序准备自定义映像”。他们甚至建议他们的代码无法做到这一点,这是完全错误。
我已经在 AWS 中自己完成了这项工作,通过配置要运行的用户数据脚本来配置 WinRM 和防火墙。我发现 Azure 有一个类似的功能,叫做自定义数据,虽然我可以使用azure-arm
源代码进行设置,但出于一些“可爱”的原因Windows 没有办法运行它,只有 Linux 可以通过cloud-init
。我可以使用我需要的东西来运行Invoke-AzVMRunCommand
(无论它是否是自定义数据,都可以解决问题!太好了!除了 Packer 没有(我能找到的)提供从构建器运行“预连接”命令的方法,只有在您点击配置程序后才有此选项。我的配置程序代码在与 WinRM 建立连接之前不会运行。先有鸡,再有蛋(或者是反过来?)
因此,除非我遗漏了某些内容,否则我无法使用 Packer 的当前状态自动执行此操作。但是,由于内部政策和程序,我无法在此处使用其他工具进行图像构建。如果这个背景有点夸张,我深表歉意,我对这个问题感到非常疲倦和沮丧。
问题:有没有什么想法不是否涉及通过其他一些过程创建中间自定义映像,以便我在配置时针对 Windows Azure VM 运行脚本?是否有可与 Packer 一起使用的替代 Azure 构建器可能会有所帮助?或者也许是 Azure 发布者发布的 Windows 映像已经具有在启动时运行自定义数据的能力?或者也许 Packer 有一个我尚未考虑过的技巧?如果我可以在创建 VM 后从构建器运行 Azure CLI 命令,我就可以快速解决这个问题。
我的其他想法是分叉azure-arm
构建器并添加我自己需要的功能,或者完全编写我自己的提供程序。前一种解决方案可能是可行的,我可以将代码贡献回来(如果 Hashicorp 不会因为“这不是他们的方式”而拒绝它),但后者似乎对这种情况来说过于严厉。此外,我不了解 Go,所以我必须选择它,而且它与许多 Go 不同。无论如何,如果已经有针对这种情况的真正解决方案,我希望避免为解决方案开发自己的代码。
在此先非常感谢您对这个问题的考虑。