Что такое упаковщик?
Packer - это инструмент для создания образа сервера, разработанный HashiCorp. Серверная визуализация; или, альтернативно, неизменная инфраструктура; является популярной альтернативой инструментам настройки времени выполнения, таким как Ansible или Puppet. Он основан на идее, что после развертывания сервера вы никогда его не измените; вместо этого вы развертываете новый сервер со своими изменениями, а затем разрушаете старый. Это облегчает обслуживание сервера и позволяет более эффективно масштабировать его на большом количестве компьютеров.
Хотя Packer не поддерживает Vultr «из коробки», есть плагин, который добавляет эту поддержку. Инструкции по установке Packer с поддержкой Vultr можно найти в README плагина. В остальной части этой статьи предполагается, что у вас установлен Packer, а также плагин Vultr.
Как это работает
Назначение Packer - создавать образы серверов или артефакты, которые можно использовать для создания нового сервера в точности так, как это было во время создания образа. Для Vultr эти артефакты называются Снимками. Плагин работает, развертывая новый VPS, запуская на нем определенных провайдеров, создавая его снимок, а затем разрушая VPS. Если вы хотите создать новый сервер из вашего образа, просто вызовите API Vultr для развертывания нового VPS с желаемым снимком в качестве его ОС.
Использование упаковщика
Packer принимает файл JSON, определяющий сборку, которую он должен запускать в качестве входных данных. Вот пример файла, определяющего сборку Vultr:
{
  "variables": {
    "vultr_api_key": "{{env `VULTR_API_KEY`}}"
  },
  "builders": [
    {
      "type": "vultr",
      "api_key": "{{user `vultr_api_key`}}",
      "snapshot_description": "My Awesome App",
      "region_id": "2",
      "plan_id": "201",
      "os_id": "167",
      "ssh_username": "root"
    }
  ]
}
Этот файл имеет два ключа верхнего уровня variablesи builders. variablesКлюч используется для определения пользовательских переменных, и в этом случае используется для включения VULTR_API_KEYпеременной среды таким образом , что может быть использован позже. buildersКлюч содержит список сборки для запуска, только в этом случае нашего Vultr сборка. Давайте немного разберем эту сборку:
	- type: Это определяет сборщик, который будет фактически использоваться, и для сборок Vultr это всегда должно быть- vultr.
- api_key: Для запуска сборки вам необходим ключ API, который определен здесь. Этот пример определяет его как значение- vultr_api_keyпользовательской переменной, которая далее устанавливается в значение- VULTR_API_KEYпеременной среды.
- snapshot_description: Описание полученного снимка.
- region_id: Регион для развертывания VPS в. Это не влияет на окончательный снимок, только сервер, с которого создается снимок.
- plan_id: План использования для VPS. В будущем использование этого снимка должно определять план, который по крайней мере настолько велик.
- os_id: Операционная система для создания снимка.
- ssh_username: Имя пользователя, которое будет использоваться при SSH'инге на сервере для предоставления. Для серверов Linux это обычно будет- root.
Чтобы использовать его, сохраните этот файл с именем как server.json, а затем выполните команду packer build server.json. Вы увидите некоторые результаты, показывающие состояние сборки, что займет несколько минут.
Когда вы запустите эту сборку, новый сервер с именем Snapshotting: My Awesome Appбудет создан, снимок, а затем уничтожен. Без определения провайдеров, это все, что происходит. Для получения дополнительной информации об определении провайдеров см . Документацию Packer .
После завершения сборки Packer выведет идентификатор полученного снимка.
Определение региона, плана и ОС
Эти три значения требуются для каждой сборки Vultr, но могут быть определены одним из нескольких способов. Для каждого вы должны указать точно один из его вариантов, чтобы избежать двусмысленности:
Область
Информация о регионе может быть запрошена через API: https://www.vultr.com/api/#regions_region_list
	- region_id: Идентификатор региона, например- 2
- region_code: Код региона, например- ORD
Строить планы
Информация о плане может быть запрошена через API: https://www.vultr.com/api/#plans_plan_list
	- plan_id: Идентификатор плана, например- 201
Операционные системы
Информация об операционной системе может быть запрошена через API: https://www.vultr.com/api/#os_os_list
	- os_id: Идентификатор ОС, например- 167