Запуск Продукты Bitnami Документацияimaxe CLI Блог Контакты

cloud-init и user-data: настраивайте инстансы при загрузке как профессионал

Golden AMI закрывает стабильное; cloud-init закрывает изменчивое. Владение user-data и cloud-init позволяет использовать один образ в тысяче сценариев, не пересобирая его. Вот практическое руководство.

Ноутбук с обновлением системы в терминале
Ноутбук с обновлением системы в терминале Фото: Solijon Solayev · CC BY-SA 4.0 · Wikimedia Commons

cloud-init — фактический стандарт инициализации облачных инстансов при первой загрузке. Когда вы запускаете инстанс и передаёте ему скрипт user-data, именно cloud-init его интерпретирует и выполняет: создаёт пользователей, пишет файлы, устанавливает пакеты, монтирует диски и запускает службы.

Идеальное сочетание очевидно: golden AMI содержит то, что не меняется — операционную систему, среду выполнения, усиление, — а user-data приносит то, что различается по средам и инстансам: конфигурацию, подставляемые секреты, роль. Так один образ работает во множестве контекстов.

Два способа писать user-data

user-data поддерживает несколько форматов; чаще всего это shell-скрипт и cloud-config.

  • Shell-скрипт: начинается с #!/bin/bash. Просто и прямолинейно для быстрых задач.
  • cloud-config: начинается с #cloud-config и использует декларативный YAML. Чище, читабельнее и идемпотентнее для настройки пользователей, пакетов, файлов и команд.

Пример cloud-config

Типичный #cloud-config объявляет разделы вроде packages: (устанавливаемые пакеты), write_files: (файлы конфигурации), runcmd: (финальные команды) и users: (учётные записи и ключи). Будучи декларативным, он проще для ревью и поддержки, чем длинный скрипт.

Хорошие практики

  • Держите user-data небольшим: если он сильно разрастается, это, скорее всего, стоит запечь в AMI.
  • Идемпотентность: проектируйте команды так, чтобы повторный запуск ничего не ломал.
  • Никогда не кладите секреты открытым текстом в user-data: он читается из метаданных инстанса. Подставляйте их во время выполнения из Secrets Manager, Parameter Store или Vault.
  • Защищайте доступ к метаданным: используйте IMDSv2, чтобы снизить риск кражи учётных данных через SSRF.
  • Логируйте и отлаживайте: логи cloud-init (/var/log/cloud-init-output.log) — ваш лучший друг, когда что-то не работает.

Запекать или запускать: что и куда

Идёт в AMI (baking)Идёт в user-data (booting)
Операционная система и патчиКонфигурация конкретной среды
Среда выполнения, агенты и усилениеПеременные и параметры конкретного инстанса
Стабильное тяжёлое ПОРегистрация в кластере и обнаружение
Всё, что долго ставитсяПодстановка секретов во время выполнения

Золотое правило: стабильное и медленное запекается; изменчивое и лёгкое идёт при запуске.

Типичные ошибки, которые стоят часов

  • Класть в user-data то, что должно быть в образе, — отсюда медленные и хрупкие запуски.
  • Выставлять секреты открытым текстом в метаданных.
  • Считать, что user-data выполняется при каждой загрузке: по умолчанию он работает лишь при первой.
  • Не смотреть логи cloud-init, когда инстанс «делает не то, что должен».

Часто задаваемые вопросы

Выполняется ли user-data при каждой перезагрузке?

По умолчанию — только при первой загрузке. cloud-init можно настроить на выполнение отдельных частей при каждой загрузке, но делать это стоит осознанно и идемпотентно.

Безопасно ли передавать пароли в user-data?

Нет. user-data читается из метаданных инстанса. Используйте менеджер секретов и подставляйте их во время выполнения, а метаданные защищайте через IMDSv2.

cloud-init работает только в AWS?

Нет. cloud-init кроссплатформенный и работает в AWS, Azure, GCP и других облаках, что делает его удобным для переносимой автоматизации запуска.

В imaxe.cloud мы проектируем образы под связку с cloud-init, чтобы один AMI служил вам во множестве сценариев.

cloud-inituser-dataec2начальная настройкаimdsv2
IM

Команда imaxe

Мы создаём и поддерживаем AMI каталога. Когда мы публикуем версию, мы используем её в продакшене раньше всех.

Из каталога

AMI по теме статьи

Продолжайте читать

Похожие статьи