Как создать пользовательские Azure изображения размером менее 30 ГБ с помощью Packer + Terraform? - PullRequest
0 голосов
/ 16 марта 2020

Я хочу создать пользовательские изображения объемом 4 ГБ для экономии средств в стороннем проекте. Я смог установить размер для Azure -обеспечиваемого образа Ubuntu 18.04 base в Terraform, успешно используя следующее:

resource "azurerm_managed_disk" "example-disk" {
  ...
  create_option = "FromImage"
  disk_size_gb = "4"
}

resource "azurerm_virtual_machine" "example" {
  ...
  vm_size = "Standard_B1s"

  storage_image_reference {
    publisher = "Canonical"
    offer = "UbuntuServer"
    sku = "18.04-LTS"
    version = "latest"
  }

  storage_os_disk {
    name = azurerm_managed_disk.example-disk.name
    managed_disk_id = azurerm_managed_disk.example-disk.id
    create_option = "Attach"
    caching = "ReadWrite"
  }
  ...
}

Поэтому я попытался внести следующие изменения, чтобы использовать пользовательский образ Packer, который я создал из этого базового образа Ubuntu (в соответствии с документами terraform-provider-azurerm, использующими управляемый диск + настраиваемое изображение, не очень простое, но это ни здесь, ни там):

variable "packer_image_id" {}

variable "packer_image_name" {}

data "azurerm_image" "custom" {
  ...
  name = var.packer_image_name
}

resource "azurerm_virtual_machine" "example" {
  ...
  vm_size = "Standard_B1s"

  delete_os_disk_on_termination = true

  storage_image_reference {
    id = data.azurerm_image.custom.id
  }

  storage_os_disk {
    create_option = "FromImage"
    caching = "ReadWrite"
    disk_size_gb = "4"
  }
  ...
}

Когда я делаю это изменение, но получаю ошибку:

Error: compute.VirtualMachinesClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: autorest/azure: Service returned an error. Status=<nil> Code="OperationNotAllowed" Message="The specified disk size 4 GB is smaller than the size of the corresponding disk in the VM image: 30 GB. This is not allowed. Please choose equal or greater size or do not specify an explicit size." Target="osDisk.diskSizeGB"

«Ничего страшного», я подумал: «Я просто сделаю фактическое изображение 4 ГБ». Итак, я попытался добавить строку "os_disk_size_gb": 4 в свой шаблон Packer:

{
  "variables": [ ... ],
  "builders": [
    {
      "type": "azure-arm",
      "client_id": "{{ user `azure_client_id` }}",
      "client_secret": "{{ user `azure_client_secret` }}",
      "subscription_id": "{{ user `azure_subscription_id` }}",
      "tenant_id": "{{ user `azure_tenant_id` }}",
      "location": "eastus2",
      "vm_size": "Standard_B1s",
      "os_type": "Linux",
      "os_disk_size_gb": 4,
      "image_publisher": "Canonical",
      "image_offer": "UbuntuServer",
      "image_sku": "18.04-LTS",
      "ssh_username": "packer",
      "managed_image_name": "example-{{ isotime \"20060102-150405\" }}",
      "managed_image_resource_group_name": "packer-images",
      "azure_tags": {}
    }
  ],
  "provisioners": [ ... (omitting for space: just a "remote-exec" that creates a new user, downloads Tomcat, and enables service) ]
}

Но я получаю эту ошибку:

==> azure-arm: ERROR:   -> OperationNotAllowed : The specified disk size 4 GB is smaller than the size of the corresponding disk in the VM image: 30 GB. This is not allowed. Please choose equal or greater size or do not specify an explicit size.

Удаление обоих disk_size_gb = "4" из плана Terraform и "os_disk_size_gb": 4 из шаблона Packer приводит к успешному созданию и развертыванию образа, но я использую виртуальный диск объемом 30 ГБ, который намного больше, чем мне нужно. Есть ли что-то, что я здесь скучаю? Или просто невозможно иметь пользовательские изображения размером Azure менее 30 ГБ с помощью Packer + Terraform?

1 Ответ

0 голосов
/ 17 марта 2020

Это не ограничение упаковщика, а ограничение Azure относительно базового изображения. Эти файлы изображений могут быть размером до 1 ГБ, но образ Ubuntu по умолчанию имеет диск ОС объемом 30 ГБ. И вы не можете создать виртуальную машину с диском, меньшим базового образа.

https://docs.azure.cn/en-us/articles/azure-marketplace/imageguide#3 -

Файлы образов VHD должны иметь размер от 1 ГБ до Размер 1 ТБ.

Возможно, вам потребуется создать целое изображение с нуля, если вы хотите, чтобы go было меньше 30 ГБ. См. Например https://docs.azure.cn/en-us/articles/azure-marketplace/imagecreateonlocal

...