Skip to content

selectel/selectel-infra-examples

Repository files navigation

Selectel Terraform Modules Example

Pipeline Status Version
Terraform Latest version
OpenTofu Latest version

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

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

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

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

Все последующие команды terraform-cli могут быть заменены на opentofu.

Убедитесь, что в вашем 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:

terraform {
  backend "s3" {
    bucket     = "<название бакета s3>"
    key        = "<название стейт-файла>.tfstate"
    access_key = "<access_key>"
    secret_key = "<secret_key>"
    endpoints  = { s3 = "https://s3.ru-1.storage.selcloud.ru" }
    region     = "ru-1"
    
    skip_region_validation      = true
    skip_credentials_validation = true
    skip_requesting_account_id  = true
    skip_s3_checksum            = true
    skip_metadata_api_check     = true
  }
}

3. Init

Для начала работы необходимо создать в Панели Управления проект, в котором будут впоследствии создаваться ресурсы, а также сервисного пользователя с ролью Администратор проекта для вышеупомянутого проекта. Далее необходимо отредактировать main.tf, оставив в нём необходимые ресурсы, после чего:

  1. Инициализируем Terraform Backend командой:
terraform init
  1. Для проверки вносимых изменений выполняем команду:
terraform plan
  1. Для применения изменений выполняем команду:
terraform apply

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

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

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

terraform init

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

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

  • selectel_domain_name - ID Selectel-аккаунта;
  • selectel_project_name - название проекта;
  • selectel_project_id - ID проекта;
  • selectel_user_name - имя сервисного пользователя;
  • selectel_user_id - UID сервисного пользователя;
  • selectel_user_password - пароль сервисного пользователя.

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

  • В качестве переменных окружения (для этого нужно добавить перед названием переменной TF_VAR_):
export TF_VAR_selectel_domain_name=123123
export TF_VAR_selectel_project_name=Project
export TF_VAR_selectel_project_id=abcd1234abcd1234abcd1234abcd1234
export TF_VAR_selectel_user_name=foo
export TF_VAR_selectel_user_id=1234abcd1234abcd1234abcd1234abcd
export TF_VAR_selectel_user_password=bar
terraform plan/apply
  • Ввести вместе с командой terraform plan/apply с помощью параметра -var:
terraform plan/apply \
-var="selectel_domain_name=123123" \
-var="selectel_project_name=Project" \
-var="selectel_project_id=abcd1234abcd1234abcd1234abcd1234" \
-var="selectel_user_name=foo" \
-var="selectel_user_id=1234abcd1234abcd1234abcd1234abcd" \
-var="selectel_user_password=bar"
  • Ввести с клавиатуры, если переменные не были заданы любым другим способом

После успешного выполнения команды terraform apply в заданном проекте появятся указанные в main.tf ресурсы.

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

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

Modules

About

Selectel some examples of terraform modules

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages