Создать кластер PostgreSQL
Мы рекомендуем создавать ресурсы по порядку. Если вы единовременно создаете все ресурсы, которые описаны в конфигурационном файле, может возникнуть ошибка — Terraform создает ресурсы независимо от порядка, в котором они перечислены в файле.
- Опционально: настройте провайдеры.
- Создайте приватную сеть и подсеть.
- Создайте кластер.
- Создайте пользователя.
- Создайте базу данных и назначьте владельца.
Конфигурационные файлы
Пример файла для настройки провайдеров
terraform {
required_providers {
selectel = {
source = "selectel/selectel"
version = "5.4.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}
provider "selectel" {
domain_name = "123456"
username = "user"
password = "password"
}
resource "selectel_vpc_project_v2" "project_1" {
name = "project"
}
resource "selectel_iam_serviceuser_v1" "serviceuser_1" {
name = "username"
password = "password"
role {
role_name = "member"
scope = "project"
project_id = selectel_vpc_project_v2.project_1.id
}
}
provider "openstack" {
auth_url = "https://cloud.api.selcloud.ru/identity/v3"
domain_name = "123456"
tenant_id = selectel_vpc_project_v2.project_1.id
user_name = selectel_iam_serviceuser_v1.serviceuser_1.name
password = selectel_iam_serviceuser_v1.serviceuser_1.password
region = "ru-9"
}
Пример файла для создания кластера PostgreSQL фиксированной конфигурации
resource "openstack_networking_network_v2" "network_1" {
name = "private-network"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
name = "private-subnet"
network_id = openstack_networking_network_v2.network_1.id
cidr = "192.168.199.0/24"
}
data "selectel_dbaas_datastore_type_v1" "datastore_type_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
filter {
engine = "postgresql"
version = "14"
}
}
data "selectel_dbaas_flavor_v1" "flavor_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
filter {
datastore_type_id = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
fl_size = "standard"
vcpus = 4
ram = 16384
disk = 128
}
}
resource "selectel_dbaas_postgresql_datastore_v1" "datastore_1" {
name = "datastore-1"
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
type_id = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
subnet_id = selectel_vpc_subnet_v2.subnet.subnet_id
node_count = 3
flavor_id = data.selectel_dbaas_flavor_v1.flavor_1.flavors[0].id
pooler {
mode = "transaction"
size = 50
}
}
resource "selectel_dbaas_user_v1" "user_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
datastore_id = selectel_dbaas_postgresql_datastore_v1.datastore_1.id
name = "user"
password = "secret"
}
resource "selectel_dbaas_postgresql_database_v1" "database_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
datastore_id = selectel_dbaas_postgresql_datastore_v1.datastore_1.id
owner_id = selectel_dbaas_user_v1.user_1.id
name = "database_1"
}
Пример файла для создания кластера PostgreSQL произвольной конфигурации
resource "openstack_networking_network_v2" "network_1" {
name = "private-network"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
name = "private-subnet"
network_id = openstack_networking_network_v2.network_1.id
cidr = "192.168.199.0/24"
}
data "selectel_dbaas_datastore_type_v1" "datastore_type_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
filter {
engine = "postgresql"
version = "14"
}
}
resource "selectel_dbaas_postgresql_datastore_v1" "datastore_1" {
name = "datastore-1"
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
type_id = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
subnet_id = selectel_vpc_subnet_v2.subnet.subnet_id
node_count = 3
flavor {
vcpus = 1
ram = 4096
disk = 32
}
pooler {
mode = "transaction"
size = 50
}
}
resource "selectel_dbaas_user_v1" "user_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
datastore_id = selectel_dbaas_postgresql_datastore_v1.datastore_1.id
name = "user"
password = "secret"
}
resource "selectel_dbaas_postgresql_database_v1" "database_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
datastore_id = selectel_dbaas_postgresql_datastore_v1.datastore_1.id
owner_id = selectel_dbaas_user_v1.user_1.id
name = "database_1"
}
1. Опционально: настроить провайдеры
Если вы настроили провайдеры Selectel и OpenStack, пропустите этот шаг.
-
Убедитесь, что в панели управления вы создали сервисного пользователя с ролями Админ истратор аккаунта и Администратор пользователей.
-
Создайте директорию для хранения конфигурационных файлов и отдельный файл с расширением
.tf
для настройки провайдеров. -
В файл для настройки провайдеров добавьте провайдеры Selectel и OpenStack:
terraform {
required_providers {
selectel = {
source = "selectel/selectel"
version = "5.4.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}Здесь
version
— версии провайдеров. Актуальную версию можно посмотреть в документации Selectel (в Terraform Registry и GitHub) и OpenStack (в Terraform Registry и GitHub).Подробнее о продуктах, услугах и сервисах, которыми можно управлять с помощью провайдеров, в инструкции Провайдеры Selectel и OpenStack.
-
Инициализируйте провайдер Selectel:
provider "selectel" {
domain_name = "123456"
username = "user"
password = "password"
}Здесь:
domain_name
— номер аккаунта Selectel. Можно посмотреть в панели управления в правом верхнем углу;username
— имя сервисного пользователя с ролями Администратор аккаунта и Администратор пользователей. Можно посмотреть в панели управления: раздел Управление доступом → Управление пользователями → вкладка Сервисные пользователи (раздел доступен только Владельцу аккаунта и Администратору пользователей);password
— пароль сервисного пользователя. Можно посмотреть при создании пользователя или изменить на новый.
-
Создайте проект:
resource "selectel_vpc_project_v2" "project_1" {
name = "project"
}Посмотрите подробное описание ресурса selectel_vpc_project_v2.
-
Создайте сервисного пользователя для доступа к проекту и назначьте ему роль Администратор проекта:
resource "selectel_iam_serviceuser_v1" "serviceuser_1" {
name = "username"
password = "password"
role {
role_name = "member"
scope = "project"
project_id = selectel_vpc_project_v2.project_1.id
}
}Здесь:
username
— имя пользователя;password
— пароль пользователя. Пароль должен быть не короче восьми символов и содержать латинские буквы разных регистров и цифры;project_id
— ID проекта. В панели управления перейдите в раздел Облачная платформа → откройте меню проектов (название текущего проекта) → в строке нужного проекта нажмите .
Посмотрите подробное описание ресурса selectel_iam_serviceuser_v1.
-
Инициализируйте провайдер OpenStack:
provider "openstack" {
auth_url = "https://cloud.api.selcloud.ru/identity/v3"
domain_name = "123456"
tenant_id = selectel_vpc_project_v2.project_1.id
user_name = selectel_iam_serviceuser_v1.serviceuser_1.name
password = selectel_iam_serviceuser_v1.serviceuser_1.password
region = "ru-9"
}Здесь:
domain_name
— номер аккаунта Selectel. Можно посмотреть в панели управления в правом верхнем углу;region
— пул, напримерru-9
. Все ресурсы будут создаваться в этом пуле. Список доступных пулов можно посмотреть в инструкции Матрицы доступности.
-
Если одновременно с настройкой провайдеров вы создаете ресурсы, то для ресурсов OpenStack добавьте аргумент
depends_on
. Например, для ресурса openstack_networking_network_v2:resource "openstack_networking_network_v2" "network_1" {
name = "private-network"
admin_state_up = "true"
depends_on = [
selectel_vpc_project_v2.project_1,
selectel_iam_serviceuser_v1.serviceuser_1
]
} -
Опционально: если вы хотите использовать зеркало, создайте отдельный конфигурационный файл Terraform CLI и добавьте в него блок:
provider_installation {
network_mirror {
url = "https://mirror.selectel.ru/3rd-party/terraform-registry/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}Подробнее о настройках зеркал в инструкции CLI Configuration File документации HashiCorp.
-
Откройте CLI.
-
Инициализируйте конфигурацию Terraform в директории:
terraform init
-
Проверьте, что конфигурационные файлы составлены без ошибок:
terraform validate
-
Отформатируйте конфигурационные файлы:
terraform fmt
-
Проверьте, какие ресурсы будут созданы:
terraform plan
-
Примените изменения и создайте ресурсы:
terraform apply
-
Подтвердите создание — введите yes и нажмите Enter. Созданные ресурсы отобразятся в панели управления.
-
Если для создания ресурсов оказалось недостаточно квот, увеличьте квоты.
2. Создать приватную сеть и подсеть
resource "openstack_networking_network_v2" "network_1" {
name = "private-network"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
name = "private-subnet"
network_id = openstack_networking_network_v2.network_1.id
cidr = "192.168.199.0/24"
}
Здесь cidr
— CIDR приватной подсети, например 192.168.199.0/24
.
Посмотрите подробное описание ресурсов:
3. Создать кластер
Фиксированная конфигурация
Произвольная конфигурация
data "selectel_dbaas_datastore_type_v1" "datastore_type_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
filter {
engine = "postgresql"
version = "14"
}
}
data "selectel_dbaas_flavor_v1" "flavor_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
filter {
datastore_type_id = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
fl_size = "standard"
vcpus = 4
ram = 16384
disk = 128
}
}
resource "selectel_dbaas_postgresql_datastore_v1" "datastore_1" {
name = "datastore-1"
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
type_id = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
subnet_id = openstack_networking_subnet_v2.subnet_1.id
node_count = 3
flavor_id = data.selectel_dbaas_flavor_v1.flavor_1.flavors[0].id
pooler {
mode = "transaction"
size = 50
}
}
Здесь:
region
— пул, напримерru-9
. Список доступных пулов можно посмотреть в инструкции Матрицы доступности;filter
— фильтр типов облачных баз данных:engine
— тип облачных баз данных;version
— версия облачной базы данных. Список доступных версий можно посмотреть в инструкции Версии и конфигурации;
filter
— фильтр фиксированных конфигураций кластера. Список доступных конфигураций можно посмотреть в инструкции Версии и конфигурации;fl_size
— линейка фиксированных конфигураций. Доступные значения —standard
(для линеек Standard, CPU и Memory) иhigh_freq
(для линейки HighFreq);vcpus
— количество vCPU;ram
— количество RAM в МБ;disk
— размер диска в ГБ;
nodes_count
— количество нод. Максимальное количество нод — 6;pooler
— конфигурация пулера соединений:mode
— режим пулинга;size
— размер пула.
Посмотрите подробное описание источников данных и ресурсов:
data "selectel_dbaas_datastore_type_v1" "datastore_type_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
filter {
engine = "postgresql"
version = "14"
}
}
resource "selectel_dbaas_postgresql_datastore_v1" "datastore_1" {
name = "datastore-1"
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
type_id = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
subnet_id = openstack_networking_subnet_v2.subnet_1.id
node_count = 3
flavor {
vcpus = 1
ram = 4096
disk = 32
}
pooler {
mode = "transaction"
size = 50
}
}
Здесь:
region
— пул, напримерru-9
. Список доступных пулов можно посмотреть в инструкции Матрицы доступности;filter
— фильтр типов облачных баз данных:engine
— тип облачных баз данных;version
— версия облачной базы данных. Список доступных версий можно посмотреть в инструкции Версии и конфигурации;
nodes_count
— количество нод. Максимальное количество нод — 6;flavor
— произвольная конфигурация кластера. Доступные значения произвольных конфигураций можно посмотреть в инструкции Версии и конфигурации:vcpus
— количество vCPU;ram
— количество RAM в МБ;disk
— размер диска в ГБ;
pooler
— конфигурация пулера соединений:mode
— режим пулинга;size
— размер пула.
Посмотрите подробное описание источника данных selectel_dbaas_datastore_type_v1 и ресурса selectel_dbaas_postgresql_datastore_v1.
4. Создать пользователя
resource "selectel_dbaas_user_v1" "user_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
datastore_id = selectel_dbaas_postgresql_datastore_v1.datastore_1.id
name = "user"
password = "secret"
}
Здесь:
region
— пул, в котором находится кластер;name
— имя пользователя;password
— пароль пользователя.
Посмотрите подробное описание ресурса selectel_dbaas_user_v1.
5. Создать базу данных и назначить владельца
resource "selectel_dbaas_postgresql_database_v1" "database_1" {
project_id = selectel_vpc_project_v2.project_1.id
region = "ru-9"
datastore_id = selectel_dbaas_postgresql_datastore_v1.datastore_1.id
owner_id = selectel_dbaas_user_v1.user_1.id
name = "database_1"
}
Здесь region
— пул, в котором находится кластер.
Посмотрите подробное описание ресурса selectel_dbaas_postgresql_database_v1.