Ўсім прывітанне! У рамках курсавой працы я займаўся даследаваннямі магчымасцяў такой айчыннай хмарнай платформы, як
Што жадаецца атрымаць?
Пасля запуску віртуальнай машыны з вэб-серверам можна будзе зайсці на яго хост і атрымаць прыгожы UI, пазначыць базы дадзеных у якасці крыніц для далейшай працы, стварыць дашборды і графікі.
У базавай версіі ёсць адзін істотны недахоп - яна зусім не адмоваўстойлівая. Гэта значыць уся працаздольнасць прыкладання залежыць ад жыццяздольнасці адной віртуальнай машыны. Калі яна адмовіць ці ж 10 чалавек адначасова адкрыюць UI, то ўзнікнуць праблемы.
Вырашаюцца яны проста: трэба ўсяго толькі… разгарнуць шмат аднолькавых віртуальных машын з вэб-серверам і змясціць іх пад L3-балансар. Але не тут не ўсё так адназначна. Графана захоўвае прыстасаваныя наладкі (шляхі да баз дадзеных, дашборды, графікі і г.д.) прама на дыску сваёй віртуальнай машыны. Такім чынам, калі змяніць нейкія налады ў UI, то гэтыя змены адлюструюцца толькі на той віртуальнай машыне, куды адправіў нас балансар. Гэта прывядзе да некансістэнтных налад нашага прыкладання, узнікнуць праблемы з запускам і выкарыстаннем.
Тут на дапамогу прыйдзе яшчэ адна база дадзеных, напрыклад, MySQL ці яе аналог. Гаворым Графане, што яна павінна захоўваць прыстасаваныя наладкі менавіта ў гэтай "запасны" базе. Пасля дастаткова будзе адзін раз паказаць на кожнай машыне шлях да гэтай БД, а ўсе астатнія карыстацкія налады рэдагаваць на любой з віртуальных машын, яны будуць прарастаць на астатнія.
Вось схема выніковай інфраструктуры прыкладання:
Навучымся паднімаць рукамі
MySQL і ClickHouse
Перш чым разгортваць такое прыкладанне націскам адной кнопкі, трэба было навучыцца паднімаць ручкамі кожны яго кампанент і інтэграваць іх сябар з сябрам.
Тут нам дапаможа Яндэкс.Хмара, якое дае L3-балансеры, ClickHouse і MySQL у якасці managed-сэрвісаў. Карыстальніку неабходна толькі пазначыць параметры і пачакаць, пакуль платформа прывядзе ўсё ў працаздольны стан.
Я зарэгістраваўся, стварыў сабе воблака і плацежны акаўнт. Пасля гэтага зайшоў у воблака і падняў кластары MySQL і ClickHouse з мінімальнымі наладамі. Дачакаўся, пакуль яны стануць актыўнымі.
Таксама трэба не забыцца стварыць у кожным кластары базу дадзеных і наладзіць доступ да яе па лагіне і паролю. Удавацца тут у дэталі не буду - у інтэрфейсе ўсё дастаткова відавочна.
Невідавочная дэталь была ў тым, што ў гэтых БД мноства хастоў, якія забяспечваюць іх адмоваўстойлівасць. Аднак Графана патрабуе роўна адзін хост для кожнай БД, з якой яна працуе. Доўгае чытанне c-<cluster_id>.rw.mdb.yandexcloud.net
маппится ў бягучы актыўны майстар-хост кластара з адпаведным айдзішнікам. Менавіта яго мы і аддамо Графане.
Вэб-сервер
Цяпер справа за вэб-серверам. Паднімем звычайную віртуальную машыну з Linux і рукамі наладзім на ёй Графану.
Подлючимся па ssh і ўсталюем неабходныя пакеты.
sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise
Пасля гэтага завядзем Графану пад systemctl і ўсталюем убудову для працы з ClickHouse (так, у базавай камплектацыі ён не пастаўляецца).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
Усё, пасля гэтага простай камандай
sudo service grafana-server start
мы запусцім вэб-сервер. Зараз можна будзе ў браўзэры забіць вонкавы айпишник віртуальнай машыны, паказаць порт 3000 і ўбачыць прыгожы UI графаны.
Але не варта спяшацца, перш чым наладжваць Графану, трэба не забыцца паказаць ёй шлях да MySQL, каб захоўваць налады там.
Уся канфігурацыя вэб-сервера Графаны ляжыць у файле /etc/grafana/grafana.ini
. Патрэбны радок выглядае так:
;url =
Выстаўляем хост да кластара MySQL. У гэтым жа файле знаходзяцца лагін і пароль для доступу да Графана на малюнку вышэй, якія па змаўчанні абодва роўныя admin
.
Можна скарыстацца sed-камандамі:
sudo sed -i "s#.*;url =.*#url = mysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${GRAFANA_USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${GRAFANA_PASSWORD}#" /etc/grafana/grafana.ini
Самы час перазапусціць вэб-сервер!
sudo service grafana-server restart
Зараз у UI Графаны пакажам ClickHouse у якасці DataSource.
Дамагчыся якая працуе канфігурацыі ў мяне атрымалася пры наступных наладах:
У якасці URL я паказаў https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Усё! У нас ёсць адна працаздольная віртуальная машынка з вэб-серверам, падлучаным да CH і MySQL. Ужо можна загружаць датасет у ClickHouse і будаваць дашборды. Аднак мы яшчэ не дасягнулі нашай мэты і не разгарнулі паўнавартасную інфраструктуру.
Ўпакоўшчык
Яндекс.Облако дазваляе стварыць выяву дыска існуючай віртуальнай машыны, а на яго аснове - колькі заўгодна ідэнтычных адзін аднаму машын. Менавіта гэтым мы і скарыстаемся. Каб зручна сабраць выяву, возьмем прыладу
Наш json-файл будзе складацца з двух блокаў: builders і provisioners. Першы блок апісвае параметры самай выявы як сутнасці, а другі - інструкцыю па напаўненні патрэбным змесцівам.
Будаўнікі
{
"builders": [
{
"type": "yandex",
"endpoint": "{{user `endpoint`}}",
"folder_id": "<folder_id>",
"subnet_id": "{{user `subnet_id`}}",
"zone": "{{user `zone`}}",
"labels": {},
"use_ipv4_nat": true,
"use_internal_ip": false,
"service_account_key_file": "<service_account_key_file>",
"image_name": "grafana-{{timestamp}}",
"image_family": "grafana",
"image_labels": {},
"image_description": "GRAFANA",
"source_image_family": "ubuntu-1804-lts",
"disk_size_gb": 3,
"disk_type": "network-hdd",
"ssh_username": "ubuntu"
}
],
...
}
У гэтым шаблоне трэба выставіць ідэнтыфікатар часткі ў воблаку, дзе вы жадаеце стварыць выяву, а таксама шлях да файла з ключамі ад сэрвіснага акаўнта, папярэдне заведзенага ў гэтай частцы. Падрабязней пра стварэнне сэрвісных акаўнтаў і ключоў у выглядзе файла можна пачытаць у адпаведнай частцы
Такая канфігурацыя кажа, што выява дыска будзе сабраны на аснове платформы. ubuntu-1804-lts
, змешчаны ў адпаведным раздзеле карыстальніка ў сямействе вобразаў GRAFANA
пад імем grafana-{{timestamp}}
.
Provisioners
Цяпер цікавейшая частка канфігурацыі. У ёй будзе апісана паслядоўнасць дзеянняў, якія трэба будзе здзейсніць на віртуальнай машыне, перш чым замарозіць яе стан у выяву дыска.
{
...,
"provisioners": [
{
"type": "shell",
"pause_before": "5s",
"scripts": [
"prepare-ctg.sh"
]
},
{
"type": "file",
"source": "setup.sh",
"destination": "/opt/grafana/setup.sh"
},
{
"type": "shell",
"execute_command": "sudo {{ .Vars }} bash '{{ .Path }}'",
"pause_before": "5s",
"scripts": [
"install-packages.sh",
"grafana-setup.sh",
"run-setup-at-reboot.sh"
]
}
]
}
Тут усе дзеянні падзелены на 3 этапы. На першым этапе выконваецца просценькі скрыпт, які стварае дапаможную дырэкторыю.
prepare-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
На наступным этапе ў гэтую дырэкторыю змяшчаем скрыпт, які трэба будзе запусціць адразу пасля запуску віртуальнай машыны. Гэты скрыпт пакладзе карыстацкія зменныя, якія трэба прапісаць, у канфіг Графаны і перазапусціць вэб-сервер.
setup.sh:
#!/bin/bash
CLUSTER_ID="<cluster_id>"
USERNAME="<username>"
PASSWORD="<password>"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@c-${CLUSTER_ID}.rw.mdb.yandexcloud.net#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart
Пасля гэтага засталося зрабіць 3 рэчы:
1) усталяваць пакеты
2) завесці Графану пад systemctl і ўсталяваць убудову ClickHouse
3) пакласці скрыпт setup.sh у чарзе на запуск адразу пасля ўключэння віртуальнай машыны.
install-packages.sh:
#!/bin/bash
sudo systemd-run --property='After=apt-daily.service apt-daily-upgrade.service' --wait /bin/true
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise
grafana-setup.sh:
#!/bin/bash
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
run-setup-at-reboot.sh:
#!/bin/bash
chmod +x /opt/grafana/setup.sh
cat > /etc/cron.d/first-boot <<EOF
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
@reboot root /bin/bash /opt/grafana/setup.sh > /var/log/yc-setup.log 2>&1
EOF
chmod +x /etc/cron.d/first-boot;
Зараз застаецца запусціць Packer і на вынахадзе атрымаць выяву, змешчаны ў паказанай частцы. Пры стварэнні віртуальнай машыны можна абраць яго ў якасці загрузнай кружэлкі і пасля запуску атрымаць гатовы вэб-сервер Графаны.
Інстанс-група і балансер
Пасля таго, як з'явілася выява дыска, які дазваляе ствараць мноства аднолькавых вэб-сервераў Графаны, мы можам стварыць інстанс-групу. На платформе Яндэкс.Хмара гэтым тэрмінам называецца аб'яднанне віртуальных машын, якія маюць аднолькавыя характарыстыкі. Пры стварэнні інстанс-групы канфігуруецца прататып усіх машын у гэтай групе, а потым і характарыстыкі самой групы (напрыклад, мінімальная і максімальная колькасць актыўных машын). Калі бягучая колькасць будзе не адпавядаць гэтым крытэрам, то інстанс-група сама выдаліць непатрэбныя машыны або створыць новыя па выяве і падабенству.
У рамках нашай задачы мы створым інстанс-групу вэб-сервераў, якія будуць спараджацца са створанай раней выявы дыска.
Па-сапраўднаму характэрна апошняя настройка інстанс-групы. Мэтавая група ў інтэграцыі з Load Balancer дапаможа націскам пары кнопак наладзіць L3-балансар па-над віртуальнымі машынамі гэтай групы.
Пры наладзе балансара я рэалізаваў два важныя моманты:
- Зрабіў так, каб балансар прымаў карыстацкі трафік на 80 порце, а перанакіроўваў яго на 3000 порт віртуальных машын, як раз туды, дзе жыве Графана.
- Наладзіў праверку жыццяздольнасці машын, пінгуючы іх у 3000 порт.
Міні-вынік
Нарэшце мы змаглі рукамі разгарнуць жаданую інфраструктуру прыкладання, і зараз у нас ёсць высокаўстойлівы сэрвіс Grafana. Неабходна толькі ведаць IP-адрас балансера як кропку ўваходу ў дадатак і хост кластара ClickHouse, каб загрузіць у яго датасет.
Здавалася б, перамога? Так, перамога. Але нешта ўсё ж такі бянтэжыць. Увесь працэс вышэй патрабуе вельмі шмат ручных дзеянняў і зусім не маштабуецца, жадаецца яго па магчымасці аўтаматызаваць. Гэтаму і будзе прысвечаны наступны раздзел.
Інтэграцыя з Terraform
Мы зноў скарыстаемся інструментам ад кампаніі HashiCorp па імені
Уся праца з Тэраформам зводзіцца да напісання канфігурацыйнага файла (*.tf
) і стварэнню інфраструктуры на яго аснове.
зменныя
У самае пачаткі файла вынесем зменныя, ад якіх залежыць, дзе і як будзе разгорнутая будучая інфраструктура.
variable "oauth_token" {
type = string
default = "<oauth-token>"
}
variable "cloud_id" {
type = string
default = "<cloud-id>"
}
variable "folder_id" {
type = string
default = "<folder_id>"
}
variable "service_account_id" {
type = string
default = "<service_account_id>"
}
variable "image_id" {
type = string
default = "<image_id>"
}
variable "username" {
type = string
default = "<username>"
}
variable "password" {
type = string
default = "<password>"
}
variable "dbname" {
type = string
default = "<dbname>"
}
variable "public_key_path" {
type = string
default = "<path to ssh public key>"
}
Увесь працэс разгорткі прыкладання звядзецца да зборкі выявы дыска і выстаўленню гэтых зменных. Патлумачу, завошта яны адказваюць:
oauth_token - токен для доступу да воблака. Можна атрымаць па
cloud_id - Ідэнтыфікатар аблокі, дзе будзем разгортваць прыкладанне
тэчка_id - Ідэнтыфікатар падзелу, дзе будзем разгортваць дадатак
service_account_id - Ідэнтыфікатар сэрвіснага акаўнта ў адпаведным раздзеле аблокі.
image_id - ідэнтыфікатар выявы дыска, атрыманага з дапамогай Packer
імя карыстальніка и пароль - імя карыстальніка і пароль для доступу да абедзвюх баз дадзеных і вэб-серверу Графаны
dbname - імя базы дадзеных усярэдзіне кластараў CH і MySQL
public_key_path - шлях да файла з вашым публічным ssh-ключом, па якім можна будзе падлучацца пад імем ubuntu
да віртуальных машын з вэб-серверамі
Настройка правайдэра
Цяпер трэба наладзіць правайдэр Тэраформа - у нашым выпадку Яндэкс:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Можна заўважыць, што тут мы выкарыстоўваем зменныя, зададзеныя вышэй.
Сетка і кластары
Цяпер створым сетку, у якой будуць мець зносіны элементы нашай інфраструктуры, тры падсеткі (па адной у кожным рэгіёне) і паднімем кластары CH і MySQL.
resource "yandex_vpc_network" "grafana_network" {}
resource "yandex_vpc_subnet" "subnet_a" {
zone = "ru-central1-a"
network_id = yandex_vpc_network.grafana_network.id
v4_cidr_blocks = ["10.1.0.0/24"]
}
resource "yandex_vpc_subnet" "subnet_b" {
zone = "ru-central1-b"
network_id = yandex_vpc_network.grafana_network.id
v4_cidr_blocks = ["10.2.0.0/24"]
}
resource "yandex_vpc_subnet" "subnet_c" {
zone = "ru-central1-c"
network_id = yandex_vpc_network.grafana_network.id
v4_cidr_blocks = ["10.3.0.0/24"]
}
resource "yandex_mdb_clickhouse_cluster" "ch_cluster" {
name = "grafana-clickhouse"
environment = "PRODUCTION"
network_id = yandex_vpc_network.grafana_network.id
clickhouse {
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 16
}
}
zookeeper {
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
}
database {
name = var.dbname
}
user {
name = var.username
password = var.password
permission {
database_name = var.dbname
}
}
host {
type = "CLICKHOUSE"
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
type = "CLICKHOUSE"
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
type = "CLICKHOUSE"
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
host {
type = "ZOOKEEPER"
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
type = "ZOOKEEPER"
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
type = "ZOOKEEPER"
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
}
resource "yandex_mdb_mysql_cluster" "mysql_cluster" {
name = "grafana_mysql"
environment = "PRODUCTION"
network_id = yandex_vpc_network.grafana_network.id
version = "8.0"
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 16
}
database {
name = var.dbname
}
user {
name = var.username
password = var.password
permission {
database_name = var.dbname
roles = ["ALL"]
}
}
host {
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
}
Як можна заўважыць, кожны з двух кластараў створаны досыць адмоваўстойлівым за кошт размяшчэння ў трох зонах даступнасці.
Вэб-серверы
Здавалася б, можна працягваць у тым жа духу, але я сутыкнуўся са складанасцю. Да гэтага я спачатку паднімаў MySQL кластар і толькі пасля гэтага, ведаючы яго ID, збіраў выяву дыска з патрэбнай канфігурацыяй, дзе паказваў хост да кластара. Але зараз мы не ведаем ID кластара да запуску Тэраформа, у тым ліку і на момант зборкі выявы. Таму прыйшлося звярнуцца да наступнага
Выкарыстоўваючы сэрвіс метададзеных ад Amazon, мы перадамо ў віртуальную машыну некаторыя параметры, якія яна прыме і апрацуе. Нам неабходна, каб пасля запуску машына схадзіла ў метададзеныя за хастом MySQL кластара і за username-password, якія карыстач паказваў у файле Terraform. Нязначна зменім змесціва файла setup.sh
, які запускаецца пры ўключэнні віртуальнай машыны.
setup.sh:
#!/bin/bash
CLUSTER_URI="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/mysql_cluster_uri)"
USERNAME="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/username)"
PASSWORD="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/password)"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@${CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart
Інтанс-група і балансер
Перабраўшы новую выяву дыска, мы можам нарэшце дапісаць наш файл для Тэраформа.
Пакажам, што мы жадаем выкарыстаць існую выяву дыска:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Цяпер створым інстанс-групу:
resource "yandex_compute_instance_group" "grafana_group" {
name = "grafana-group"
folder_id = var.folder_id
service_account_id = var.service_account_id
instance_template {
platform_id = "standard-v1"
resources {
memory = 1
cores = 1
}
boot_disk {
mode = "READ_WRITE"
initialize_params {
image_id = data.yandex_compute_image.grafana_image.id
size = 4
}
}
network_interface {
network_id = yandex_vpc_network.grafana_network.id
subnet_ids = [yandex_vpc_subnet.subnet_a.id, yandex_vpc_subnet.subnet_b.id, yandex_vpc_subnet.subnet_c.id]
nat = "true"
}
metadata = {
mysql_cluster_uri = "c-${yandex_mdb_mysql_cluster.mysql_cluster.id}.rw.mdb.yandexcloud.net:3306/${var.dbname}"
username = var.username
password = var.password
ssh-keys = "ubuntu:${file("${var.public_key_path}")}"
}
network_settings {
type = "STANDARD"
}
}
scale_policy {
fixed_scale {
size = 6
}
}
allocation_policy {
zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"]
}
deploy_policy {
max_unavailable = 2
max_creating = 2
max_expansion = 2
max_deleting = 2
}
load_balancer {
target_group_name = "grafana-target-group"
}
}
Варта звярнуць увагу, як мы перадалі ў метадату cluster_uri
, username
и password
. Менавіта іх віртуальная машына пры запуску дастане і пакладзе ў канфіг Графаны.
Справа за балансерам.
resource "yandex_lb_network_load_balancer" "grafana_balancer" {
name = "grafana-balancer"
listener {
name = "grafana-listener"
port = 80
target_port = 3000
external_address_spec {
ip_version = "ipv4"
}
}
attached_target_group {
target_group_id = yandex_compute_instance_group.grafana_group.load_balancer.0.target_group_id
healthcheck {
name = "healthcheck"
tcp_options {
port = 3000
}
}
}
}
Трохі цукру
Засталася самая драбніца. Пасля таго, як інфраструктура разгорнецца, давядзецца схадзіць у UI Графаны і рукамі дадаць кластар CH (ID якога трэба яшчэ здабыць) як Data Source. Але ж ID кластара ведае Тэраформ. Даручым яму давесці справу да розуму.
Дадамо новага правайдэра — Графану, а ў якасці хаста падсунем ёй айпішнік балансера. Усе змены, якія зробіць Тэраформ на машыне, куды вызначыць яго балансер, прарастуць у MySQL, а значыць і на ўсе астатнія машыны.
provider "grafana" {
url = "http://${[for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0}"
auth = "${var.username}:${var.password}"
}
resource "grafana_data_source" "ch_data_source" {
type = "vertamedia-clickhouse-datasource"
name = "grafana"
url = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
basic_auth_enabled = "true"
basic_auth_username = var.username
basic_auth_password = var.password
is_default = "true"
access_mode = "proxy"
}
Прычэшам
Вывядзем айпішнік балансера і хост кластара ClickHouse
output "grafana_balancer_ip_address" {
value = [for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0
}
output "clickhouse_cluster_host" {
value = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
}
Можна запускаць
Усё! Наш канфігурацыйны файл гатовы і можна, выставіўшы зменныя, сказаць Тэраформу падняць усё, што мы апісалі вышэй. Увесь працэс у мяне заняў каля 15 хвілін.
У канцы можна ўбачыць прыгожае паведамленне:
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:
clickhouse_cluster_host = https://c-c9q14ipa2ngadqsbp2iq.rw.mdb.yandexcloud.net:8443
grafana_balancer_ip_address = 130.193.50.25
А ў воблаку будуць бачныя элементы паднятай інфраструктуры:
Падвядзем вынікі
Зараз на прыкладзе Графаны кожны з вас умее разгортваць прыкладанні з развесістай хмарнай архітэктурай на платформе Яндэкс.Хмара. У гэтым могуць дапамагчы такія карысныя прылады ад HashiCorp, як Packer і Terraform. Спадзяюся, каму-небудзь гэты артыкул апынецца карысным 🙂
PS Ніжэй прыкладу спасылачку на рэпазітар, у якім можна знайсці гатовыя рэцэпты для Пакера і Тэраформа, фрагменты якіх я прыводзіў у гэтым артыкуле.
Крыніца: habr.com