Начало работы с Packer
Packer позволяет создавать образы дисков виртуальных машин с заданными в конфигурационном файле параметрами. Сценарий описывает создание образа диска с помощью Packer.
Packer создаст и запустит виртуальную машину с ОС Debian 11 из Cloud Marketplace, на которую будет установлен веб-сервер nginx. Затем ВМ будет удалена и будет создан образ ее загрузочного диска. После этого диск тоже будет удален.
Чтобы создать образ:
- Подготовьте облако к работе.
- Установите Packer.
- Подготовьте конфигурацию образа.
- Создайте образ.
- Проверьте образ.
Если созданный образ больше не нужен, удалите его.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
- Установите интерфейс командной строки Yandex Cloud.
- Создайте в вашем каталоге облачную сеть с одной подсетью.
- Получите OAuth-токен
для аккаунта на Яндексе или IAM-токен для федеративного аккаунта.
Необходимые платные ресурсы
В стоимость создания образа диска с помощью Packer входит:
- плата за хранение созданных образов (см. тарифы Yandex Compute Cloud);
- плата за вычислительные ресурсы ВМ (см. тарифы Yandex Compute Cloud).
Установите Packer
Примечание
Для работы с Yandex Cloud требуется Packer версии не ниже 1.5.
Скачайте дистрибутив Packer и установите его по инструкции на официальном сайте
Также вы можете скачать дистрибутив Packer для вашей платформы из зеркалаPATH
:
export PATH=$PATH:/path/to/packer
Настройте плагин Yandex Compute Builder
Чтобы настроить плагин
-
Создайте файл
config.pkr.hcl
со следующим содержанием:packer { required_plugins { yandex = { version = ">= 1.1.2" source = "github.com/hashicorp/yandex" } } }
-
Установите плагин:
packer init <путь_к_файлу_config.pkr.hcl>
Результат:
Installed plugin github.com/hashicorp/yandex v1.1.2 in ...
Подготовьте конфигурацию образа
- Подготовьте идентификатор каталога, выполнив команду
yc config list
. - Подготовьте идентификатор подсети, выполнив команду
yc vpc subnet list
. - Создайте JSON-файл с любым именем, например,
image.json
. Запишите туда следующую конфигурацию:
{
"builders": [
{
"type": "yandex",
"token": "<OAuth-токен_или_IAM-токен>",
"folder_id": "<идентификатор_каталога>",
"zone": "ru-central1-a",
"image_name": "debian-11-nginx-{{isotime | clean_resource_name}}",
"image_family": "debian-web-server",
"image_description": "my custom debian with nginx",
"source_image_family": "debian-11",
"subnet_id": "<идентификатор_подсети>",
"use_ipv4_nat": true,
"disk_type": "network-ssd",
"ssh_username": "debian"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"echo 'updating APT'",
"sudo apt-get update -y",
"sudo apt-get install -y nginx",
"sudo su -",
"sudo systemctl enable nginx.service",
"curl localhost"
]
}
]
}
Где:
token
— OAuth-токен для аккаунта на Яндексе или IAM-токен для федеративного аккаунта.folder_id
— идентификатор каталога, в котором будет создана ВМ и ее образ.subnet_id
— идентификатор подсети, в которой будет создана ВМ и ее образ.
Важно
В конфигурационном файле нельзя одновременно использовать параметры provisioner "shell"
и metadata
.
Подробнее о параметрах конфигурации образа см. в документации Yandex Compute Builder
Создайте образ
Запустите сборку образа с указанными в конфигурации параметрами:
packer build image.json
Проверьте созданный образ
Убедитесь, что образ создан:
- Перейдите в консоль управления
. - Выберите сервис Compute Cloud.
- Откройте раздел Образы. Убедитесь, что там появился новый образ диска.
Удалите созданные ресурсы
Если созданный образ вам больше не нужен, удалите его.
Удалите подсеть и облачную сеть, если вы их создавали специально для выполнения сценария.