Обновлена: 18 августа 2023 г. в 12:48
Создание инстанса БД с Terraform для DBaaS
Прежде всего убедитесь, что вы установили и сконфигурировали Terraform.
Создайте файл database_instance.tf
в рабочем каталоге.
Для создания инстанса БД нам понадобятся следующие объекты:
Переменные:
variable "public-key-file"
— переменная, в которой указывается путь к файлу ключевой пары.variable "db-instance-flavor"
— переменная, флейвор (CPU, RAM, Disk) виртуальной машины для инстанса базы данных.
Источники данных:
data "vkcs_compute_flavor" "db"
— запрашивает объект флейвора в облаке на основе имени флейвора в переменнойdb-instance-flavor
.
Ресурсы:
resource "vkcs_compute_keypair" "keypair"
— ключевая пара для ВМ инстанса БД. Эта ключевая пара позволяет подключаться к ВМ по ssh при необходимости.resource "vkcs_networking_network" "db"
— сеть, в которой будет создан инстанс БД. В примере ниже сеть создается с именем db-net».resource "vkcs_networking_subnet" "db-subnetwork"
— подсеть из сети, для нод кластера. В примере: db-subnetdata "vkcs_networking_network" "extnet"
— внешняя сеть для получения публичного IP (Floating IP).resource "vkcs_networking_router" "db-router"
— роутер для внешней сети и взаимодействия с внешним миром.resource "vkcs_networking_router_interface" "db"
— подключить роутер к внутренней сети.resource "vkcs_db_instance" "db-instance"
— создает инстанс базы данных. Минимальными необходимыми параметрами являются:name
,flavor_id
,size
,volume_type
,datastore
.
Доступные параметры:
name
— имя инстанса БД.datastore
— блок описывающий необходимый тип (type
) и версию (version
) инстанса. Поддерживаемые типы и версии можно посмотреть в личном кабинете при создании инстанса БД.keypair
— параметр принимающий предварительно описанный объект ключевой пары с типом resourcevkcs_compute_keypair
.flavor_id
— параметр принимает объект типаvkcs_compute_flavor
.size
— размер диска инстанса.volume_type
— тип диска инстанса.disk_autoexpand
— параметр, в котором можно указать возможность авторасширения (autoexpand = true
) диска и максимальный размер (max_disk_size
) в Гб.network
— сеть, к которой подключен инстанс БД. Сеть должна иметь выход в интернет. Для этого в примере создается роутер (vkcs_networking_router
) и его подключение к внутренней сети (vkcs_networking_router_interface
).capabilities
— открывает порт 9100 на инстансе для входящих подключений.
В примере ниже создаются новые сетевые ресурсы. Если нужно использовать существующие, то используйте data "vkcs_networking_network" "network"
с указанием имени необходимой сети в параметре name
. Подробнее по ссылке.
Для создания инстанса БД добавьте следующий код:
1variable "public-key-file" { 2 type = string 3 default = "~/.ssh/id_rsa.pub" 4} 5 6variable "db-instance-flavor" { 7 type = string 8 default = "Basic-1-2-20" 9} 10 11data "vkcs_compute_flavor" "db" { 12 name = var.db-instance-flavor 13} 14 15resource "vkcs_compute_keypair" "keypair" { 16 name = "default" 17 public_key = file(var.public-key-file) 18} 19 20resource "vkcs_networking_network" "db" { 21 name = "db-net" 22 admin_state_up = true 23} 24 25resource "vkcs_networking_subnet" "db-subnetwork" { 26 name = "db-subnet" 27 network_id = vkcs_networking_network.db.id 28 cidr = "10.100.0.0/16" 29 dns_nameservers = ["8.8.8.8", "8.8.4.4"] 30} 31 32data "vkcs_networking_network" "extnet" { 33 name = "ext-net" 34} 35 36resource "vkcs_networking_router" "db-router" { 37 name = "db-router" 38 admin_state_up = true 39 external_network_id = data.vkcs_networking_network.extnet.id 40} 41 42resource "vkcs_networking_router_interface" "db" { 43 router_id = vkcs_networking_router.db-router.id 44 subnet_id = vkcs_networking_subnet.db-subnetwork.id 45} 46 47resource "vkcs_db_instance" "db-instance" { 48 name = "db-instance" 49 50 datastore { 51 type = "mysql" 52 version = "8.0" 53 } 54 keypair = vkcs_compute_keypair.keypair.id 55 flavor_id = data.vkcs_compute_flavor.db.id 56 size = 8 57 volume_type = "ceph-ssd" 58 disk_autoexpand { 59 autoexpand = true 60 max_disk_size = 1000 61 } 62 63 network { 64 uuid = vkcs_networking_network.db.id 65 } 66 67 capabilities { 68 name = "node_exporter" 69 settings = { 70 "listen_port" : "9100" 71 } 72 } 73}
Добавьте конфигурацию в файл database_instance.tf
и выполните команды:
terraform init
terraform apply