База знаний LinxCloud Services

Создание инстанса БД с Terraform для DBaaS

Перед началом с работы с Terraform убедитесь, что вы установили Terraform и создали файл main.tf с необходимыми провайдерами.

 

Создание инстанса БД

Создайте файл database_instance.tf в рабочей папке, где лежит main.tf.

Для создания инстанса БД нам понадобятся следующие объекты:

Переменные:

  • variable "public-key-file" — переменная, в которой указывается путь к файлу ключевой пары.
  • variable "db-instance-flavor" — переменная, флейвор (CPU, RAM, Disk) виртуальной машины для инстанса базы данных.

Источники данных:

  • data "linxcs_compute_flavor" "db" — запрашивает объект флейвора в облаке на основе именни флейвора в переменной db-instance-flavor.

Ресурсы:

  • resource "linxcs_compute_keypair" "keypair" — ключевая пара для ВМ инстанса БД. Эта ключевая пара позволяет подключаться к ВМ по ssh при необходимости.
  • resource "linxcs_networking_network" "db" — сеть, в которой будет создан инстанс БД. В примере ниже сеть создается с именем db-net».
  • resource "linxcs_networking_subnet" "db-subnetwork" — подсеть из сети, для нод кластера. В примере: db-subnet
  • data "linxcs_networking_network" "extnet" — внешняя сеть для получения публичного IP (Floating IP).
  • resource "linxcs_networking_router" "db-router" — роутер для внешней сети и взаимодействия с внешним миром.
  • resource "linxcs_networking_router_interface" "db" — подключить роутер к внутренней сети.
  • resource "linxcs_db_instance" "db-instance" — создает инстанс базы данных. Минимальными необходимыми параметрами являются: nameflavor_idsizevolume_typedatastore.

Доступные параметры:

  • name — имя инстанса БД.
  • datastore — блок описывающий необходимый тип (type) и версию (version) инстанса. Поддерживаемые типы и версии можно посмотреть в личном кабинете при создании инстанса БД.
  • keypair — параметр принимающий предварительно описанный объект ключевой пары с типом resource linxcs_compute_keypair.
  • flavor_id — параметр принимает объект типа linxcs_compute_flavor описанный выше.
  • size — размер диска инстанса.
  • volume_type — тип диска инстанса.
  • disk_autoexpand — параметр, в котором можно указать возможность авторасширения (autoexpand = true) диска и максимальный размер (max_disk_size) в Гб.
  • network — сеть, к которой подключен инстанс БД. Сеть должна иметь выход в интернет. Для этого в примере создается роутер (linxcs_networking_router) и его подключение к внутренней сети (linxcs_networking_router_interface).
  • capabilities — открывает порт 9100 на инстансе для входящих подключений.

В примере ниже создаются новые сетевые ресурсы. Если нужно использовать существующие, то используйте data "linxcs_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 "linxcs_compute_flavor" "db" {
12  name = var.db-instance-flavor
13}
14
15resource "linxcs_compute_keypair" "keypair" {
16  name       = "default"
17  public_key = file(var.public-key-file)
18}
19
20resource "linxcs_networking_network" "db" {
21  name           = "db-net"
22  admin_state_up = true
23}
24
25resource "linxcs_networking_subnet" "db-subnetwork" {
26  name            = "db-subnet"
27  network_id      = linxcs_networking_network.db.id
28  cidr            = "10.100.0.0/16"
29  ip_version      = 4
30  dns_nameservers = ["8.8.8.8", "8.8.4.4"]
31}
32
33data "linxcs_networking_network" "extnet" {
34  name = "ext-net"
35}
36
37resource "linxcs_networking_router" "db-router" {
38  name                = "db-router"
39  admin_state_up      = true
40  external_network_id = data.linxcs_networking_network.extnet.id
41}
42
43resource "linxcs_networking_router_interface" "db" {
44  router_id = linxcs_networking_router.db-router.id
45  subnet_id = linxcs_networking_subnet.db-subnetwork.id
46}
47
48resource "linxcs_db_instance" "db-instance" {
49  name        = "db-instance"
50
51  datastore {
52    type    = "mysql"
53    version = "8.0"
54  }
55  keypair     = linxcs_compute_keypair.keypair.id
56  flavor_id   = data.linxcs_compute_flavor.db.id
57  size        = 8
58  volume_type = "ceph-ssd"
59  disk_autoexpand {
60    autoexpand    = true
61    max_disk_size = 1000
62  }
63
64  network {
65    uuid = linxcs_networking_network.db.id
66  }
67
68  capabilities {
69    name = "node_exporter"
70    settings = {
71      "listen_port" : "9100"
72    }
73  }
74}

 

Добавьте конфигурацию в файл database_instance.tf и выполните следующие команды:

terraform init

 

terraform apply
Что вас интересует?
Получить демо-доступ

Спасибо за ваш запрос, мы свяжемся с вами в ближайшее время!