Перед началом с работы с 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"
— создает инстанс базы данных. Минимальными необходимыми параметрами являются:
name
flavor_id
size
volume_type
datastore
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 = string3 default = "~/.ssh/id_rsa.pub"4}56variable "db-instance-flavor" {7 type = string8 default = "Basic-1-2-20"9}1011data "linxcs_compute_flavor" "db" {12 name = var.db-instance-flavor13}1415resource "linxcs_compute_keypair" "keypair" {16 name = "default"17 public_key = file(var.public-key-file)18}1920resource "linxcs_networking_network" "db" {21 name = "db-net"22 admin_state_up = true23}2425resource "linxcs_networking_subnet" "db-subnetwork" {26 name = "db-subnet"27 network_id = linxcs_networking_network.db.id28 cidr = "10.100.0.0/16"29 ip_version = 430 dns_nameservers = ["8.8.8.8", "8.8.4.4"]31}3233data "linxcs_networking_network" "extnet" {34 name = "ext-net"35}3637resource "linxcs_networking_router" "db-router" {38 name = "db-router"39 admin_state_up = true40 external_network_id = data.linxcs_networking_network.extnet.id41}4243resource "linxcs_networking_router_interface" "db" {44 router_id = linxcs_networking_router.db-router.id45 subnet_id = linxcs_networking_subnet.db-subnetwork.id46}4748resource "linxcs_db_instance" "db-instance" {49 name = "db-instance"5051 datastore {52 type = "mysql"53 version = "8.0"54 }55 keypair = linxcs_compute_keypair.keypair.id56 flavor_id = data.linxcs_compute_flavor.db.id57 size = 858 volume_type = "ceph-ssd"59 disk_autoexpand {60 autoexpand = true61 max_disk_size = 100062 }6364 network {65 uuid = linxcs_networking_network.db.id66 }6768 capabilities {69 name = "node_exporter"70 settings = {71 "listen_port" : "9100"72 }73 }74}
Добавьте конфигурацию в файл database_instance.tf и выполните следующие команды:
terraform initterraform apply