Giunsa Pagdumala ang Cloud Infrastructure gamit ang Terraform

Giunsa Pagdumala ang Cloud Infrastructure gamit ang Terraform

Niini nga artikulo, atong tan-awon kung unsa ang gilangkuban sa Terraform, ug naglansad usab sa atong kaugalingon nga imprastraktura sa mga yugto sa panganod uban sa VMware - pag-andam sa tulo ka mga VM alang sa lainlaing mga katuyoan: proxy, pagtipig sa file ug CMS.

Ang tanan sa detalye ug sa tulo ka yugto:

1. Terraform - paghulagway, mga benepisyo ug mga sangkap

Ang Terraform usa ka IaC (Infrastructure-as-Code) nga himan alang sa pagtukod ug pagdumala sa virtual nga imprastraktura gamit ang code.

Sa pagtrabaho uban sa himan, nakamatikod kami daghang mga bentaha:

  • Ang katulin sa pagpadala sa mga bag-ong saop (custom nga virtual nga palibot). Kasagaran, ang mas daghang bag-ong mga kliyente, mas daghang "pag-klik" ang kinahanglan nga buhaton sa mga kawani sa teknikal nga suporta aron mamantala ang mga bag-ong kapanguhaan. Uban sa Terraform, ang mga tiggamit mahimo’g magbag-o sa mga parameter sa mga virtual nga makina (pananglitan, awtomatiko nga isira ang OS ug dugangan ang partisyon sa virtual disk) nga wala’y pag-apil sa teknikal nga suporta ug pagsira mismo sa makina.

  • Diha-diha nga pag-verify sa plano sa pagpaaktibo bag-ong tenant. Gamit ang paghulagway sa kodigo sa imprastraktura, mahimo natong susihon dayon kung unsa ang idugang ug kung unsang pagkasunud-sunod, ingon man kung unsang katapusan nga estado kini o kana nga virtual machine o virtual network nga adunay koneksyon sa mga virtual machine.

  • Abilidad sa paghulagway sa labing popular nga cloud platform. Mahimo nimong gamiton ang himan gikan sa Amazon ug Google Cloud ngadto sa pribadong mga plataporma base sa VMware vCloud Director nga nagtanyag sa IaaS, SaaS ug PaaS nga mga solusyon.

  • Pagdumala sa daghang mga cloud providers ug pag-apud-apod sa mga imprastraktura sa taliwala nila aron mapauswag ang pagtugot sa sayup, gamit ang usa ka pagsumpo sa paghimo, pagdayagnos ug pagdumala sa mga kapanguhaan sa panganod.

  • Sayon nga paggamit alang sa paghimo og mga demo stand para sa software testing ug debugging. Makahimo ka ug makabalhin ug mga bangko alang sa departamento sa pagsulay, magsulay sa software nga managsama sa lainlaing mga palibot, ug dayon magbag-o ug magtangtang sa mga kapanguhaan pinaagi sa paghimo usa ra ka plano sa pagtukod sa kapanguhaan.

"Terrarium" nga Terraform

Kita sa makadiyot naghisgot bahin sa mga bentaha sa himan, karon atong analisahon kini ngadto sa mga sangkap niini

Mga tighatag (providers). 

Sa Terraform, halos bisan unsang matang sa imprastraktura mahimong irepresentar isip usa ka kapanguhaan. Ang koneksyon tali sa mga kahinguhaan ug sa platform sa API gihatag sa mga module sa provider, nga nagtugot kanimo sa paghimo og mga kapanguhaan sulod sa usa ka piho nga plataporma, sama sa Azure o VMware vCloud Director.

Sulod sa usa ka proyekto, mahimo ka nga makig-uban sa lainlaing mga provider sa lainlaing mga platform.

Mga kapanguhaan (paghulagway sa mga kapanguhaan).

Ang paghulagway sa mga kapanguhaan nagtugot kanimo sa pagdumala sa mga sangkap sa plataporma, sama sa mga virtual machine o network. 

Makahimo ka og usa ka paghulagway sa kapanguhaan alang sa usa ka provider sa VMware vCloud Director sa imong kaugalingon ug gamiton kini nga paghulagway aron makahimo og mga kapanguhaan alang sa bisan unsang hosting provider nga naggamit sa vCloud Director. Kinahanglan ra nimo nga usbon ang mga parameter sa pag-authenticate ug mga parameter sa koneksyon sa network sa gikinahanglan nga taghatag sa host

Mga tigtagana.

Kini nga sangkap nagpaposible sa paghimo sa mga operasyon alang sa inisyal nga pag-instalar ug pagmentinar sa operating system pagkahuman sa paghimo sa mga virtual machine. Sa higayon nga nakahimo ka og virtual machine nga kapanguhaan, mahimo nimong gamiton ang mga provisioner aron ma-configure ug makonektar pinaagi sa SSH, mag-upgrade sa operating system, ug mag-download ug mag-execute og script. 

Mga Variable Input ug Output.

Mga variable sa input - mga variable sa input alang sa bisan unsang mga tipo sa block. 

Gitugotan sa mga variable sa output ang mga kantidad nga matipig pagkahuman sa paghimo sa kapanguhaan ug mahimong magamit ingon mga variable sa input sa ubang mga module, sama sa block sa Provisioners.

estado.

Ang mga file sa estado nagtipig og impormasyon bahin sa pag-configure sa kahinguhaan sa platform sa provider. Sa diha nga ang plataporma unang gibuhat, walay impormasyon mahitungod sa mga kapanguhaan, ug sa wala pa ang bisan unsa nga operasyon, Terraform update sa estado uban sa tinuod nga imprastraktura sa na gihulagway nga mga kapanguhaan.

Ang nag-unang katuyoan sa mga estado mao ang pagluwas sa usa ka hugpong sa mga butang nga nahimo na nga mga kapanguhaan alang sa pagtandi sa pagsumpo sa dugang nga mga kapanguhaan ug mga butang aron malikayan ang paghimo pag-usab ug mga pagbag-o sa plataporma.

Ang impormasyon sa estado gitipigan sa lokal sa terraform.tfstate file pinaagi sa default, apan mahimo nimong gamiton ang layo nga pagtipig alang sa pagtrabaho sa grupo kung gikinahanglan.

Mahimo usab nimo nga i-import ang kasamtangan nga mga kapanguhaan sa plataporma ngadto sa estado aron dugang nga makig-uban sa ubang mga kapanguhaan, nga sa baylo gimugna nga walay tabang sa Terraform.  

2. Pagmugna sa imprastraktura

Ang mga sangkap gibungkag, karon sa tabang sa Terraform hinayhinay nga maghimo usa ka imprastraktura nga adunay tulo nga mga virtual machine. Ang una nga adunay nginx proxy server nga na-install, ang ikaduha nga adunay Nextcloud based file storage ug ang ikatulo nga adunay Bitrix CMS.

Isulat namon ang code ug ipatuman kini gamit ang panig-ingnan sa among mga panganod sa VMware vCloud Director. Uban kanamo, ang mga tiggamit makakuha usa ka account nga adunay mga katungod sa Administrator sa Organisasyon, kung mogamit ka usa ka account nga adunay parehas nga mga katungod sa lain nga panganod sa VMware, mahimo nimong kopyahon ang code gikan sa among mga pananglitan. Lakaw!

Una, maghimo kita og direktoryo alang sa atong bag-ong proyekto, nga maglangkob sa mga file nga naghulagway sa imprastraktura.

mkdir project01

Dayon among gihulagway ang mga sangkap sa imprastraktura. Ang Terraform nagmugna og mga link ug nagproseso sa mga file base sa paghulagway sa mga file. Ang mga file mismo mahimong hinganlan base sa katuyoan sa gihulagway nga mga bloke, pananglitan, network.tf - naghulagway sa mga parameter sa network alang sa imprastraktura.

Aron ihulagway ang mga sangkap sa among imprastraktura, among gihimo ang mga musunud nga file:

Listahan sa mga file.

main.tf - paghulagway sa mga parameter alang sa virtual nga palibot - mga virtual machine, virtual nga mga sudlanan;

network.tf - paghulagway sa mga parameter sa virtual network ug NAT, mga lagda sa Firewall;

variables.tf - usa ka lista sa mga variable nga among gigamit;

vcd.tfvars - project variable values ​​​​para sa VMware vCloud Director module.

Ang configuration nga pinulongan sa Terraform kay deklaratibo ug ang han-ay sa mga bloke dili igsapayan, gawas sa provisioner blocks, tungod kay sa niini nga block, atong gihulagway ang mga sugo nga ipatuman sa dihang mag-andam sa imprastraktura ug kini ipatuman sa han-ay.

Istruktura sa block.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Ang mga bloke gihulagway gamit ang ilang kaugalingong programming language HCL (HashiCorp Configuration Language), posible nga ihulagway ang imprastraktura gamit ang JSON. Alang sa dugang nga impormasyon sa syntax, tan-awa basaha sa site sa developer.

Environment variable configuration, variables.tf ug vcd.tfvars

Una, maghimo kita og duha ka mga file nga naghulagway sa lista sa tanang mga variable nga gigamit ug ang ilang mga bili alang sa module sa VMware vCloud Director. Una, atong himoon ang variables.tf file.

Ang sulod sa variables.tf file.

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

Variable values ​​nga atong nadawat gikan sa provider.

  • vcd_org_user - username nga adunay katungod sa Administrator sa Organisasyon,

  • vcd_org_password - password sa user,

  • vcd_org - ngalan sa organisasyon,

  • vcd_org_vdc - ang ngalan sa virtual data center,

  • vcd_org_url - API URL,

  • vcd_org_edge_name - ngalan sa virtual nga router,

  • vcd_org_catalog - ang ngalan sa direktoryo nga adunay mga template sa virtual machine,

  • vcd_edge_external_ip - publikong IP adres,

  • vcd_edge_external_network - ang ngalan sa eksternal nga network,

  • vcd_org_hdd_sp - ngalan sa polisiya sa pagtipig sa HDD,

  • Ang vcd_org_ssd_sp mao ang ngalan sa polisiya sa pagtipig sa SSD.

Ug isulod ang among mga variable:

  • vcd_edge_local_ip_nginx - IP address sa virtual machine nga adunay NGINX,

  • vcd_edge_local_ip_bitrix - IP address sa virtual machine nga adunay 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud - IP address sa virtual machine nga adunay Nextcloud.

Sa ikaduha nga file, naghimo ug nagtino kami sa mga variable para sa module sa VMware vCloud Director sa vcd.tfvars file: Hinumdomi nga sa among panig-ingnan among gigamit kaugalingon nga cloud mClouds, kung nagtrabaho ka sa laing provider, susiha ang mga bili uban kaniya. 

Ang sulod sa vcd.tfvars file.

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"

Konfigurasyon sa network, network.tf.

Gitakda ang mga variable sa palibot, karon atong i-configure ang pamaagi sa koneksyon sa virtual machine - mag-assign og pribado nga IP address sa matag virtual machine ug gamiton ang Destination NAT aron "ipasa" ang mga pantalan sa eksternal nga network. Aron mapugngan ang pag-access sa mga pantalan sa pagdumala, magbutang kami og access alang lamang sa among IP address.

Giunsa Pagdumala ang Cloud Infrastructure gamit ang TerraformNetwork diagram alang sa gimugna nga Terraform nga plataporma

Naghimo kami usa ka virtual nga organisasyonal nga network nga adunay ngalan nga net_lan01, ang default gateway: 192.168.110.254, ug uban usab ang address space: 192.168.110.0/24.

Ihulagway ang virtual network.

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"

  }

}

Maghimo kita og mga lagda alang sa firewall, nga nagtugot kanimo sa paghatag sa mga virtual machine nga adunay access sa Internet. Sulod niini nga block, ang tanan nga virtual nga mga kapanguhaan sa panganod adunay access sa Internet:

Gihulagway namo ang mga lagda alang sa pag-access sa VM sa 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]

}

Sa pag-establisar sa pagsalig nga human sa pagproseso sa vcdnetworkrouted.net block, kita magpadayon sa pag-configure sa vcdnsxvfirewallrule block, pinaagi sa paggamit depende sa. Gigamit namo kini nga opsyon tungod kay ang pipila ka mga dependency mahimong mailhan sa hingpit sa configuration.

Sunod, maghimo kami mga lagda nga nagtugot sa pag-access sa mga pantalan gikan sa eksternal nga network ug ipiho ang among IP address alang sa pagkonektar pinaagi sa SSH sa mga server. Bisan kinsa nga tiggamit sa Internet adunay access sa mga port 80 ug 443 sa web server, ug ang usa ka user nga adunay IP address 90.1.15.1 adunay access sa mga SSH port sa virtual server.

Gitugotan namon ang pag-access sa mga pantalan gikan sa gawas nga network.

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]

}

Paghimo Mga lagda sa Source NAT alang sa pag-access sa Internet gikan sa cloud local area network:

Ihulagway ang Source NAT nga mga lagda.

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]

}

Ug sa pagtapos sa network block configuration, among idugang ang Destination NAT rules para sa pag-access sa mga serbisyo gikan sa external network:

Pagdugang mga lagda sa 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]

}

Pagdugang usa ka lagda sa NAT aron mahubad ang mga pantalan sa SSH server sa ilawom sa 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]

}

Nagdugang kami usa ka lagda sa NAT alang sa paghubad sa pantalan sa SSH server nga adunay 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]

}

Pagdugang usa ka lagda sa NAT aron mahubad ang mga pantalan sa SSH server nga adunay 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]

}

Virtual environment configuration main.tf

Sama sa among giplano sa sinugdanan sa artikulo, maghimo kami og tulo ka virtual nga makina. Andam sila sa "Guest Customization". Isulat namon ang mga parameter sa network sumala sa mga setting nga among gitakda, ug ang password gikan sa tiggamit awtomatiko nga nahimo.

Atong ihulagway ang vApp diin mahimutang ang mga virtual machine ug ang ilang configuration.

Giunsa Pagdumala ang Cloud Infrastructure gamit ang TerraformPag-configure sa virtual nga makina

Magbuhat ta og sudlanan sa vApp. Aron makonektar dayon namo ang vApp ug VM sa virtual network, gidugang usab namo ang depende_on parameter:

Paghimo og sudlanan

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

}

Paghimo usa ka virtual nga makina nga adunay usa ka paghulagway

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

}

}

Ang nag-unang mga parameter sa paghulagway sa VM:

  • ngalan mao ang ngalan sa virtual machine,

  • vappname - ang ngalan sa vApp diin makadugang ug bag-ong VM,

  • catalogname / templatename - catalog name ug virtual machine template name,

  • storageprofile - default nga polisiya sa pagtipig.

Mga parameter sa block sa network:

  • type — tipo sa konektado nga network,

  • ngalan - diin ang virtual network ikonektar ang VM,

  • isprimary - panguna nga adapter sa network,

  • ipallocation_mode - MANUAL / DHCP / POOL address allocation mode,

  • ip - IP address alang sa virtual machine, atong itakda kini sa mano-mano.

override_template_disk block:

  • sizeinmb - gidak-on sa boot disk alang sa virtual machine

  • storage_profile - palisiya sa pagtipig alang sa disk

Maghimo kita usa ka ikaduha nga VM nga adunay usa ka paghulagway sa pagtipig sa file sa 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 ]

}

Sa seksyon sa vcdvminternal_disk, among gihulagway ang usa ka bag-ong virtual disk nga konektado sa virtual machine.

Mga katin-awan sa vcdvminternaldisk block:

  • bustype - matang sa disk controller

  • sizeinmb - gidak-on sa disk

  • busnumber / unitnumber - punto sa koneksyon sa adapter

  • storage_profile - palisiya sa pagtipig alang sa disk

Atong ihulagway ang katapusang VM sa 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

}

}

Pag-update sa OS ug pag-instalar sa dugang nga mga script

Giandam ang network, gihulagway ang mga virtual nga makina. Sa dili pa i-import ang among imprastraktura, mahimo namon nga pre-provision ang mga bloke sa mga provisioner ug wala gigamit ang Ansible.

Atong tagdon kung giunsa ang pag-update sa OS ug pagdagan ang script sa pag-install sa Bitrix CMS gamit ang provisioner block.

Atong i-install una ang CentOS service pack.

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

}

}

}

Pagtudlo sa mga sangkap:

  • provisioner "remote-exec" - ikonektar ang hilit nga "provisioning" block

  • Sa block sa koneksyon, gihulagway namon ang tipo ug mga parameter alang sa koneksyon:

  • type - protocol, sa among kaso SSH;

  • user - username;

  • password — password sa tiggamit. Sa among kaso, among gipunting ang vcdvappvm.nginx.customization[0].admin_password parameter, nga nagtipig sa namugna nga password gikan sa user sa sistema.

  • host — external IP address para sa koneksyon;

  • pantalan - pantalan alang sa koneksyon, nga kaniadto gipiho sa mga setting sa DNAT;

  • inline - ilista ang listahan sa mga sugo nga ipasulod. Ang mga sugo ipasulod sa han-ay, ingon sa gipiho niini nga seksyon.

Ingon usa ka pananglitan, ipatuman usab naton ang script sa pag-install sa 1C-Bitrix. Ang output sa resulta sa script execution mahimong magamit sa panahon sa pagpatuman sa plano. Aron ma-install ang script, una namon gihulagway ang block:

Atong ihulagway ang pag-instalar sa 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"

]

}

Ug among ihulagway dayon ang update sa Bitrix.

Usa ka pananglitan sa paghatag sa 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"

]

}

}

Importante! Ang script mahimo’g dili molihok gawas kung ang SELinux na-disable sa una! Kung kinahanglan nimo ang usa ka detalyado nga artikulo sa pag-install ug pag-configure sa CMS 1C-Bitrix gamit ang bitrix-env.sh, mahimo nimo gamita ang among artikulo sa blog sa website.

3. Pagsugod sa imprastraktura

Giunsa Pagdumala ang Cloud Infrastructure gamit ang TerraformPagsugod sa mga module ug plugins

Alang sa trabaho, naggamit kami usa ka yano nga "set sa ginoo": usa ka laptop nga adunay Windows 10 ug usa ka distribution kit gikan sa opisyal nga website terraform.io. Pag-unpack ug pagsugod sa command: terraform.exe init

Human sa paghulagway sa computing ug network nga imprastraktura, nagsugod kami sa pagplano sa pagsulay sa among configuration, diin among makita kung unsa ang pagabuhaton ug kung giunsa kini konektado sa usag usa.

  1. Ipatuman ang sugo - terraform plan -var-file=vcd.tfvars.

  2. Atong makuha ang resulta - Plan: 16 to add, 0 to change, 0 to destroy. Sa ato pa, sumala sa kini nga plano, 16 ka mga kapanguhaan ang himuon.

  3. Paglunsad sa plano sa sugo - terraform.exe apply -var-file=vcd.tfvars.

Ang mga virtual nga makina pagahimoon, ug unya ang mga pakete nga gilista namo ipatuman sulod sa provisioner section - ang OS ma-update ug ang CMS Bitrix i-install.

Pagkuha og data sa koneksyon

Pagkahuman sa pagpatuman sa plano, gusto namon nga makadawat mga datos sa porma sa teksto alang sa pagkonektar sa mga server, alang niini among gihan-ay ang seksyon sa output sama sa mosunod:

output "nginxpassword" {

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

}

Ug ang mosunod nga output nagsulti kanato sa password gikan sa gibuhat nga virtual machine:

Outputs: nginx_password = F#4u8!!N

Ingon usa ka sangputanan, nakakuha kami access sa mga virtual nga makina nga adunay bag-ong operating system ug na-pre-install nga mga pakete alang sa among dugang nga trabaho. Andam na ang tanan!

Apan komosta kung aduna ka nay kasamtangan nga imprastraktura?

3.1. Terraform nga nagtrabaho uban sa kasamtangan nga imprastraktura

Yano ra, mahimo nimong i-import ang mga karon nga virtual machine ug ang ilang mga sulud sa vApp gamit ang import nga mando.

Atong ihulagway ang kapanguhaan sa vAPP ug ang virtual nga makina.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Ang sunod nga lakang mao ang pag-import sa mga kabtangan sa kapanguhaan sa vApp sa format vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, diin:

  • vApp ang ngalan sa vApp;

  • org ang ngalan sa organisasyon;

  • org_vdc mao ang ngalan sa virtual data center.

Giunsa Pagdumala ang Cloud Infrastructure gamit ang TerraformPag-import sa mga kabtangan sa kapanguhaan sa vAPP

Atong i-import ang mga kabtangan sa mga kahinguhaan sa VM sa format: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, diin:

  • VM - ngalan sa VM;

  • vApp ang ngalan sa vApp;

  • org ang ngalan sa organisasyon;

  • orgvdc mao ang ngalan sa virtual data center.

Nagmalampuson ang import

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.

Karon atong tan-awon ang bag-ong imported nga kapanguhaan:

Import nga kapanguhaan

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

}

}

Karon andam na kami - nahuman na namo ang katapusang gutlo (pag-import sa usa ka kasamtangan nga imprastraktura) ug gikonsiderar ang tanan nga mga punoan nga punto sa pagtrabaho kauban ang Terraform. 

Ang himan nahimong sayon ​​​​kaayo ug nagtugot kanimo sa paghulagway sa imong imprastraktura isip code, gikan sa mga virtual machine sa usa ka cloud provider ngadto sa paghulagway sa mga kahinguhaan sa mga component sa network.

Sa samang higayon, ang kagawasan gikan sa kalikopan nagpaposible sa pagtrabaho sa lokal, mga kapanguhaan sa panganod, ug, nga nagtapos sa pagdumala sa plataporma. Ug kung wala'y suportadong plataporma ug gusto nimong idugang ang usa ka bag-o, mahimo nimong isulat ang imong kaugalingon nga tighatag ug gamiton kini.

Source: www.habr.com

Idugang sa usa ka comment