Hoe om wolkinfrastruktuur met Terraform te bestuur

Hoe om wolkinfrastruktuur met Terraform te bestuur

In hierdie artikel sal ons kyk waaruit Terraform bestaan, en ook geleidelik ons ​​eie infrastruktuur bekendstel in die wolk met VMware - ons sal drie VM's vir verskillende doeleindes voorberei: instaanbediener, lêerberging en CMS.

Oor alles in detail en in drie fases:

1. Terraform - beskrywing, voordele en komponente

Terraform is 'n IaC (Infrastruktuur-as-kode)-instrument vir die bou en bestuur van virtuele infrastruktuur met behulp van kode.

Ons het verskeie voordele opgemerk om met die instrument te werk:

  • Ontplooiingspoed van nuwe huurders (pasgemaakte virtuele omgewings). Tipies, hoe meer nuwe kliënte daar is, hoe meer "klikke" moet tegniese ondersteuningspersoneel maak om nuwe hulpbronne te publiseer. Met Terraform kan gebruikers virtuele masjieninstellings verander (byvoorbeeld om die bedryfstelsel outomaties af te skakel en die virtuele skyfpartisie te vergroot) sonder om tegniese ondersteuning te benodig of om die masjien self af te skakel.

  • Onmiddellike verifikasie van die aktiveringsplan nuwe Tennant. Deur die beskrywing van die infrastruktuurkode te gebruik, kan ons dadelik kyk wat bygevoeg sal word en in watter volgorde, asook in watter finale toestand hierdie of daardie virtuele masjien of virtuele netwerk met verbindings met virtuele masjiene sal wees.

  • Die vermoë om die gewildste wolkplatforms te beskryf. Jy kan die instrument gebruik van Amazon en Google Cloud, tot private platforms gebaseer op VMware vCloud Director, wat dienste binne IaaS-, SaaS- en PaaS-oplossings bied.

  • Bestuur verskeie wolkverskaffers en versprei die infrastruktuur tussen hulle om foutverdraagsaamheid te verbeter, deur 'n enkele konfigurasie te gebruik om wolkhulpbronne te skep, te diagnoseer en te bestuur.

  • Gerieflike gebruik vir die skep van demonstrasiestaanders vir sagtewaretoetsing en ontfouting. Jy kan staanplekke vir die toetsafdeling skep en oordra, sagteware in verskillende omgewings parallel toets, en hulpbronne onmiddellik verander en uitvee deur net een hulpbronbouplan te skep

"Terrarium" Terraform

Ons het kortliks gepraat oor die voordele van die instrument, laat ons dit nou in sy komponente opdeel

Verskaffers. 

In Terraform kan byna enige tipe infrastruktuur as 'n hulpbron voorgestel word. Die verbinding tussen hulpbronne en die API-platform word verskaf deur verskaffermodules, wat jou toelaat om hulpbronne binne 'n spesifieke platform te skep, byvoorbeeld Azure of VMware vCloud Director.

As deel van die projek kan u op verskillende platforms met verskillende verskaffers kommunikeer.

Hulpbronne (hulpbronbeskrywing).

Beskrywing van hulpbronne laat jou toe om platformkomponente, soos virtuele masjiene of netwerke, te bestuur. 

Jy kan self 'n hulpbronbeskrywing vir die VMware vCloud Director-verskaffer skep en hierdie beskrywing gebruik om hulpbronne te skep by enige gasheerverskaffer wat vCloud Director gebruik. U hoef slegs die verifikasieparameters en netwerkverbindingsparameters na die vereiste gasheerverskaffer te verander

Voorsieners.

Hierdie komponent maak dit moontlik om bewerkings uit te voer vir die aanvanklike installering en instandhouding van die bedryfstelsel nadat virtuele masjiene geskep is. Sodra jy 'n virtuele masjienhulpbron geskep het, kan jy voorsieners gebruik om via SSH op te stel en te koppel, die bedryfstelsel op te dateer en 'n skrip af te laai en uit te voer. 

Inset- en Uitsetveranderlikes.

Insetveranderlikes - insetveranderlikes vir enige bloktipes. 

Uitsetveranderlikes laat jou toe om waardes te stoor nadat jy hulpbronne geskep het en kan as invoerveranderlikes in ander modules gebruik word, byvoorbeeld in die Voorsieners-blok.

State.

State-lêers stoor inligting oor die opstelling van verskafferplatformhulpbronne. Wanneer die platform die eerste keer geskep word, is daar geen inligting oor hulpbronne nie en voor enige operasie werk Terraform die staat op met die werklike infrastruktuur van die hulpbronne wat reeds beskryf is.

Die hoofdoel van state is om 'n klomp voorwerpe van reeds geskepte hulpbronne te stoor om die konfigurasie van bygevoegde hulpbronne en voorwerpe te vergelyk om herhaalde skepping en veranderinge aan die platform te vermy.

By verstek word staatsinligting in die plaaslike terraform.tfstate-lêer gestoor, maar indien nodig is dit moontlik om afstandberging vir spanwerk te gebruik.

U kan ook huidige platformhulpbronne na die staat invoer om verder te kommunikeer met ander hulpbronne wat op hul beurt sonder die hulp van Terraform geskep is.  

2. Skep van infrastruktuur

Die komponente is uitgesorteer, met behulp van Terraform sal ons geleidelik 'n infrastruktuur met drie virtuele masjiene skep. Die eerste met die nginx-instaanbediener geïnstalleer, die tweede met lêerberging gebaseer op Nextcloud en die derde met CMS Bitrix.

Ons sal kode skryf en dit uitvoer deur ons voorbeeld te gebruik wolke op VMware vCloud Director. Ons gebruikers ontvang 'n rekening met Organisasie-administrateurregte. As jy 'n rekening met dieselfde regte in 'n ander VMware-wolk gebruik, kan jy die kode uit ons voorbeelde reproduseer. Gaan!

Kom ons skep eers 'n gids vir ons nuwe projek waarin lêers geplaas sal word wat die infrastruktuur beskryf.

mkdir project01

Vervolgens beskryf ons die infrastruktuurkomponente. Terraform skep verhoudings en verwerk lêers gebaseer op die beskrywing in die lêers. Die lêers self kan benoem word op grond van die doel van die blokke wat beskryf word, byvoorbeeld netwerk.tf - beskryf die netwerkparameters vir die infrastruktuur.

Om die komponente van ons infrastruktuur te beskryf, het ons die volgende lêers geskep:

Lys van lêers.

main.tf - beskrywing van parameters vir die virtuele omgewing - virtuele masjiene, virtuele houers;

network.tf - beskrywing van virtuele netwerkparameters en NAT- en Firewall-reëls;

veranderlikes.tf - lys van veranderlikes wat ons gebruik;

vcd.tfvars - projek veranderlike waardes vir die VMware vCloud Director module.

Die konfigurasietaal in Terraform is verklarend en die volgorde van die blokke maak nie saak nie, behalwe vir die voorsienerblokke, want in hierdie blok beskryf ons die opdragte wat uitgevoer moet word wanneer die infrastruktuur voorberei word en hulle sal in volgorde uitgevoer word.

Blokstruktuur.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Om blokke te beskryf, word sy eie programmeertaal HCL (HashiCorp Configuration Language) gebruik; dit is moontlik om die infrastruktuur met behulp van JSON te beskryf. Jy kan meer leer oor die sintaksis lees op die ontwikkelaar se webwerf.

Omgewingsveranderlike konfigurasie, veranderlikes.tf en vcd.tfvars

Kom ons skep eers twee lêers wat die lys van alle gebruikte veranderlikes en hul waardes vir die VMware vCloud Director-module beskryf. Kom ons skep eers die variables.tf-lêer.

Inhoud van die variables.tf-lêer.

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" {}

Veranderlike waardes wat ons van die verskaffer ontvang.

  • vcd_org_user — gebruikersnaam met organisasie-administrateurregte,

  • vcd_org_password — gebruikerswagwoord,

  • vcd_org — naam van die organisasie,

  • vcd_org_vdc — naam van die virtuele datasentrum,

  • vcd_org_url - API URL,

  • vcd_org_edge_name — naam van die virtuele router,

  • vcd_org_catalog — naam van die gids met virtuele masjien sjablone,

  • vcd_edge_external_ip — openbare IP-adres,

  • vcd_edge_external_network — naam van die eksterne netwerk,

  • vcd_org_hdd_sp — naam van die HDD-bergingsbeleid,

  • vcd_org_ssd_sp — naam van die SSD-bergingsbeleid.

En voer ons veranderlikes in:

  • vcd_edge_local_ip_nginx — IP-adres van die virtuele masjien met NGINX,

  • vcd_edge_local_ip_bitrix - IP-adres van die virtuele masjien met 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — IP-adres van die virtuele masjien met Nextcloud.

Met die tweede lêer skep en spesifiseer ons veranderlikes vir die VMware vCloud Director-module in die vcd.tfvars-lêer: Laat ons onthou dat ons in ons voorbeeld gebruik eie wolk mClouds, As jy met 'n ander verskaffer werk, gaan die waardes saam met hulle na. 

Inhoud van die vcd.tfvars-lêer.

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"

Netwerkkonfigurasie, netwerk.tf.

Die omgewingsveranderlikes is ingestel, nou sal ons die virtuele masjienverbindingskema opstel - ons sal 'n private IP-adres aan elke virtuele masjien toewys en Bestemming NAT gebruik om die poorte na die eksterne netwerk te "aanstuur". Om toegang tot bestuurpoorte te beperk, sal ons toegang slegs vir ons IP-adres stel.

Hoe om wolkinfrastruktuur met Terraform te bestuurNetwerkdiagram vir die Terraform-platform wat geskep word

Ons skep 'n virtuele organisatoriese netwerk met die naam net_lan01, die verstekpoort: 192.168.110.254, en ook met die adresspasie: 192.168.110.0/24.

Ons beskryf 'n virtuele netwerk.

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"

  }

}

Kom ons skep firewall-reëls wat virtuele masjiene toelaat om toegang tot die internet te kry. Binne hierdie blok sal alle virtuele hulpbronne in die wolk toegang tot die internet hê:

Ons beskryf die reëls vir VM-toegang tot die internet.

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]

}

Nadat ons die afhanklikheid vasgestel het dat ons na die verwerking van die vcdnetworkrouted.net-blok voortgaan om die vcdnsxvfirewallrule-blok op te stel, via hang af van. Ons gebruik hierdie opsie omdat sommige afhanklikhede implisiet in die konfigurasie herken kan word.

Vervolgens sal ons reëls skep wat toegang tot poorte vanaf die eksterne netwerk toelaat en ons IP-adres aandui om via SSH aan die bedieners te koppel. Enige internetgebruiker het toegang tot poorte 80 en 443 op die webbediener, en 'n gebruiker met 'n IP-adres van 90.1.15.1 het toegang tot die SSH-poorte van die virtuele bedieners.

Laat toegang tot poorte vanaf die eksterne netwerk toe.

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]

}

Ons skep Bron-NAT-reëls vir toegang tot die internet vanaf 'n plaaslike wolknetwerk:

Ons beskryf die Bron-NAT-reëls.

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]

}

En om die konfigurasie van die netwerkblok te voltooi, voeg ons Bestemming NAT-reëls by vir toegang tot dienste vanaf die eksterne netwerk:

Voeg Bestemming NAT-reëls by.

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]

}

Voeg 'n NAT-reël vir poortvertaling by die SSH-bediener onder 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]

}

Voeg 'n NAT-reël vir poortvertaling by die SSH-bediener met 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]

}

Voeg 'n NAT-reël vir poortvertaling by die SSH-bediener met 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]

}

Main.tf virtuele omgewing konfigurasie

Soos ons aan die begin van die artikel beplan het, sal ons drie virtuele masjiene skep. Hulle sal voorberei word deur gebruik te maak van "Gastaanpassing". Ons sal die netwerkparameters stel volgens die instellings wat ons gespesifiseer het, en die gebruikerwagwoord sal outomaties gegenereer word.

Kom ons beskryf die vApp waarin die virtuele masjiene geleë sal wees en hul konfigurasie.

Hoe om wolkinfrastruktuur met Terraform te bestuurVirtuele masjien konfigurasie

Kom ons skep 'n vApp-houer. Sodat ons dadelik die vApp en VM aan die virtuele netwerk kan koppel, voeg ons ook die depend_on parameter by:

Skep 'n houer

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

}

Kom ons skep 'n virtuele masjien met 'n beskrywing

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

}

}

Hoofparameters in die VM-beskrywing:

  • naam - naam van die virtuele masjien,

  • vappname - naam van die vApp waarby 'n nuwe VM bygevoeg moet word,

  • katalogusnaam / sjabloonnaam - katalogus naam en virtuele masjien sjabloon naam,

  • stoorprofiel - verstekbergingsbeleid.

Netwerk blok parameters:

  • tipe - tipe gekoppelde netwerk,

  • naam - watter virtuele netwerk om die VM aan te koppel,

  • isprimary - primêre netwerkadapter,

  • ipallocation_mode — HANDLEIDING / DHCP / POOL adres toewysingsmodus,

  • ip - IP-adres vir die virtuele masjien, ons sal dit met die hand spesifiseer.

override_template_skyf blok:

  • sizeinmb - selflaaiskyfgrootte vir die virtuele masjien

  • storage_profile — bergingsbeleid vir die skyf

Kom ons skep 'n tweede VM met 'n beskrywing van die Nextcloud-lêerberging

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 ]

}

In die afdeling vcdvminternal_disk sal ons 'n nuwe virtuele skyf beskryf wat aan die virtuele masjien gekoppel is.

Verduidelikings vir die vcdvminternaldisk blok:

  • bustipe - tipe skyfbeheerder

  • sizeinmb - skyfgrootte

  • busnommer / eenheidsnommer - verbindingsplek in die adapter

  • storage_profile — bergingsbeleid vir die skyf

Kom ons beskryf die nuutste VM op Bitrix

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

}

}

Opdatering van die bedryfstelsel en die installering van bykomende skrifte

Die netwerk word voorberei, die virtuele masjiene word beskryf. Voordat ons ons infrastruktuur invoer, kan ons aanvanklike voorsiening vooraf uitvoer deur voorsienerblokke te gebruik en sonder om Ansible te gebruik.

Kom ons kyk hoe om die bedryfstelsel op te dateer en die CMS Bitrix-installasieskrip uit te voer deur die voorsieningsblok te gebruik.

Kom ons installeer eers CentOS-opdateringspakkette.

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" ]

}

}

}

Aanwysing van komponente:

  • voorsiener "remote-exec" - koppel die afgeleë voorsieningsblok

  • In die verbindingsblok beskryf ons die tipe en parameters vir die verbinding:

  • tipe — protokol, in ons geval SSH;

  • gebruiker — gebruikersnaam;

  • wagwoord - gebruikerswagwoord. In ons geval wys ons na die parameter vcdvappvm.nginx.customization[0].admin_password, wat die gegenereerde wagwoord vir die stelselgebruiker stoor.

  • gasheer — eksterne IP-adres vir verbinding;

  • poort — poort vir verbinding, wat voorheen in die DNAT-instellings gespesifiseer is;

  • inlyn - lys die lys opdragte wat ingevoer sal word. Die opdragte sal in die volgorde ingevoer word soos in hierdie afdeling aangedui.

Kom ons voer as voorbeeld ook die 1C-Bitrix-installasieskrip uit. Die uitvoer van die skripuitvoeringsresultaat sal beskikbaar wees terwyl die plan loop. Om die skrip te installeer, beskryf ons eers die blok:

Kom ons beskryf die installasie van 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"

]

}

En ons sal onmiddellik die Bitrix-opdatering beskryf.

'n Voorbeeld van 1C-Bitrix-voorsiening.

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"

]

}

}

Belangrik! Die skrip sal dalk nie werk as jy nie SELinux vooraf deaktiveer nie! As jy 'n gedetailleerde artikel nodig het oor die installering en konfigurasie van CMS 1C-Bitrix met behulp van bitrix-env.sh, oo kan jy gebruik ons ​​blogartikel op die webwerf.

3. Infrastruktuur-inisialisering

Hoe om wolkinfrastruktuur met Terraform te bestuurInisialiseer modules en plugins

Vir werk gebruik ons ​​'n eenvoudige "gentleman's kit": 'n skootrekenaar met Windows 10 OS en 'n verspreidingskit van die amptelike webwerf terraform.io. Kom ons pak uit en inisialiseer met die opdrag: terraform.exe init

Nadat ons die rekenaar- en netwerkinfrastruktuur beskryf het, begin ons beplanning om ons konfigurasie te toets, waar ons kan sien wat geskep sal word en hoe dit met mekaar verbind sal word.

  1. Voer die opdrag uit - terraform plan -var-file=vcd.tfvars.

  2. Ons kry die resultaat - Plan: 16 to add, 0 to change, 0 to destroy. Dit wil sê, volgens hierdie plan sal 16 hulpbronne geskep word.

  3. Ons loods die plan op bevel - terraform.exe apply -var-file=vcd.tfvars.

Virtuele masjiene sal geskep word, en dan sal die pakkette wat ons gelys het binne die voorsiener-afdeling uitgevoer word - die bedryfstelsel sal opgedateer word en CMS Bitrix sal geïnstalleer word.

Ontvang verbindingsinligting

Nadat ons die plan uitgevoer het, wil ons data in teksvorm ontvang om aan die bedieners te koppel, hiervoor sal ons die uitvoerafdeling soos volg formateer:

output "nginxpassword" {

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

}

En die volgende uitvoer vertel ons die wagwoord vir die geskepde virtuele masjien:

Outputs: nginx_password = F#4u8!!N

Gevolglik kry ons toegang tot virtuele masjiene met 'n opgedateerde bedryfstelsel en vooraf geïnstalleerde pakkette vir ons verdere werk. Alles is gereed!

Maar wat as jy reeds bestaande infrastruktuur het?

3.1. Werkende Terraform met bestaande infrastruktuur

Dit is eenvoudig, jy kan huidige virtuele masjiene en hul vApp-houers invoer deur die invoeropdrag te gebruik.

Kom ons beskryf die vAPP-hulpbron en die virtuele masjien.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Die volgende stap is om die eienskappe van vApp-hulpbronne in die formaat in te voer vcdvapp.<vApp> <org>.<orgvdc>.<vApp>waar:

  • vApp - vApp naam;

  • org — naam van die organisasie;

  • org_vdc — naam van die virtuele datasentrum.

Hoe om wolkinfrastruktuur met Terraform te bestuurVoer tans vAPP-hulpbroneienskappe in

Kom ons voer die eienskappe van VM-hulpbronne in in die formaat: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, waarin:

  • VM - VM naam;

  • vApp - vApp naam;

  • org — naam van die organisasie;

  • orgvdc is die naam van die virtuele datasentrum.

Invoer was suksesvol

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.

Nou kan ons kyk na die nuwe ingevoerde hulpbron:

Ingevoerde hulpbron

> 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"

}

}

Nou is ons beslis gereed - ons is klaar met die laaste punt (invoer in bestaande infrastruktuur) en het al die hoofpunte van die werk met Terraform oorweeg. 

Die instrument blyk baie gerieflik te wees en laat jou toe om jou infrastruktuur as kode te beskryf, vanaf virtuele masjiene van een wolkverskaffer tot die beskrywing van die hulpbronne van netwerkkomponente.

Terselfdertyd maak onafhanklikheid van die omgewing dit moontlik om met plaaslike, wolkbronne te werk en selfs die platform te bestuur. En as daar geen ondersteunde platform is nie en jy wil 'n nuwe een byvoeg, kan jy jou eie verskaffer skryf en dit gebruik.

Bron: will.com

Voeg 'n opmerking