Hur man hanterar molninfrastruktur med Terraform

Hur man hanterar molninfrastruktur med Terraform

I den hĂ€r artikeln kommer vi att gĂ„ igenom vad Terraform bestĂ„r av och steg för steg lansera vĂ„r egen infrastruktur i molnet med VMware — vi kommer att förbereda tre VM för olika Ă€ndamĂ„l: proxy, fillagring och CMS.

Allt i detalj och i tre steg:

1. Terraform — beskrivning, fördelar och komponenter

Terraform Àr ett IaC (Infrastructure-as-Code) verktyg för skapande och hantering av virtuell infrastruktur med hjÀlp av kod.

Vid arbete med verktyget har vi noterat flera fördelar:

  • Hastighet för att distribuera nya tenants (anvĂ€ndarspecifika virtuella miljöer). Vanligtvis, ju fler nya kunder, desto fler 'klick' krĂ€vs av teknisk support för att publicera nya resurser. Med Terraform kan anvĂ€ndare Ă€ndra parametrar för virtuella maskiner (t.ex. automatiskt stĂ€nga av OS och öka partitionen av den virtuella disken) utan teknisk supports hjĂ€lp och utan att stĂ€nga av maskinen.

  • Omedelbar kontroll av aktiveringsplanen för den nya tenanten. Genom att anvĂ€nda beskrivningen av infrastrukturens kod kan vi omedelbart kontrollera vad och i vilken ordning som kommer att lĂ€ggas till, samt vilket slutligt tillstĂ„nd en viss virtuell maskin eller virtuell nĂ€tverk med kopplingar till virtuella maskiner kommer att ha.

  • Möjlighet att beskriva de flesta populĂ€ra molnplattformar. Du kan anvĂ€nda verktyget frĂ„n Amazon och Google Cloud, till privata plattformar baserade pĂ„ VMware vCloud Director som erbjuder tjĂ€nster inom IaaS, SaaS och PaaS-lösningar.

  • Hantera flera molnleverantörer och distribuera infrastrukturen mellan dem för att öka tillförlitligheten, med hjĂ€lp av en och samma konfiguration för att skapa, diagnostisera och hantera molnresurser.

  • AnvĂ€ndarvĂ€nlighet för att skapa demostĂ€ll för testning och felsökning av programvara. Du kan skapa och överföra stĂ€ll för testavdelningen, parallellt kontrollera programvaran i olika miljöer, samt omedelbart Ă€ndra och ta bort resurser med bara en plan för resursbyggande

Terraform "terrariet"

Vi har kort berÀttat om fördelarna med verktyget, nu gÄr vi igenom dess komponenter

Providers (leverantörer). 

I Terraform kan nÀstan vilken typ av infrastruktur som helst representeras som en resurs. Kopplingen mellan resurser och plattformens API sÀkerstÀlls av providers-moduler som möjliggör skapande av resurser inom en specifik plattform, som Azure eller VMware vCloud Director.

Inom projektet kan du interagera med olika leverantörer pÄ olika plattformar.

Resurser (beskrivning av resurser).

Beskrivningen av resurser gör det möjligt att hantera plattformskomponenter, som virtuella maskiner eller nÀtverk. 

Du kan sjÀlv skapa en beskrivning av resurser för VMware vCloud Director och anvÀnda denna beskrivning för att skapa resurser hos vilken hostingleverantör som helst som anvÀnder vCloud Director. Du behöver bara ersÀtta autentiseringsparametrarna och nÀtverksanslutningsparametrarna för den nödvÀndiga hostingleverantören.

Provisioners.

Denna komponent möjliggör initial installation och underhÄll av operativsystemet efter skapande av virtuella maskiner. NÀr du har skapat resursen för den virtuella maskinen kan du med hjÀlp av provisioners konfigurera och ansluta via SSH, utföra en uppdatering av operativsystemet samt ladda upp och köra ett skript. 

Input- och Output-variabler.

Input-variabler Àr ingÄngsvariabler för alla typer av block. 

Output-variabler gör det möjligt att spara vÀrden efter skapandet av resurser och kan anvÀndas som ingÄngsvariabler i andra moduler, sÄsom blocket Provisioners.

States (tillstÄnd).

States-filer lagrar information om konfigurationen av leverantörens resurser. Vid första skapandet av plattformen finns det inga uppgifter om resurser, och innan varje operation uppdaterar Terraform tillstÄndet med den faktiska infrastrukturen för redan beskrivna resurser.

Huvudsyftet med tillstÄnd Àr att spara kopplingen av objekt för redan skapade resurser för att jÀmföra konfigurationen av de tillagda resurserna och objekten, för att undvika att skapa om och Àndra plattformen.

Standardinformationen om tillstÄnd lagras i en lokal fil terraform.tfstate, men vid behov finns det möjlighet att anvÀnda fjÀrrlagring för att jobba i team.

Du kan ocksÄ importera nuvarande plattformsresurser till tillstÄndet för att interagera med andra resurser som i sin tur skapades utan hjÀlp av Terraform.  

2. Skapa infrastruktur

Komponenterna har tagits isÀr, nu kommer vi steg för steg att skapa infrastrukturen med hjÀlp av Terraform med tre virtuella maskiner. Den första med den installerade proxy-servern nginx, den andra med lagringslösningen Nextcloud och den tredje med CMS Bitrix.

Vi kommer att skriva och köra kod med hjÀlp av vÄrt moln pÄ VMware vCloud Director. AnvÀndarna fÄr ett konto med rÀttigheter som Organisation Administrator, om du anvÀnder ett konto med samma rÀttigheter pÄ ett annat VMware-moln kan du Äterskapa koden frÄn vÄra exempel. LÄt oss börja!

Först skapar vi en katalog för vÄrt nya projekt dÀr filerna med infrastrukturen kommer att placeras.

mkdir project01

Sedan beskriver vi infrastrukturkomponenterna. Terraform skapar kopplingar och behandlar filer baserat pĂ„ beskrivningen i dessa filer. SjĂ€lva filerna kan namnges utifrĂ„n syftet med de beskrivna blocken, till exempel network.tf – beskriver nĂ€tverksparametrar för infrastrukturen.

För att beskriva komponenterna i vÄr infrastruktur har vi skapat följande filer:

Filövervakningslista.

main.tf — beskrivning av parametrarna för den virtuella miljön — virtuella maskiner, virtuella containrar;

network.tf — beskrivning av parametrarna för det virtuella nĂ€tverket och regler för NAT, brandvĂ€gg;

variables.tf — lista över variabler som vi anvĂ€nder;

vcd.tfvars — vĂ€rden för projektvariabler för modulen VMware vCloud Director.

KonfigurationssprÄket i Terraform Àr deklarativt och ordningen pÄ blocken spelar ingen roll, förutom för provisionerblocken, dÀr vi beskriver kommandon för att utföra vid förberedelsen av infrastrukturen och de kommer att utföras i ordning.

Blockstruktur.

"" "" {

# Block body

= # Argument

}

För att beskriva blocken anvÀnds ett eget programmeringssprÄk HCL (HashiCorp Configuration Language), det Àr ocksÄ möjligt att beskriva infrastrukturen med JSON. Mer om syntaxen kan du lÀsa pÄ utvecklarens webbplats.

Konfiguration av miljövariabel, variables.tf och vcd.tfvars

Först skapar vi tvÄ filer som beskriver listan över alla variabler som anvÀnds och deras vÀrden för modulen VMware vCloud Director. Först kommer vi att skapa filen variables.tf.

InnehÄllet i filen variables.tf.

variabel "vcd_org_user" {

  beskrivning = "vCD HyresgÀst AnvÀndare"

}

variabel "vcd_org_password" {

  beskrivning = "vCD HyresgÀst Lösenord"

}

variabel "vcd_org" {

  beskrivning = "vCD HyresgÀst Organisation"

}

variabel "vcd_org_vdc" {

  beskrivning = "vCD HyresgÀst VDC"

}

variabel "vcd_org_url" {

  beskrivning = "vCD HyresgÀst URL"

}

variabel "vcd_org_max_retry_timeout" {

  standard = "60"

}

variabel "vcd_org_allow_unverified_ssl" {

  standard = "true"

}

variabel "vcd_org_edge_name" {

  beskrivning = "vCD kantnamn"

}

variabel "vcd_org_catalog" {

  beskrivning = "vCD offentlig katalog"

}

variabel "vcd_template_os_centos7" {

  beskrivning = "OS CentOS 7"

  standard = "CentOS7"

}

variabel "vcd_org_ssd_sp" {

  beskrivning = "Lagerriktlinjer"

  standard = "Guld Lagringspolicy"

}

variabel "vcd_org_hdd_sp" {

  beskrivning = "Lagerriktlinjer"

  standard = "Brons Lagringspolicy"

}

variabel "vcd_edge_local_subnet" {

  beskrivning = "OrganisationsnÀtverksunder"

}

variabel "vcd_edge_external_ip" {

  beskrivning = "Extern offentlig IP"

}

variabel "vcd_edge_local_ip_nginx" {}

variabel "vcd_edge_local_ip_bitrix" {}

variabel "vcd_edge_local_ip_nextcloud" {}

variabel "vcd_edge_external_network" {}

Variablerna som vi fÄr frÄn leverantören.

  • vcd_org_user — anvĂ€ndarnamn med Organisation Administrator rĂ€ttigheter,

  • vcd_org_password — anvĂ€ndarens lösenord,

  • vcd_org — organisationsnamn,

  • vcd_org_vdc — namn pĂ„ virtuell datacenter,

  • vcd_org_url — API URL,

  • vcd_org_edge_name — namn pĂ„ den virtuella routern,

  • vcd_org_catalog — namn pĂ„ katalogen med mallar för virtuella maskiner,

  • vcd_edge_external_ip — offentlig IP-adress,

  • vcd_edge_external_network — namn pĂ„ det externa nĂ€tverket,

  • vcd_org_hdd_sp — namn pĂ„ HDD lagringspolicy,

  • vcd_org_ssd_sp — namn pĂ„ SSD lagringspolicy.

Och vi definierar vÄra egna variabler:

  • vcd_edge_local_ip_nginx — IP-adress för den virtuella maskinen med NGINX,

  • vcd_edge_local_ip_bitrix — IP-adress för den virtuella maskinen med 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — IP-adress för den virtuella maskinen med Nextcloud.

I den andra filen skapar vi och anger variabler för modulen VMware vCloud Director i filen vcd.tfvars: Vi pÄminner om att vi i vÄrt exempel anvÀnder vÄrt egna moln mClouds, om du arbetar med en annan leverantör, kontrollera vÀrdena med dem. 

InnehÄllet i filen 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 = "Guld Lagringspolicy"

vcd_org_hdd_sp = "Brons Lagringspolicy"

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"

NĂ€tverkskonfiguration, network.tf.

Miljövariablerna Ă€r instĂ€llda, nu konfigurerar vi anslutningen för virtuella maskiner — vi kommer att tilldela varje virtuell maskin ett privat IP-adress och via Destination NAT "öppna" portar till det externa nĂ€tverket. För att begrĂ€nsa Ă„tkomsten till administrationsportarna kommer vi att stĂ€lla in Ă„tkomst endast för vĂ„r IP-adress.

Hur man hanterar molninfrastruktur med TerraformNÀtverksschema för den skapade Terraform-plattformen

Vi skapar ett virtuellt organiskt nÀtverk med namnet net_lan01, standardgateway: 192.168.110.254, samt med adressutrymmet: 192.168.110.0/24.

Vi beskriver det virtuella nÀtverket.

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"

  }

}

Vi skapar regler för brandvÀggen som tillÄter virtuella maskiner att fÄ Ätkomst till Internet. Inom detta block kommer alla virtuella resurser i molnet att ha Ätkomst till Internet:

Vi beskriver reglerna för Ätkomst till VM pÄ 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]

}

Genom att stÀlla in beroendet, sÄ att efter bearbetningen av blocket vcdnetworkrouted.net, börjar vi konfigurera blocket vcdnsxvfirewallrule, med hjÀlp av dependson. Vi anvÀnder detta alternativ eftersom vissa beroenden kan uppfattas implicit i konfigurationen.

DÀrefter ska vi skapa regler som tillÄter Ätkomst till portar frÄn det externa nÀtverket och ange vÄr IP-adress för att ansluta via SSH till servrar. Alla anvÀndare pÄ Internet har tillgÄng till portar 80 och 443 pÄ webbservern och en anvÀndare med IP-adressen 90.1.15.1 har tillgÄng till SSH-portarna för de virtuella servrarna.

Vi tillÄter Ätkomst till portar frÄn det externa nÀtverket.

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]

}

Vi skapar regler för Source NAT för Ätkomst till Internet frÄn det lokala molnnÀtverket:

Vi beskriver reglerna för 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]

}

Och avslutningsvis, i konfigurationen av nÀtverksblocket lÀgger vi till regler för Destination NAT för Ätkomst till tjÀnster frÄn det externa nÀtverket:

Vi lÀgger till regler för Destination 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]

}

Vi lÀgger till en NAT-regel för portöversÀttning till SSH-servern under 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]

}

Vi lÀgger till en NAT-regel för portöversÀttning till SSH-servern med 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]

}

Vi lÀgger till en NAT-regel för portöversÀttning till SSH-servern med 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]

}

Konfiguration av den virtuella miljön main.tf

Som vi planerade i början av artikeln, ska vi skapa tre virtuella maskiner. De kommer att förberedas med "Guest Customization". NÀtverksinstÀllningarna kommer att anges enligt de instÀllningar vi angav, och anvÀndarens lösenord genereras automatiskt.

Vi beskriver vApp dÀr de virtuella maskinerna och deras konfiguration kommer att finnas.

Hur man hanterar molninfrastruktur med TerraformKonfiguration av de virtuella maskinerna

Vi skapar en vApp-container. För att vi omedelbart ska kunna koppla vApp och VM till det virtuella nÀtverket lÀgger vi Àven till parametern depends_on:

Vi skapar en container

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

}

Vi skapar en virtuell maskin med beskrivning

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

}

}

Huvudparametrar i beskrivningen av VM:

  • name — namn pĂ„ den virtuella maskinen,

  • vappname — namn pĂ„ vApp som ska lĂ€gga till en ny VM,

  • catalogname / templatename — namn pĂ„ katalog och namn pĂ„ mallen för den virtuella maskinen,

  • storageprofile — standard lagringspolicy.

Parametrar för nÀtverksblocket:

  • type — typ av ansluten nĂ€tverk,

  • name — vilken virtuell nĂ€tverk maskinen ska kopplas till,

  • isprimary — huvudnĂ€tverksadapter,

  • ipallocation_mode — adressallokeringslĂ€ge MANUAL / DHCP / POOL,

  • ip — IP-adress för den virtuella maskinen, vi anger den manuellt.

Blocket override_template_disk:

  • sizeinmb — storlek pĂ„ boot-disk för den virtuella maskinen

  • storage_profile — lagringspolicy för disken

Vi skapar en andra VM med beskrivning av Nextcloud-lagring

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 ]

}

I sektionen vcdvminternal_disk beskriver vi en ny virtuell disk som ansluts till den virtuella maskinen.

Förklaring av blocket vcdvminternaldisk:

  • bustype — typ av diskcontroller

  • sizeinmb — diskens storlek

  • busnumber / unitnumber — anslutningsplats i adaptern

  • storage_profile — lagringspolicy för disken

Vi beskriver den sista VM för 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

}

}

Uppdatering av OS och installation av ytterligare skript

NÀtverket Àr klart, de virtuella maskinerna Àr beskrivna. Innan vi importerar vÄr infrastruktur kan vi göra en preliminÀr provisioning med hjÀlp av provisioners-block och utan att anvÀnda Ansible.

Vi kommer att se hur man uppdaterar OS och startar installationsskriptet för CMS Bitrix med hjÀlp av provisioner-blocket.

Först installerar vi uppdateringspaketen för 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" ]

}

}

}

Indikering av komponenterna:

  • provisioner «remote-exec» — ansluter blocket för fjĂ€rrprovisioning

  • I blocket connection beskriver vi typ och parametrar för anslutning:

  • type — protokollet, i vĂ„rt fall SSH;

  • user — anvĂ€ndarnamn;

  • password — anvĂ€ndarens lösenord. I vĂ„rt fall hĂ€nvisar vi till parametern vcdvappvm.nginx.customization[0].admin_password, som lagrar det genererade lösenordet för systemanvĂ€ndaren.

  • host — extern IP-adress för anslutning;

  • port — port för anslutning, som vi tidigare angav i DNAT-instĂ€llningarna;

  • inline — vi upprĂ€ttar en lista över kommandon som ska anges. Kommandona kommer att anges i ordning, sĂ„som angivet i denna sektion.

Som ett exempel kommer vi att köra installationsskriptet för 1C-Bitrix. Resultatet av skripts utförande kommer att vara tillgÀngligt under planens körning. För att installera skriptet beskriver vi först blocket:

Vi beskriver installationen av 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"

]

}

Och vi beskriver omedelbart uppdateringen av Bitrix.

Exempel pÄ provisioning för 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"

]

}

}

Viktigt! Skriptet kan misslyckas om SELinux inte inaktiveras i förvÀg! Om du behöver en detaljerad artikel om installation och konfiguration av CMS 1C-Bitrix med hjÀlp av bitrix-env.sh, kan du anvÀnda vÄr artikel i bloggen pÄ webbplatsen.

3. Initiering av infrastrukturen

Hur man hanterar molninfrastruktur med TerraformInitiering av moduler och plugins

För arbetet anvÀnder vi en enkel "gentlemannakitt": en laptop med Windows 10 och en distribution frÄn den officiella webbplatsen terraform.io. Vi packar upp och initierar med kommandot: terraform.exe init

Efter beskrivningen av berÀknings- och nÀtverksinfrastrukturen kör vi planering för att kontrollera vÄr konfiguration, dÀr vi kan se vad som kommer att skapas och hur de hÀnger ihop.

  1. Vi kör kommandot - terraform plan -var-file=vcd.tfvars.

  2. Vi fÄr resultatet - Plan: 16 att lÀgga till, 0 att Àndra, 0 att förstöra. Det vill sÀga enligt denna plan kommer 16 resurser att skapas.

  3. Vi kör planen med kommandot - terraform.exe apply -var-file=vcd.tfvars.

Virtuella maskiner kommer att skapas, och sedan körs de paket vi angav inom provisionsavsnittet — operativsystemet kommer att uppdateras och CMS Bitrix installeras.

Mottagning av data för anslutning

Efter att planen har genomförts vill vi fÄ textdata för att ansluta till servrarna, dÀrför formulerar vi output-avsnittet pÄ följande sÀtt:

output "nginxpassword" {

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

}

Och följande output informerar oss om lösenordet för den skapade virtuella maskinen:

Outputs: nginx_password = F#4u8!!N

Slutligen fÄr vi tillgÄng till de virtuella maskinerna med det uppdaterade operativsystemet och förinstallerade paket för vÄrt fortsatta arbete. Allt Àr klart!

Men vad hÀnder om du redan har en befintlig infrastruktur?

3.1. Terraform-working med en redan existerande infrastruktur

Det Àr enkelt, du kan importera de nuvarande virtuella maskinerna och deras vApp-containrar med kommandot import.

LÄt oss beskriva vAPP-resursen och den virtuella maskinen.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

NÀsta steg Àr att importera resurser vApps egenskaper i formatet vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, dÀr:

  • vApp — namnet pĂ„ vApp;

  • org — namnet pĂ„ organisationen;

  • org_vdc — namnet pĂ„ det virtuella datacentret.

Hur man hanterar molninfrastruktur med TerraformImport av vAPP-resursens egenskaper

Vi utför import av VM-resursernas egenskaper i formatet: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, dÀr:

  • VM — namnet pĂ„ VM;

  • vApp — namnet pĂ„ vApp;

  • org — namnet pĂ„ organisationen;

  • orgvdc — namnet pĂ„ det virtuella datacentret.

Importen var framgÄngsrik

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

vcd_vapp_vm.Zabbix: Importerar frÄn ID "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Import förberett!

Förberedde vcd_vapp_vm för import

vcd_vapp_vm.Zabbix: Uppdaterar tillstÄnd... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Import lyckades!

De resurser som importerades visas ovan. Dessa resurser finns nu i
ditt Terraform-tillstÄnd och kommer hÀdanefter att hanteras av Terraform.

Nu kan vi titta pÄ den nya importerade resursen:

Importerad resurs

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

metadata = {}

name = "Övervakning"

org = "mClouds"

status = 4

status_text = "PÅSLAGEN"

vdc = "mClouds"

}




# vcd_vapp_vm.Zabbix:

resource "vcd_vapp_vm" "Zabbix" {

dator_namn = "Zabbix"

cpu_kÀrnor = 1

cpus = 2

exponera_hÄrdvaru_virtualisering = false

guest_properties = {}

hÄrdvaru_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"

intern_disk = [

{

bus_number = 0

bus_type = "paravirtual"

disk_id = "2000"

iops = 0

size_i_mb = 122880

lagrings_profil = "Guld Lagringspolicy"

tunn_provisionerad = true

unit_number = 0

},

]

minne = 8192

metadata = {}

name = "Zabbix"

org = "mClouds"

os_typ = "centos8_64Guest"

lagrings_profil = "Guld Lagringspolicy"

vapp_namn = "Övervakning"

vdc = "mClouds"

anpassning {

tillÄt_lokal_admin_lösenord = true

auto_generera_lösenord = true

Ă€ndra_sid = false

aktiverad = false

tvinga = false

ansluta_domÀn = false

ansluta_org_domÀn = false

mÄste_byta_lösenord_vid_första_inloggning = false

antal_auto_inloggningar = 0

}

network {

adapter_typ = "VMXNET3"

ip_tilldelning = "DHCP"

Àr_primÀr = true

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

namn = "MCLOUDS-LAN01"

typ = "org"

}

}

Nu Ă€r det verkligen klart — vi har avslutat det sista momentet (import i en befintlig infrastruktur) och gĂ„tt igenom alla viktiga punkter för att arbeta med Terraform. 

Verktyget visade sig vara vÀldigt anvÀndbart och möjliggör att beskriva din infrastruktur som kod, frÄn virtuella maskiner hos en molnleverantör till beskrivningar av nÀtverkskomponenter.

Denna oberoende frÄn miljö gör det möjligt att arbeta med lokala och molnresurser, samt att hantera plattformen. Om det saknas en stödd plattform och man vill lÀgga till en ny, kan man skriva sin egen leverantör och anvÀnda den.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster