Новости и обновления

Удаленная разработка #3: Автоматизация инфраструктуры с Terraform и OVHcloud — практическое руководство

Поделиться:
Développement à distance #3 – Industrialisation et automatisation

После ручной пошаговой настройки вашего сервера настало время автоматизировать весь процесс.

Идея проста: описать вашу инфраструктуру в файлах конфигурации и позволить Terraform управлять заказом ресурсов у OVHcloud.

Вот вводное руководство по Terraform с множеством полезной информации: https://support.us.ovhcloud.com/hc/en-us/articles/22648864003219-Using-Terraform-with-OVHcloud.
А также ссылка на официального провайдера Terraform от OVHcloud: https://registry.terraform.io/providers/ovh/ovh/latest

Автоматизация развертывания состоит из двух этапов:

  • развертывание экземпляра Public Cloud;
  • развертывание прикладной части (vscode-server) и её настройка.

1. Основа автоматизации: скрипт Cloud-init

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

Что вы автоматизируете в этом скрипте:

  • обновление системы (apt update/upgrade);
  • установку code-server через официальный скрипт;
  • установку и настройку Caddy (для автоматического SSL);
  • настройку брандмауэра UFW.

Этот тип файла имеет особый синтаксис; cloud-config.yaml будет представлен ниже.

Однако важно запомнить: зачем использовать этот формат?

  • Идемпотентность: cloud-init гарантирует, что всё готово с первого запуска.
  • Безопасность с рождения: брандмауэр ufw активируется немедленно, сокращая окно уязвимости.
  • Интеграция с Terraform: достаточно одной строки для включения: user_data = file("cloud-config.yaml")

2. Использование Terraform для развертывания

Terraform позволяет запускать экземпляр гораздо проще и быстрее.
Его конфигурация, в свою очередь, имеет несколько преимуществ:

  • сохранность данных. Команда terraform destroy для экземпляра может сохранить том данных (цель, поставленная в главе 2);
  • масштабируемость. При росте проекта размер тома и/или flavor можно изменять;
  • переносимость. Том данных можно отмонтировать и подключить к другой машине.

Чтобы не перегружать статью, здесь не будет копирования кода, а будет ссылка на репозиторий GitHub со всем необходимым для развертывания за несколько минут:
https://github.com/RemyAtOVH/blogpost-dev-server

Его использование:

ubuntu@vscode-server:~$ source openrc.production.sh
ubuntu@vscode-server:~$ terraform init
ubuntu@vscode-server:~$ terraform plan
ubuntu@vscode-server:~$ terraform apply
[…]
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Outputs:instance_ip = “XXX.XXX.XXX.XXX”

До применения cloud-init (или без него) виден вторичный том /dev/sdb, размер которого соответствует спецификациям Terraform:

ubuntu@vscode-server-automated:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
[…]
sda 8:0 0 25G 0 disk
[…]
sdb 8:16 0 10G 0 disk

Именно он обеспечит сохранность данных.

Вы можете вручную удалить экземпляр и другие компоненты, не удаляя его.
Чтобы избежать удаления в случае «terraform destroy», был добавлен параметр:

lifecycle { prevent_destroy = true }

При первом запуске различные скрипты установки могут занять время; вы можете проверить их выполнение простым tail:

ubuntu@vscode-server-automated:~$ tail -f /var/log/cloud-init-output.log

После автоматического выполнения cloud-init всё, что было настроено вручную в предыдущих главах, готово. И это — автоматически и воспроизводимо!

Таким образом, при необходимости можно развернуть эту персонализированную удалённую среду разработки за несколько минут, а затем удалить через несколько часов или дней использования.

В этой серии глав мы превратили простую идею — иметь VS Code везде — в профессиональную, автоматизированную и отказоустойчивую инфраструктуру.
Ниже приведены этапы и пройденный путь.

  • Глава 1: первые шаги ручной установки для понимания механизма code-server.
  • Глава 2: обеспечение безопасности с помощью обратного прокси (Caddy) и брандмауэра (UFW) для безопасного использования HTTPS.
  • Глава 3: эта статья, использующая Terraform и OpenStack для лучшей воспроизводимости.

Автоматизация, реализованная при развертывании у OVHcloud с использованием Public Cloud на базе OpenStack, представляет собой надёжную основу.

Отсюда можно пойти ещё дальше: добавить автоматическое резервное копирование томов (снапшоты), объединить это с CI/CD-пайплайном или даже изучить развертывание этой среды через docker-compose или Kubernetes.

Développement à distance #3 – Industrialisation et automatisation