Настройка Terraform для управления сервисом CLO
Утилита Terraform позволяет управлять проектами CLO с помощью удобного языка описания сетевой инфраструктуры. Такой подход упрощает создание и администрирование сложных проектов, предоставляет понятное и полное описание доступных ресурсов проекта и связей между ними, а также снижает вероятность человеческих ошибок при управлении сетевыми ресурсами.
Установка Terraform
Используйте официальную документацию для установки приложения Terraform.
Провайдер CLO доступен на Github и в официальном репозитории HashiCorp.
Примечание. Официальный репозиторий HashiCorp может быть доступен на территории РФ только с использованием VPN-сервисов, в связи с санкционными ограничениями.
Подключение Terraform к сервису
Создайте каталог манифестов, и в нём файл манифеста main.tf для данных о конфигурации Terraform.
В файле манифеста перечисляются провайдеры Terraform, необходимые для создания инфраструктуры. При запуске манифеста провайдер будет автоматически загружен из репозитория HashiCorp.
Примечание. Для ручной установки провайдера обратитесь к соответствующему разделу официальной документации.
Добавьте в файл следующий блок:
terraform { required_providers { clo = { version = "1.0.6" source = "clo-ru/clo" } } } provider "clo" { auth_url = "https://api.clo.ru" token = <mysecrettoken> }
Примечание. Актуальные версии провайдера можно найти в официальной документации, нажав на кнопку USE PROVIDER.
Провайдер использует API-токен для запросов, отправляемых провайдеру. Токен можно создать в Личном кабинете: Управление аккаунтом -> Токены API.
Описание плана инфраструктуры
Опишите в файле main.tf план инфраструктуры. Добавьте описание ресурсов, используя документацию к провайдеру.
Совет. Вы можете использовать примеры из GitHub-репозитория.
Перейдите в каталог, где находится файл манифеста main.tf, и выполните следующую команду:
terraform init
Проверьте, что план инфраструктуры не содержит ошибок:
terraform plan
Программа выведет список ресурсов, готовых к созданию. Если план инфраструктуры содержит ошибки, устраните их и повторите предыдущую операцию.
Далее разверните инфраструктуру и создайте необходимые ресурсы командой:
terraform apply
В панели управления будут автоматически отображены все созданные ресурсы.
Изменение инфраструктуры
Для изменения инфраструктуры отредактируйте файл манифеста и выполните команду:
terraform apply
Примечание. Изменения в инфраструктуре, сделанные через панель управления, в файле манифеста не записываются и не отображаются.
Удаление инфраструктуры
Чтобы удалить ресурсы, выполните в каталоге с файлом манифеста следующую команду:
terraform destroy
Примечание. Ресурсы инфраструктуры, удалённые с помощью панели управления, не удаляются автоматически из файла манифеста.
Пример плана инфраструктуры
Применение этого плана в файле манифеста создаст инфраструктуру, которая будет включать в себя следующие ресурсы:
- облачный сервер с загрузочным сетевым диском из образа Ubuntu 20.04 LTS 64-bit, с произвольной конфигурацией с 2 vCPU и 4 ГБ RAM, сетевой диск 40 ГБ, внешний IP-адрес.
- дополнительный внешний IP-адрес
- привязку нового IP-адреса к облачному серверу.
План описан в двух файлах — main.tf и vars.tf. В первом из этих файлов хранится описание создаваемых ресурсов, во втором — объявлены переменные, которые могут затем использоваться в других файлах манифестов.
Файл vars.tf
# Имя операционной системы, чтобы получить ID образа
variable "os_name"{
default = "Ubuntu 20"
}
Файл main.tf
# Инициализация Terraform и конфигурации провайдеров
terraform {
required_providers {
clo = {
version = "1.0.6"
source = "clo-ru/clo"
}
}
}
provider "clo" {
auth_url = "https://api.clo.ru"
token = <token>
}
# Получаем список проектов
data "clo_projects" "all_projects" {
}
# Сохраняем ID первого проекта из списка в переменную pr_id
output "pr_id” {
value = data.clo_projects.all_projects.results[0].id
}
# Получаем ID образа операционной системы. Имя образа берем из переменных.
data "clo_project_image" "ubuntu"{
project_id = pr_id
name = var.os_name
}
# Создаем дополнительный IP-адрес
resource "clo_network_ip" "fip_1" {
project_id = pr_id
}
# Создаем сервер с нужными параметрами
resource "clo_compute_instance" "serv" {
project_id = pr_id
name = "my_server"
flavor_ram = 4
flavor_vcpus = 2
# Используем ID образа, полученный ранее
image_id = data.clo_project_image.ubuntu.image_id
block_device{
bootable=true
storage_type = "volume"
size = 40
}
addresses{
version = 4
external=true
ddos_protection=false
}
}
# Подключение нового адреса к серверу.
resource "clo_network_ip_attach" "attach_ip"{
address_id = clo_network_ip.fip_1.id
entity_name = "server"
entity_id = clo_compute_instance.serv.id
}
# Вывод ID созданного сервера.
output "server" {
value = resource.clo_compute_instance.serv.id
}