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 служил вам во множестве сценариев.



