Представьте, что вы запускаете 100 виртуальных машин (ВМ) в облаке. Если настраивать каждую вручную — устанавливать ПО, создавать пользователей, конфигурировать сети — процесс займёт дни. Cloud-init решает эту проблему, превращая развёртывание инфраструктуры в мгновенный и предсказуемый процесс. Эта статья объяснит, как он работает, зачем нужен и как его использовать на практике.
Cloud-init — это открытая кроссплатформенная система автоматизации, которая настраивает виртуальные машины сразу после первого запуска в облачных средах.
Почему это стандарт?
Без cloud-init облачные инфраструктуры невозможно масштабировать. Он — «мозг» автоматизации, заложенный в основу таких инструментов, как Terraform, Ansible и Kubernetes.
graph LR
A[Запуск ВМ] --> B{Первый старт?}
B -->|Да| C[Cloud-init активируется]
C --> D[Чтение метаданных облака]
D --> E[Обработка user-data]
E --> F[Настройка системы]
F --> G[ВМ готова]
B -->|Нет| G
Категория задач | Примеры использования |
---|---|
Безопасность | Создание пользователей, добавление SSH-ключей |
Установка ПО | Автообновление ОС, установка Nginx, Docker, Python |
Конфигурация | Настройка сети, hostname, часового пояса |
Файловая система | Создание файлов, монтирование дисков, запись логов |
Интеграция | Запуск скриптов для регистрации ВМ в мониторинге (Zabbix, Prometheus) |
#cloud-config
#cloud-config
users:
- name: admin
sudo: "ALL=(ALL) NOPASSWD:ALL"
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA... ваш_публичный_ключ
Как это работает:
- Создаёт пользователяadmin
с правами sudo.
- Добавляет ваш публичный ключ — вы сможете зайти по SSH без пароля.
Важно! Никогда не используйте пароли в user-data — только SSH-ключи.
#cloud-config
packages:
- nginx
- certbot
write_files:
- path: /var/www/html/index.html
content: |
<h1>Виртуальная машина настроена через cloud-init!</h1>
permissions: '0644'
runcmd:
- [ systemctl, enable, nginx ]
- [ systemctl, start, nginx ]
Этапы:
1. Устанавливает Nginx и Certbot.
2. Создаёт стартовую страницу.
3. Запускает веб-сервер.
Результат: Откройте публичный IP ВМ в браузере — увидите ваш HTML.
#cloud-config
runcmd:
- curl -s https://packagecloud.io/install/repositories/zabbix/stable/script.rpm.sh | bash
- yum install -y zabbix-agent
- sed -i 's/Server=127.0.0.1/Server=monitoring.yourcompany.ru/' /etc/zabbix/zabbix_agentd.conf
- systemctl enable --now zabbix-agent
Как применять:
- Заменитеmonitoring.yourcompany.ru
на адрес вашего сервера Zabbix.
- Все новые ВМ автоматически появятся в мониторинге через 2 минуты после старта.
curl http://сомнительный_сайт/setup.sh
— храните скрипты в приватном S3-бакете с IAM-ролями.sudo: ALL
, только необходимые команды.Cloud-init — фундамент облачной автоматизации. Он превращает рутину в 5-секундный процесс и делает возможным:
- Мгновенное развёртывание инфраструктуры «под ключ».
- Полное соответствие принципам Infrastructure as Code (IaC).
- Портабельность решений между облаками (AWS → Yandex Cloud без переделки).
Полезный совет для начинающих:
Начните с простого — автоматизируйте создание пользователей и установку базового ПО. Уже это сэкономит часы ручной работы. Позже интегрируйте cloud-init с Terraform или Ansible для enterprise-сценариев.