Bok svima! U sklopu kolegija istraživao sam mogućnosti takve domaće cloud platforme kao što je
Što želite primiti?
Nakon pokretanja virtualnog stroja s web poslužiteljem, možete otići na njegov host i dobiti prekrasno korisničko sučelje, odrediti baze podataka kao izvore za daljnji rad, izraditi nadzorne ploče i grafikone.
Osnovna verzija ima jedan značajan nedostatak - uopće nije tolerantna na pogreške. Odnosno, cjelokupna funkcionalnost aplikacije ovisi o održivosti jednog virtualnog stroja. Ako odbije ili 10 ljudi otvori UI u isto vrijeme, tada će nastati problemi.
Mogu se jednostavno riješiti: samo trebate... postaviti mnogo identičnih virtualnih strojeva s web poslužiteljem i smjestiti ih pod L3 balanser. Ali ovdje nije sve tako jasno. Grafana pohranjuje korisničke postavke (putove do baza podataka, nadzorne ploče, grafikone itd.) izravno na disk svog virtualnog računala. Dakle, ako promijenimo neke postavke u korisničkom sučelju, te promjene će se odraziti samo na virtualnom računalu na koje nas je balanser poslao. To će dovesti do nedosljednih postavki za našu aplikaciju, uzrokujući probleme s pokretanjem i korištenjem.
Ovdje će druga baza podataka doći u pomoć, na primjer, MySQL ili njegov ekvivalent. Kažemo Grafanu da u tu “rezervnu” bazu pohrani korisničke postavke. Nakon toga bit će dovoljno navesti put do ove baze jednom na svakom računalu, a sve ostale korisničke postavke urediti na bilo kojem od virtualnih strojeva, one će se proširiti na ostale.
Ovdje je dijagram konačne aplikacijske infrastrukture:
Naučimo dizati rukama
MySQL i ClickHouse
Prije postavljanja takve aplikacije jednim pritiskom na gumb, bilo je potrebno naučiti rukovati svakom od njenih komponenti i integrirati ih jedne s drugima.
Ovdje će nam pomoći Yandex.Cloud, koji pruža L3 balansere, ClickHouse i MySQL kao upravljane usluge. Korisnik samo treba odrediti parametre i pričekati dok platforma ne dovede sve u ispravno stanje.
Registrirao sam se, napravio cloud i račun za plaćanje. Nakon toga sam otišao u oblak i postavio MySQL i ClickHouse klastere s minimalnim postavkama. Čekao sam dok nisu postali aktivni.
Također se morate sjetiti kreiranja baze podataka u svakom klasteru i konfiguriranja pristupa njoj pomoću prijave i lozinke. Ovdje neću ulaziti u detalje - sve je sasvim očito u sučelju.
Neočit detalj bio je da te baze podataka imaju mnogo hostova, što osigurava njihovu toleranciju na pogreške. Međutim, Grafana zahtijeva točno jedan host za svaku bazu podataka s kojom radi. Dugo čitanje c-<cluster_id>.rw.mdb.yandexcloud.net
preslikan na trenutni aktivni glavni host klastera s odgovarajućim ID-om. Ovo ćemo dati Grafanu.
Web poslužitelj
Sada je na web poslužitelju. Podignimo obični virtualni stroj s Linuxom i ručno konfigurirajmo Grafanu na njemu.
Spojimo se preko ssh-a i instalirajmo potrebne pakete.
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
Nakon toga pokrenimo Grafanu pod systemctl i instalirajmo plugin za rad sa ClickHouseom (da, ne dolazi u osnovnom paketu).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
To je to, nakon toga jednostavnom naredbom
sudo service grafana-server start
pokrenut ćemo web poslužitelj. Sada možete unijeti vanjsku IP adresu virtualnog stroja u preglednik, odrediti port 3000 i vidjeti prekrasno Grafana korisničko sučelje.
Ali nemojte žuriti, prije postavljanja Grafane, ne zaboravite joj reći put do MySQL-a kako biste tamo pohranili postavke.
Cjelokupna konfiguracija Grafana web poslužitelja nalazi se u datoteci /etc/grafana/grafana.ini
. Potrebna linija izgleda ovako:
;url =
Host postavljamo na MySQL klaster. U istoj datoteci nalaze se login i password za pristup Grafani na gornjoj slici, koji su po defaultu jednaki admin
.
Možete koristiti sed naredbe:
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
Vrijeme je za ponovno pokretanje web poslužitelja!
sudo service grafana-server restart
Sada ćemo u Grafana korisničkom sučelju navesti ClickHouse kao DataSource.
Uspio sam postići radnu konfiguraciju sa sljedećim postavkama:
Naveo sam kao URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Svi! Imamo jednu virtualnu mašinu koja radi s web serverom spojenim na CH i MySQL. Već možete prenijeti skup podataka u ClickHouse i izraditi nadzorne ploče. Međutim, još nismo postigli svoj cilj i nismo postavili potpunu infrastrukturu.
Paker
Yandex.Cloud vam omogućuje stvaranje slike diska postojećeg virtualnog stroja, a na njegovoj osnovi - bilo kojeg broja strojeva koji su međusobno identični. To je upravo ono što ćemo mi koristiti. Da biste jednostavno sastavili sliku, uzmite alat
Naša json datoteka sastojat će se od dva bloka: graditelji i pružatelji usluga. Prvi blok opisuje parametre same slike kao entiteta, a drugi blok opisuje upute za njeno popunjavanje potrebnim sadržajem.
Graditelji
{
"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"
}
],
...
}
U ovom predlošku morate postaviti identifikator odjeljka u oblaku u kojem želite kreirati sliku, kao i putanju do datoteke s ključevima iz servisnog računa prethodno kreiranog u ovom odjeljku. Više o kreiranju servisnih računa i ključeva u obliku datoteke možete pročitati u odgovarajućem odjeljku
Ova konfiguracija kaže da će slika diska biti izgrađena na temelju platforme ubuntu-1804-lts
, postavljen u odgovarajući korisnički odjeljak u obitelji slika GRAFANA
pod imenom grafana-{{timestamp}}
.
Provizori
Sada dolazi zanimljiviji dio konfiguracije. Opisat će slijed radnji koje će se morati izvršiti na virtualnom stroju prije zamrzavanja njegovog stanja u sliku diska.
{
...,
"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"
]
}
]
}
Ovdje su sve radnje podijeljene u 3 faze. U prvoj fazi izvršava se jednostavna skripta koja stvara pomoćni direktorij.
pripremi-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
U sljedećoj fazi postavljamo skriptu u ovaj direktorij, koja će se morati pokrenuti odmah nakon pokretanja virtualnog stroja. Ova skripta će staviti korisničke varijable koje je potrebno registrirati u Grafana konfiguraciju i ponovno pokrenuti web poslužitelj.
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
Nakon ovoga preostaju još 3 stvari:
1) instalirajte pakete
2) pokrenite Grafanu pod systemctl i instalirajte ClickHouse dodatak
3) stavite skriptu setup.sh u red čekanja za pokretanje odmah nakon uključivanja virtualnog stroja.
instalacijski paketi.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;
Sada sve što preostaje je pokrenuti Packer i postaviti izlaznu sliku u navedeni odjeljak. Prilikom izrade virtualnog stroja možete ga odabrati kao boot disk i nakon pokretanja dobit ćete gotov Grafana web poslužitelj.
Grupa instanci i balanser
Nakon što imamo sliku diska koja nam omogućuje stvaranje mnogo identičnih Grafana web poslužitelja, možemo stvoriti grupu instanci. Na platformi Yandex.Cloud ovaj se pojam odnosi na uniju virtualnih strojeva koji imaju iste karakteristike. Prilikom kreiranja grupe instanci konfigurira se prototip svih strojeva u ovoj grupi, a potom i karakteristike same grupe (primjerice minimalni i maksimalni broj aktivnih strojeva). Ako trenutni broj ne zadovoljava ove kriterije, tada će grupa instanci sama ukloniti nepotrebne strojeve ili stvoriti nove prema vlastitoj slici.
Kao dio našeg zadatka, kreirat ćemo grupu instanci web poslužitelja koji će biti generirani iz prethodno kreirane slike diska.
Ono što je uistinu izvanredno je postavljanje grupe u zadnjoj instanci. Ciljna skupina u integraciji s Load Balancerom pomoći će vam da konfigurirate L3 balanser povrh virtualnih strojeva ove grupe klikom na nekoliko gumba.
Prilikom postavljanja balansera implementirao sam dvije važne točke:
- Natjerao sam balanser da prihvati korisnički promet na portu 80 i preusmjeri ga na port 3000 virtualnih strojeva, točno tamo gdje živi Grafana.
- Postavio sam provjeru održivosti strojeva slanjem pinga na port 3000.
Mini sažetak
Napokon smo uspjeli ručno implementirati željenu aplikacijsku infrastrukturu i sada imamo vrlo otpornu uslugu Grafana. Trebate znati samo IP adresu balansera kao ulazne točke u aplikaciju i host ClickHouse klastera kako biste učitali skup podataka u njega.
Čini se kao pobjeda? Da, pobjeda. Ali nešto me ipak zbunjuje. Cijeli gore navedeni postupak zahtijeva mnogo ručnih koraka i uopće nije skalabilan; želio bih ga automatizirati ako je moguće. Tome će biti posvećen sljedeći odjeljak.
Terraform integracija
Ponovno ćemo koristiti alat tvrtke HashiCorp tzv
Sav rad s Terraformom svodi se na pisanje konfiguracijske datoteke (*.tf
) i stvaranje infrastrukture na temelju toga.
varijable
Na samom početku datoteke uključit ćemo varijable koje određuju gdje i kako će se buduća infrastruktura postaviti.
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>"
}
Cijeli proces postavljanja aplikacije svodit će se na izradu slike diska i postavljanje ovih varijabli. Dopustite mi da objasnim za što su odgovorni:
oauth_token — token za pristup oblaku. Može se dobiti od
cloud_id — identifikator oblaka gdje ćemo implementirati aplikaciju
folder_id — identifikator odjeljka gdje ćemo implementirati aplikaciju
service_account_id — identifikator računa usluge u odgovarajućem odjeljku oblaka.
image_id — identifikator slike diska dobivene korištenjem Packera
korisničko ime и lozinka — korisničko ime i lozinka za pristup bazama i Grafana web poslužitelju
dbname — naziv baze podataka unutar CH i MySQL klastera
put_javnog_ključa — put do datoteke s vašim javnim ssh ključem, koji možete koristiti za povezivanje pod imenom ubuntu
na virtualne strojeve s web poslužiteljima
Postavljanje davatelja usluga
Sada morate konfigurirati pružatelja usluge Terraform - u našem slučaju Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Primijetit ćete da ovdje koristimo gore definirane varijable.
Mreža i klasteri
Sada ćemo napraviti mrežu u kojoj će komunicirati elementi naše infrastrukture, tri podmreže (po jedna u svakoj regiji) i podignuti CH i MySQL klastere.
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
}
}
Kao što možete vidjeti, svaki od dva klastera stvoren je prilično tolerantan na pogreške jer se nalazi u tri zone dostupnosti.
Web poslužitelji
Čini se da bismo mogli nastaviti u istom duhu, ali naišao sam na poteškoće. Prije toga sam prvo podigao MySQL klaster i tek nakon toga, znajući njegov ID, skupio sam sliku diska sa potrebnom konfiguracijom, gdje sam specificirao host klasteru. Ali sada ne znamo ID klastera prije pokretanja Terraforma, uključujući i vrijeme izgradnje slike. Stoga sam morao pribjeći sljedećem
Pomoću Amazonove usluge metapodataka proslijediti ćemo neke parametre virtualnom računalu koje će ono prihvatiti i obraditi. Potrebno nam je da stroj ide do metapodataka iza MySQL hosta klastera i korisničkog imena-lozinke, koje je korisnik naveo u datoteci Terraform, nakon pokretanja. Malo promijenimo sadržaj datoteke setup.sh
, koji se pokreće kada je virtualni stroj uključen.
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
Grupa ulaza i balanser
Nakon što smo ponovno izgradili novu sliku diska, konačno možemo dodati našu datoteku za Terraform.
Naznačimo da želimo koristiti postojeću sliku diska:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Kreirajmo sada grupu instanci:
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"
}
}
Vrijedno je obratiti pozornost na to kako smo to prenijeli u metapodatke cluster_uri
, username
и password
. Upravo će ih virtualni stroj izvaditi pri pokretanju i staviti u Grafana konfiguraciju.
To je na balanseru.
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
}
}
}
}
Malo šećera
Još samo malo. Nakon što je infrastruktura postavljena, morat ćete otići na Grafana UI i ručno dodati CH klaster (čiji ID još treba dobiti) kao izvor podataka. Ali Terraform zna ID klastera. Povjerimo mu da stvar dovede do kraja.
Dodajmo novog provajdera - Grafana i dajmo joj IP adresu balansera kao host. Sve promjene koje Terraform napravi na stroju za koji njegov balanser odredi da će rasti u MySQL-u, a time i na svim ostalim strojevima.
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"
}
Počešljajmo se
Prikažimo IP adresu balansera i host ClickHouse klastera
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"
}
Može trčati
Svi! Naša konfiguracijska datoteka je spremna i možemo, postavljanjem varijabli, reći Terraformu da podigne sve što smo gore opisali. Cijeli proces mi je oduzeo oko 15 minuta.
Na kraju možete vidjeti prekrasnu poruku:
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
A u oblaku će biti vidljivi elementi podignute infrastrukture:
Sumirati
Sada, koristeći Grafanu kao primjer, svatko od vas može implementirati aplikacije s prostranom arhitekturom oblaka na platformi Yandex.Cloud. U tome vam mogu pomoći korisni alati tvrtke HashiCorp kao što su Packer i Terraform. Nadam se da će nekome ovaj članak biti koristan :)
PS U nastavku ću priložiti vezu na spremište gdje možete pronaći gotove recepte za Packer i Terraform, čije sam fragmente naveo u ovom članku.
Izvor: www.habr.com