Skip to content

Selectel some examples of terraform modules

License

Notifications You must be signed in to change notification settings

selectel/selectel-infra-examples

Repository files navigation

Selectel Terraform Modules Example

Pipeline Status Version
Terraform - Selectel Terraform modules version
OpenTofu - Selectel Terraform modules version

В данном репозитории находятся примеры Terraform модулей, используемых для создания инфраструктуры в облаке Selectel. Также в репозитории еженедельно запускаются пайплайны с тестовым созданием ресурсов с помощью Terraform и OpenTofu.

P.S. Если вы не нашли пример для создания определенного ресурса - можете оставить issue и мы примем во внимание необходимость его добавления.

Перед началом работы с облачными ресурсами Selectel через Terraform/OpenTofu рекомендуем ознакомиться с документацией по провайдеру Selectel/OpenStack.

Использование

Далее все команды terraform-cli могут быть заменены на tofu. Будут работать оба варианта.

Перед использованием проверьте версию Terraform/OpenTofu, данный репозиторий гарантирует запуск Terraform кода только на определенной версии Terraform/OpenTofu - см. в шапке README. Версия Terraform 1.5.5 обусловлена переходом начиная с версии 1.6 на лицензию BSL.

Также убедитесь, что в вашем env нет лишних переменных вида "OS_*", их наличие повлияет на провайдер Openstack.

1. .terraformrc/.tofurc

Для доступа к Terraform Registry из РФ можно воспользоваться кеширующим прокси Selectel, для этого отредактируем файл .terraformrc (или .tofurc для OpenTofu):

cat <<EOS >> $HOME/.terraformrc
provider_installation {
    network_mirror {
      url = "https://tf-proxy.selectel.ru/mirror/v1/"
    }
}
EOS

2. State File

По умолчанию в репозитории стейт хранится в s3, для локального запуска потребуется изменить поле backend на local в файле versions.tf:

terraform {
  backend "local" {}
}
Пример передачи `backend` для хранения стейта в S3 через CLI:
terraform init \
  -backend-config="bucket=< имя бакета s3 >" \
  -backend-config="endpoint=s3.ru-1.storage.selcloud.ru" \
  -backend-config="key=< имя стейт-файла >.tfstate" \
  -backend-config="region=ru-1" \
  -backend-config="skip_region_validation=true" \
  -backend-config="skip_credentials_validation=true" \
  -backend-config="access_key=< S3_ACCESS_KEY >" \
  -backend-config="secret_key=< secrets.S3_SECRET_KEY >"
Через tf файл:
terraform {
  backend "s3" {
    bucket     = "< имя бакета s3 >"
    endpoint   = "s3.ru-1.storage.selcloud.ru"
    key        = "< имя стейт-файла >.tfstate"
    region     = "ru-1"
    access_key = "< S3_ACCESS_KEY >"
    secret_key = "< secrets.S3_SECRET_KEY >"

    skip_region_validation      = true
    skip_credentials_validation = true
  }
}

3. Init

Вы можете использовать все модули, которые есть в репозитории или закомментировать лишние, но учтите, что в первую очередь создается проект с сервисным пользователем, которые необходимы для провайдера Openstack.

Все, что будет создано ресурсами из провайдера Openstack должно идти после создания проекта и пользователя! Для этого потребуется добавить depends_on к ресурсу:

depends_on = [ module.project-with-user ]

Опционально: Создаем файл main.tf, где описана необходимая инфраструктура (пример ниже - создание Simple File Storage, остальные примеры смотри в папке modules):

module "sfs" {
  source               = "modules/sfs"
  os_network_id        = var.nat_network_id
  os_subnet_id         = var.nat_subnet_id
  sfs_size             = var.sfs_size
  sfs_volume_type      = var.sfs_volume_type
  os_availability_zone = var.os_availability_zone
}
  1. Инициализируем Terraform Backend командой:
terraform init
  1. Для проверки вносимых изменений выполняем команду:
terraform plan
  1. Для применения изменений выполняем команду:
terraform apply

Пример использования

В репозитории можно найти пример использования модулей. В корне репозитория созданы *.tf файлы, которые можно использовать как пример вызова модулей.

Для их использования достаточно перейти в корень репозитория и инициализировать Terraform:

terraform init

Далее можно скорректировать некоторые параметры в файле main.tf, которые передаются в модули, например, объём SFS, имя кластера и другие.

Затем необходимо задать переменные, в которых будут содержаться данные от аккаунта Selectel, в котором будет развёрнута инфраструктура:

  • selectel_domain_name, ID аккаунта, например, 123123
  • selectel_user_admin_user, сервисный пользователь с нужными правами
  • selectel_user_admin_password, пароль от сервисного пользователя

Переменные можно задать несколькими способами:

  • В качестве переменных окружения (для этого нужно добавить перед названием переменной TF_VAR_):
export TF_VAR_selectel_domain_name=123123
export TF_VAR_selectel_user_admin_user=foo
export TF_VAR_selectel_user_admin_password=bar
terraform plan/apply
  • Ввести вместе с командой terraform plan/apply с помощью параметра -var:
terraform plan/apply \
-var="selectel_domain_name=123123" \
-var="selectel_user_admin_user=foo" \
-var="selectel_user_admin_password=bar"
  • Ввести с клавиатуры, если переменные не были заданы любым другим способом

После успешного выполнения команды terraform apply вы должны увидеть в своём аккаунте новый проект, в котором будут запущены все модули (MKS, SFS, vm, CRaaS и др.)

Структура репозитория

Репозиторий включает в себя минимально необходимую структуру для запуска Terraform. В директории modules собраны модули для создания различных компонентов в облаке Selectel.

Modules