Перед началом с работы с 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-subnetdata "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"
— создает инстанс базы данных. Минимальными необходимыми параметрами являются:name
,flavor_id
,size
,volume_type
,datastore
.
Доступные параметры:
name
— имя инстанса БД.datastore
— блок описывающий необходимый тип (type
) и версию (version
) инстанса. Поддерживаемые типы и версии можно посмотреть в личном кабинете при создании инстанса БД.keypair
— параметр принимающий предварительно описанный объект ключевой пары с типом resourcelinxcs_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