Jak spravovat cloudovou infrastrukturu pomocí Terraform

Jak spravovat cloudovou infrastrukturu pomocí Terraform

V tomto článku se podíváme na to, z čeho se Terraform skládá, a také postupně spustíme vlastní infrastrukturu v cloudu s VMware - připravit tři VM pro různé účely: proxy, úložiště souborů a CMS.

Vše podrobně a ve třech fázích:

1. Terraform - popis, výhody a komponenty

Terraform je IaC (Infrastructure-as-Code) nástroj pro budování a správu virtuální infrastruktury pomocí kódu.

Při práci s nástrojem jsme zaznamenali několik výhod:

  • Rychlost nasazení nových nájemců (vlastní virtuální prostředí). Obvykle platí, že čím více nových klientů, tím více „kliknutí“ musí pracovníci technické podpory provést, aby publikovali nové zdroje. Pomocí Terraform mohou uživatelé měnit parametry virtuálních strojů (například automaticky vypnout OS a zvětšit oddíl virtuálního disku) bez účasti technické podpory a vypnutí samotného stroje.

  • Okamžité ověření aktivačního plánu nový nájemce. Pomocí popisu kódu infrastruktury můžeme okamžitě zkontrolovat, co bude přidáno a v jakém pořadí, a také v jakém konečném stavu bude ten či onen virtuální stroj nebo virtuální síť s připojeními k virtuálním strojům.

  • Schopnost popsat nejoblíbenější cloudové platformy. Nástroj můžete použít od Amazonu a Google Cloud po soukromé platformy založené na VMware vCloud Director nabízející řešení IaaS, SaaS a PaaS.

  • Spravujte více poskytovatelů cloudu a distribuovat mezi nimi infrastrukturu za účelem zlepšení odolnosti proti chybám pomocí jediné konfigurace k vytváření, diagnostice a správě cloudových zdrojů.

  • Pohodlné použití pro vytváření demo stojanů pro testování a ladění softwaru. Můžete vytvářet a přenášet benche pro testovací oddělení, testovat software paralelně v různých prostředích a okamžitě měnit a mazat zdroje vytvořením jediného plánu budování zdrojů.

"Terárium" Terraform

Stručně jsme hovořili o výhodách nástroje, nyní jej rozebereme na jeho součásti

Poskytovatelé (poskytovatelé). 

V Terraformu lze jako zdroj reprezentovat téměř jakýkoli typ infrastruktury. Propojení mezi prostředky a platformou API zajišťují moduly poskytovatelů, které umožňují vytvářet prostředky v rámci konkrétní platformy, jako je Azure nebo VMware vCloud Director.

V rámci projektu můžete komunikovat s různými poskytovateli na různých platformách.

Zdroje (popis zdrojů).

Popis prostředků vám umožňuje spravovat komponenty platformy, jako jsou virtuální stroje nebo sítě. 

Sami si můžete vytvořit popis prostředků pro poskytovatele VMware vCloud Director a tento popis použít k vytvoření prostředků pro jakéhokoli poskytovatele hostingu, který používá vCloud Director. Stačí změnit parametry autentizace a parametry síťového připojení na požadovaného poskytovatele hostingu

Poskytovatelé.

Tato komponenta umožňuje provádět operace pro počáteční instalaci a údržbu operačního systému po vytvoření virtuálních strojů. Jakmile vytvoříte prostředek virtuálního počítače, můžete pomocí provizorů nakonfigurovat a připojit se přes SSH, upgradovat operační systém a stáhnout a spustit skript. 

Proměnné Vstup a Výstup.

Vstupní proměnné — vstupní proměnné pro všechny typy bloků. 

Výstupní proměnné umožňují uložení hodnot po vytvoření zdroje a lze je použít jako vstupní proměnné v jiných modulech, jako je blok Provisioners.

státy.

Soubory stavů ukládají informace o konfiguraci prostředků platformy poskytovatele. Při prvním vytvoření platformy nejsou žádné informace o zdrojích a Terraform před jakoukoli operací aktualizuje stav skutečnou infrastrukturou již popsaných zdrojů.

Hlavním účelem stavů je uložit hromadu objektů již vytvořených zdrojů pro porovnání konfigurace přidaných zdrojů a objektů, aby se zabránilo opětovnému vytváření a změnám platformy.

Informace o stavu jsou standardně uloženy lokálně v souboru terraform.tfstate, ale v případě potřeby můžete pro týmovou práci použít vzdálené úložiště.

Můžete také importovat aktuální zdroje platformy do stavu, abyste mohli dále interagovat s jinými zdroji, které byly zase vytvořeny bez pomoci Terraformu.  

2. Vytváření infrastruktury

Komponenty byly rozebrány, nyní s pomocí Terraformu postupně vytvoříme infrastrukturu se třemi virtuálními stroji. První s nainstalovaným proxy serverem nginx, druhý s úložištěm souborů založeným na Nextcloud a třetí s Bitrix CMS.

Napíšeme kód a provedeme jej pomocí našeho příkladu mraky na VMware vCloud Director. U nás uživatelé získají účet s právy správce organizace, pokud účet se stejnými právy používáte v jiném cloudu VMware, můžete si reprodukovat kód z našich příkladů. Jít!

Nejprve si vytvořte adresář pro náš nový projekt, který bude obsahovat soubory popisující infrastrukturu.

mkdir project01

Poté popíšeme komponenty infrastruktury. Terraform vytváří odkazy a zpracovává soubory na základě popisu v souborech. Samotné soubory mohou být pojmenovány na základě účelu popsaných bloků, například network.tf - popisuje síťové parametry pro infrastrukturu.

Pro popis komponent naší infrastruktury jsme vytvořili následující soubory:

Seznam souborů.

main.tf - popis parametrů pro virtuální prostředí - virtuální stroje, virtuální kontejnery;

network.tf - popis parametrů virtuální sítě a NAT, pravidla Firewallu;

variables.tf - seznam proměnných, které používáme;

vcd.tfvars - hodnoty proměnných projektu pro modul VMware vCloud Director.

Konfigurační jazyk v Terraformu je deklarativní a na pořadí bloků nezáleží, kromě provizorních bloků, protože v tomto bloku popisujeme příkazy, které mají být provedeny při přípravě infrastruktury a budou provedeny v pořadí.

Bloková struktura.

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Bloky jsou popsány pomocí vlastního programovacího jazyka HCL (HashiCorp Configuration Language), infrastrukturu je možné popsat pomocí JSON. Další informace o syntaxi viz přečtěte si na webu vývojáře.

Konfigurace proměnných prostředí, proměnné.tf a vcd.tfvars

Nejprve vytvořte dva soubory, které popisují seznam všech použitých proměnných a jejich hodnot pro modul VMware vCloud Director. Nejprve si vytvoříme soubor variables.tf.

Obsah souboru variables.tf.

variable "vcd_org_user" {

  description = "vCD Tenant User"

}

variable "vcd_org_password" {

  description = "vCD Tenant Password"

}

variable "vcd_org" {

  description = "vCD Tenant Org"

}

variable "vcd_org_vdc" {

  description = "vCD Tenant VDC"

}

variable "vcd_org_url" {

  description = "vCD Tenant URL"

}

variable "vcd_org_max_retry_timeout" {

  default = "60"

}

variable "vcd_org_allow_unverified_ssl" {

  default = "true"

}

variable "vcd_org_edge_name" {

  description = "vCD edge name"

}

variable "vcd_org_catalog" {

  description = "vCD public catalog"

}

variable "vcd_template_os_centos7" {

  description = "OS CentOS 7"

  default = "CentOS7"

}

variable "vcd_org_ssd_sp" {

  description = "Storage Policies"

  default = "Gold Storage Policy"

}

variable "vcd_org_hdd_sp" {

  description = "Storage Policies"

  default = "Bronze Storage Policy"

}

variable "vcd_edge_local_subnet" {

  description = "Organization Network Subnet"

}

variable "vcd_edge_external_ip" {

  description = "External public IP"

}

variable "vcd_edge_local_ip_nginx" {}

variable "vcd_edge_local_ip_bitrix" {}

variable "vcd_edge_local_ip_nextcloud" {}

variable "vcd_edge_external_network" {}

Proměnné hodnoty, které dostáváme od poskytovatele.

  • vcd_org_user – uživatelské jméno s právy správce organizace,

  • vcd_org_password - uživatelské heslo,

  • vcd_org - název organizace,

  • vcd_org_vdc – název virtuálního datového centra,

  • vcd_org_url – adresa URL rozhraní API,

  • vcd_org_edge_name - název virtuálního routeru,

  • vcd_org_catalog - název adresáře se šablonami virtuálního stroje,

  • vcd_edge_external_ip - veřejná IP adresa,

  • vcd_edge_external_network – název externí sítě,

  • vcd_org_hdd_sp – název zásady úložiště HDD,

  • vcd_org_ssd_sp je název zásad úložiště SSD.

A zadejte naše proměnné:

  • vcd_edge_local_ip_nginx - IP adresa virtuálního počítače s NGINX,

  • vcd_edge_local_ip_bitrix - IP adresa virtuálního počítače s 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud - IP adresa virtuálního počítače s Nextcloud.

Ve druhém souboru vytvoříme a specifikujeme proměnné pro modul VMware vCloud Director v souboru vcd.tfvars: Připomeňme, že v našem příkladu používáme vlastní cloudové mCloudy, pokud spolupracujete s jiným poskytovatelem, ověřte si u něj hodnoty. 

Obsah souboru vcd.tfvars.

vcd_org_url = "https://vcloud.mclouds.ru/api"

vcd_org_user = "orgadmin"

vcd_org_password = "*"

vcd = "org"

vcd_org_vdc = "orgvdc"

vcd_org_maxretry_timeout = 60

vcd_org_allow_unverified_ssl = true

vcd_org_catalog = "Templates"

vcd_templateos_centos7 = "CentOS7"

vcd_org_ssd_sp = "Gold Storage Policy"

vcd_org_hdd_sp = "Bronze Storage Policy"

vcd_org_edge_name = "MCLOUDS-EDGE"

vcd_edge_external_ip = "185.17.66.1"

vcd_edge_local_subnet = "192.168.110.0/24"

vcd_edge_local_ip_nginx = "192.168.110.1"

vcd_edge_local_ip_bitrix = "192.168.110.10"

vcd_edge_local_ip_nextcloud = "192.168.110.11"

vcd_edge_external_network = "NET-185-17-66-0"

Konfigurace sítě, network.tf.

Proměnné prostředí jsou nastaveny, nyní nakonfigurujeme schéma připojení virtuálního stroje – každému virtuálnímu stroji přiřaďte privátní IP adresu a pomocí Destination NAT „přeposílejte“ porty do externí sítě. Abychom omezili přístup k portům pro správu, nastavíme přístup pouze pro naši IP adresu.

Jak spravovat cloudovou infrastrukturu pomocí TerraformSchéma sítě pro vytvořenou platformu Terraform

Vytvoříme virtuální organizační síť s názvem net_lan01, výchozí bránou: 192.168.110.254 a také s adresním prostorem: 192.168.110.0/24.

Popište virtuální síť.

resource "vcd_network_routed" "net" {

  name = "net_lan01"

  edge_gateway = var.vcd_org_edge_name

  gateway = "192.168.110.254"

  dns1 = "1.1.1.1"

  dns2 = "8.8.8.8"

 static_ip_pool {

start_address = "192.168.110.1"

end_address = "192.168.110.253"

  }

}

Vytvořme pravidla pro firewall, který umožňuje poskytovat virtuálním strojům přístup k internetu. V rámci tohoto bloku budou mít všechny virtuální zdroje v cloudu přístup k internetu:

Popisujeme pravidla pro přístup VM k internetu.

resource "vcd_nsxv_firewall_rule" "fw_internet_access" {

  edge_gateway   = var.vcdorgedgename

  name = "Internet Access"

  source {

gateway_interfaces = ["internal"]

  }

  destination {

gateway_interfaces = ["external"]

  }

  service {

protocol = "any"

  }

  depends_on = [vcdnetworkrouted.net]

}

Po vytvoření závislosti, že po zpracování bloku vcdnetworkrouted.net přistoupíme ke konfiguraci bloku vcdnsxvfirewallrule, s помощью záleží na. Tuto možnost používáme, protože některé závislosti mohou být v konfiguraci implicitně rozpoznány.

Dále vytvoříme pravidla umožňující přístup k portům z externí sítě a určíme naši IP adresu pro připojení přes SSH k serverům. Každý uživatel internetu má přístup k portům 80 a 443 na webovém serveru a uživatel s IP adresou 90.1.15.1 má přístup k SSH portům virtuálních serverů.

Umožňujeme přístup k portům z externí sítě.

resource "vcd_nsxv_firewall_rule" "fwnatports" {

  edge_gateway   = var.vcd_org_edge_name

  name = "HTTPs Access"

  source {

gateway_interfaces = ["external"]

  }

  destination {

  gateway_interfaces = ["internal"]

  }

  service {

protocol = "tcp"

port = "80"

  }

  service {

protocol = "tcp"

port = "443"

  }

  depends_on = [vcd_network_routed.net]

}

resource "vcd_nsxv_firewall_rule" "fw_nat_admin_ports" {

  edge_gateway   = var.vcd_org_edge_name

  name = "Admin Access"

  source {

  ip_addresses = [ "90.1.15.1" ]

  }

  destination {

  gateway_interfaces = ["internal"]

  }

  service {

protocol = "tcp"

port = "58301"

  }

  service {

protocol = "tcp"

port = "58302"

  }

  service {

protocol = "tcp"

port = "58303"

  }

  depends_on = [vcd_network_routed.net]

}

Vytvořte pravidla zdrojového NAT pro přístup k internetu z cloudové místní sítě:

Popište pravidla Source NAT.

resource "vcd_nsxv_snat" "snat_local" {

edge_gateway = var.vcd_org_edge_name

  network_type = "ext"

  network_name = var.vcdedgeexternalnetwork

  original_address   = var.vcd_edge_local_subnet

translated_address = var.vcd_edge_external_ip

  depends_on = [vcd_network_routed.net]

}

A na konec konfigurace síťového bloku přidáme pravidla Destination NAT pro přístup ke službám z externí sítě:

Přidání pravidel cílové NAT.

resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

  description = "NGINX HTTPs"

original_address = var.vcd_edge_external_ip
original_port = 443

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"

depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "NGINX HTTP"

original_address = var.vcd_edge_external_ip
original_port = 80

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Přidejte pravidlo NAT pro překlad portů na server SSH pod Nginx.

resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH NGINX"

original_address = var.vcd_edge_external_ip
original_port = 58301

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Přidáme pravidlo NAT pro překlad portů na SSH server s 1C-Bitrix.

resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Bitrix"

original_address = var.vcd_edge_external_ip
original_port = 58302

translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Přidejte pravidlo NAT pro překlad portů na server SSH pomocí Nextcloud.

resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Nextcloud"

original_address = var.vcd_edge_external_ip
original_port = 58303 translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Konfigurace virtuálního prostředí main.tf

Jak jsme plánovali na začátku článku, vytvoříme tři virtuální stroje. Budou připraveny s „Přizpůsobením hostů“. Parametry sítě zapíšeme podle námi zadaného nastavení a heslo od uživatele se vygeneruje automaticky.

Pojďme si popsat vApp, ve kterém se budou virtuální stroje a jejich konfigurace nacházet.

Jak spravovat cloudovou infrastrukturu pomocí TerraformKonfigurace virtuálního stroje

Pojďme vytvořit kontejner vApp. Abychom mohli okamžitě připojit vApp a VM k virtuální síti, přidáme také parametr Depend_on:

Vytvořte kontejner

resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true" depends_on = [vcd_network_routed.net]

}

Vytvořte virtuální počítač s popisem

resource "vcd_vapp_vm" "nginx" {

vapp_name = vcd_vapp.vapp.name

name = "nginx"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_nginx

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "32768"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

Hlavní parametry v popisu VM:

  • name je název virtuálního počítače,

  • vappname – název vApp, do kterého se má přidat nový virtuální počítač,

  • název katalogu / název šablony - název katalogu a název šablony virtuálního počítače,

  • storageprofile – výchozí zásady úložiště.

Parametry síťového bloku:

  • typ — typ připojené sítě,

  • název – ke které virtuální síti se má virtuální počítač připojit,

  • isprimary - primární síťový adaptér,

  • ipallocation_mode - režim přidělování adresy MANUAL / DHCP / POOL,

  • ip - IP adresa pro virtuální stroj, zadáme ji ručně.

blok override_template_disk:

  • sizeinmb - velikost spouštěcího disku pro virtuální počítač

  • storage_profile - zásady ukládání pro disk

Vytvořme druhý VM s popisem úložiště souborů Nextcloud

resource "vcd_vapp_vm" "nextcloud" {

vapp_name = vcd_vapp.vapp.name

name = "nextcloud"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_nextcloud

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "32768"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

resource "vcd_vm_internal_disk" "disk1" {

vapp_name = vcd_vapp.vapp.name

vm_name = "nextcloud"

bus_type = "paravirtual"

size_in_mb = "102400"

bus_number = 0

unit_number = 1

storage_profile = var.vcd_org_hdd_sp

allow_vm_reboot = true

depends_on = [ vcd_vapp_vm.nextcloud ]

}

V části vcdvminternal_disk popisujeme nový virtuální disk, který je připojen k virtuálnímu počítači.

Vysvětlení k bloku vcdvminternaldisk:

  • bustype - typ řadiče disku

  • sizeinmb - velikost disku

  • busnumber / unitnumber - přípojný bod v adaptéru

  • storage_profile - zásady ukládání pro disk

Pojďme si popsat poslední VM na Bitrixu

resource "vcd_vapp_vm" "bitrix" {

vapp_name = vcd_vapp.vapp.name

name = "bitrix"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_bitrix

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "81920"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

Aktualizace OS a instalace dalších skriptů

Síť je připravena, virtuální stroje jsou popsány. Před importem naší infrastruktury můžeme předem zajistit bloky provizorů a bez použití Ansible.

Podívejme se, jak aktualizovat OS a spustit instalační skript Bitrix CMS pomocí bloku provizoria.

Nejprve nainstalujme servisní balíčky CentOS.

resource "null_resource" "nginx_update_install" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.nginx.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

inline = [

"yum -y update && yum -y upgrade",

"yum -y install wget nano epel-release net-tools unzip zip" ]

}

}

}

Označení komponentů:

  • Provider "remote-exec" - připojte vzdálený blok "provisioning".

  • V bloku připojení popisujeme typ a parametry připojení:

  • typ - protokol, v našem případě SSH;

  • uživatel - uživatelské jméno;

  • heslo — heslo uživatele. V našem případě ukážeme na parametr vcdvappvm.nginx.customization[0].admin_password, který ukládá vygenerované heslo od uživatele systému.

  • hostitel — externí IP adresa pro připojení;

  • port - port pro připojení, který byl dříve specifikován v nastavení DNAT;

  • inline - vypíše seznam příkazů, které budou zadány. Příkazy budou zadány v pořadí, jak je uvedeno v této části.

Jako příklad spusťte dodatečně instalační skript 1C-Bitrix. Výstup výsledku provádění skriptu bude k dispozici během provádění plánu. Pro instalaci skriptu nejprve popíšeme blok:

Pojďme si popsat instalaci 1C-Bitrix.

provisioner "file" {

source = "prepare.sh"

destination = "/tmp/prepare.sh"

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.nginx.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

}

provisioner "remote-exec" {

inline = [

"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"

]

}

A hned si popíšeme aktualizaci Bitrixu.

Příklad zřizování 1C-Bitrix.

resource "null_resource" "install_update_bitrix" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.bitrix.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58302"

timeout = "60s"

}

inline = [

"yum -y update && yum -y upgrade",

"yum -y install wget nano epel-release net-tools unzip zip",

"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",

"chmod +x /tmp/bitrix-env.sh",

"/tmp/bitrix-env.sh"

]

}

}

Důležité! Skript nemusí fungovat, pokud není SELinux předem deaktivován! Pokud potřebujete podrobný článek o instalaci a konfiguraci CMS 1C-Bitrix pomocí bitrix-env.sh, můžete použijte náš článek na blogu na webu.

3. Inicializace infrastruktury

Jak spravovat cloudovou infrastrukturu pomocí TerraformInicializace modulů a pluginů

Pro práci používáme jednoduchý „gentleman's set“: notebook s Windows 10 a distribuční sadu z oficiálních stránek Terraform.io. Rozbalte a inicializujte pomocí příkazu: terraform.exe init

Po popisu výpočetní a síťové infrastruktury začínáme plánovat testování naší konfigurace, kde uvidíme, co vznikne a jak je to vzájemně propojeno.

  1. Proveďte příkaz - terraform plan -var-file=vcd.tfvars.

  2. Dostáváme výsledek - Plan: 16 to add, 0 to change, 0 to destroy. To znamená, že podle tohoto plánu bude vytvořeno 16 zdrojů.

  3. Spuštění plánu na příkaz - terraform.exe apply -var-file=vcd.tfvars.

Budou vytvořeny virtuální stroje a následně budou spuštěny námi uvedené balíčky v rámci provizorní sekce - bude aktualizován OS a nainstalován CMS Bitrix.

Získávání dat připojení

Po provedení plánu chceme přijímat data v textové podobě pro připojení k serverům, k tomu uspořádáme výstupní sekci takto:

output "nginxpassword" {

 value = vcdvappvm.nginx.customization[0].adminpassword

}

A následující výstup nám sdělí heslo z vytvořeného virtuálního stroje:

Outputs: nginx_password = F#4u8!!N

Díky tomu získáme přístup k virtuálním strojům s aktualizovaným operačním systémem a předinstalovanými balíčky pro naši další práci. Vše je připraveno!

Ale co když již máte existující infrastrukturu?

3.1. Terraform pracující se stávající infrastrukturou

Je to jednoduché, aktuální virtuální stroje a jejich kontejnery vApp můžete importovat pomocí příkazu import.

Pojďme si popsat prostředek vAPP a virtuální stroj.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Dalším krokem je import vlastností prostředku vApp ve formátu vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, kde:

  • vApp je název vApp;

  • org je název organizace;

  • org_vdc je název virtuálního datového centra.

Jak spravovat cloudovou infrastrukturu pomocí TerraformImportujte vlastnosti prostředku vAPP

Importujme vlastnosti prostředků VM ve formátu: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, ve kterém:

  • VM - název virtuálního počítače;

  • vApp je název vApp;

  • org je název organizace;

  • orgvdc je název virtuálního datového centra.

Import byl úspěšný

C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix

vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Import prepared!

Prepared vcd_vapp_vm for import

vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

Nyní se můžeme podívat na nově importovaný zdroj:

Importovaný zdroj

> terraform show

...

# vcd_vapp.Monitoring:

resource "vcd_vapp" "Monitoring" {

guest_properties = {}

href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"

id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"

ip = "allocated"

metadata = {}

name = "Monitoring"

org = "mClouds"

status = 4

status_text = "POWERED_ON"

vdc = "mClouds"

}

# vcd_vapp_vm.Zabbix:

resource "vcd_vapp_vm" "Zabbix" {

computer_name = "Zabbix"

cpu_cores = 1

cpus = 2

expose_hardware_virtualization = false

guest_properties = {}

hardware_version = "vmx-14"

href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

internal_disk = [

{

bus_number = 0

bus_type = "paravirtual"

disk_id = "2000"

iops = 0

size_in_mb = 122880

storage_profile = "Gold Storage Policy"

thin_provisioned = true

unit_number = 0

},

]

memory = 8192

metadata = {}

name = "Zabbix"

org = "mClouds"

os_type = "centos8_64Guest"

storage_profile = "Gold Storage Policy"

vapp_name = "Monitoring"

vdc = "mClouds"

customization {

allow_local_admin_password = true

auto_generate_password = true

change_sid = false

enabled = false

force = false

join_domain = false

join_org_domain = false

must_change_password_on_first_login = false

number_of_auto_logons = 0

}

network {

adapter_type = "VMXNET3"

ip_allocation_mode = "DHCP"

is_primary = true

mac = "00:50:56:07:01:b1"

name = "MCLOUDS-LAN01"

type = "org"

}

}

Nyní jsme definitivně připraveni – dokončili jsme na poslední chvíli (import do stávající infrastruktury) a zvážili všechny hlavní body práce s Terraformem. 

Nástroj se ukázal jako velmi pohodlný a umožňuje popsat vaši infrastrukturu jako kód, od virtuálních strojů jednoho poskytovatele cloudu až po popis zdrojů síťových komponent.

Nezávislost na prostředí zároveň umožňuje pracovat s lokálními, cloudovými zdroji a konče správou platformy. A pokud neexistuje žádná podporovaná platforma a chcete přidat novou, můžete si napsat vlastního poskytovatele a používat jej.

Zdroj: www.habr.com

Přidat komentář