VK Cloud logo
Обновлена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-subnet
  • data "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 — параметр принимающий предварительно описанный объект ключевой пары с типом resource vkcs_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