如何使用Packer在Azure中构建包含大型文件的映像?

jm81lzqq  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(123)

我想在Windows 2019上的Azure中使用大文件构建映像。该文件包含创建映像所需的工件。在我尝试将200 MB文件复制到主机之前,VM运行得很顺利。这预计需要11个小时。就在那时,我发现了WinRM及其文件复制限制。
然后,我发现了http_directory参数,可以通过http将文件复制到主机,但azure-arm builder不提供该参数。
然后我看到我可以使用SSH。问题是我不能从ssh配置程序开始并切换到WinRM配置程序来运行我的ps1配置脚本。我读到我可以从ssh开始,拍摄图像,然后用WinRM启动它。不理想。
我发现了这个软件:“https://github.com/winfsp/sshfs-win”-但我不知道一种方法,使供应的主机直接访问 Package 机主机,它是由供应。
我偶然发现了winrmcp,但它似乎很旧,如果我能想出如何让它运行的话,它不太可能工作。
我倾向于blob存储,但这似乎是一种逃避。
启动Windows 2019 Server,将200 MB文件复制到其中并运行ps1脚本的最佳方法是什么?

ibps3vxo

ibps3vxo1#

你可以尝试使用Ansible Provisioner复制你的文件。它要快得多。当我复制一个10 MB的文件时,文件Provisioner花了大约4分钟,但Ansible Provisioner只花了15秒。
封隔器文件:

source "azure-arm" "example" {
  use_azure_cli_auth                = true
  os_type                           = "Windows"
  communicator                      = "winrm"
  image_offer                       = "WindowsServer"
  image_publisher                   = "MicrosoftWindowsServer"
  image_sku                         = "2016-Datacenter"
  managed_image_name                = "image"
  managed_image_resource_group_name = "rg"
  location                          = "westeurope"
  vm_size                           = "Standard_D2_v2"

  winrm_insecure = true
  winrm_timeout  = "5m"
  winrm_use_ssl  = true
  winrm_username = "packer"
}

build {
  sources = ["sources.azure-arm.example"]

  provisioner "ansible" {
    playbook_file = "./copy.yml"
    extra_arguments = [
      "-e", "ansible_winrm_server_cert_validation=ignore",
      "-e", "ansible_winrm_transport=ntlm"
    ]
    user      = "packer"
    use_proxy = false
  }
}

Ansible playbook-copy.yml:

---
- name: Copy file to Windows host
  hosts: all

  tasks:
    - name: Copy file
      win_copy:
        src: ./10MB.bin
        dest: C:\10MB.bin

相关问题