Cara Ngatur Infrastruktur Cloud nganggo Terraform

Cara Ngatur Infrastruktur Cloud nganggo Terraform

Ing artikel iki, kita bakal nliti apa Terraform, lan uga kanthi bertahap miwiti infrastruktur kita dhewe ing méga karo VMware - kita bakal nyiapake telung VM kanggo macem-macem tujuan: proxy, panyimpenan file lan CMS.

Babagan kabeh kanthi rinci lan ing telung tahap:

1. Terraform - gambaran, kaluwihan lan komponen

Terraform minangka alat IaC (Infrastructure-as-Code) kanggo mbangun lan ngatur infrastruktur virtual nggunakake kode.

Kita nyathet sawetara kaluwihan nalika nggarap alat kasebut:

  • Kacepetan panyebaran penyewa anyar (lingkungan virtual khusus). Biasane, luwih akeh klien anyar, luwih akeh "klik" staf dhukungan teknis kudu nggawe kanggo nerbitake sumber daya anyar. Kanthi Terraform, pangguna bisa ngganti setelan mesin virtual (contone, mateni OS kanthi otomatis lan nambah partisi disk virtual) tanpa mbutuhake dhukungan teknis utawa mateni mesin kasebut dhewe.

  • Verifikasi cepet saka rencana aktivasi Tenant anyar. Nggunakake katrangan kode infrastruktur, kita bisa langsung mriksa apa sing bakal ditambahake lan ing urutan apa, uga ing negara pungkasan apa iki utawa mesin virtual utawa jaringan virtual kanthi sambungan menyang mesin virtual.

  • Kemampuan kanggo njlèntrèhaké platform maya paling populer. Sampeyan bisa nggunakake alat kasebut saka Amazon lan Google Cloud, menyang platform pribadi adhedhasar VMware vCloud Director, nawakake layanan ing solusi IaaS, SaaS lan PaaS.

  • Ngatur macem-macem panyedhiya maya lan disebaraké infrastruktur antarane wong-wong mau kanggo nambah toleransi fault, nggunakake konfigurasi siji kanggo nggawe, diagnosa lan ngatur sumber maya.

  • Panggunaan sing trep kanggo nggawe stand demo kanggo testing piranti lunak lan debugging. Sampeyan bisa nggawe lan mindhah singkatan kanggo departemen testing, nyoba piranti lunak ing lingkungan beda ing podo karo, lan langsung ngganti lan mbusak sumber daya kanthi nggawe mung siji rencana mbangun sumber

"Terrarium" Terraform

Kita sedhela ngomong babagan kaluwihan alat kasebut, saiki ayo dipecah dadi komponen

Panyedhiya. 

Ing Terraform, meh kabeh jinis infrastruktur bisa diwakili minangka sumber daya. Sambungan antarane sumber daya lan platform API diwenehake dening modul panyedhiya, sing ngijini sampeyan kanggo nggawe sumber daya ing platform tartamtu, contone, Azure utawa VMware vCloud Director.

Minangka bagéan saka proyek, sampeyan bisa sesambungan karo panyedhiya beda ing platform beda.

Sumber daya (deskripsi sumber).

Katrangan sumber daya ngidini sampeyan ngatur komponen platform, kayata mesin virtual utawa jaringan. 

Sampeyan bisa nggawe deskripsi sumber daya kanggo panyedhiya VMware vCloud Director dhewe lan nggunakake katrangan iki kanggo nggawe sumber daya karo panyedhiya hosting sing nggunakake vCloud Director. Sampeyan mung kudu ngganti paramèter otentikasi lan paramèter sambungan jaringan menyang panyedhiya hosting sing dibutuhake

Penyedia.

Komponen iki ndadekake iku bisa kanggo nindakake operasi kanggo instalasi dhisikan lan pangopènan sistem operasi sawise nggawe mesin virtual. Sawise nggawe sumber mesin virtual, sampeyan bisa nggunakake provisioner kanggo ngatur lan nyambung liwat SSH, nganyari sistem operasi, lan ngundhuh lan mbukak script. 

Variabel Input lan Output.

Variabel input - variabel input kanggo jinis blok apa wae. 

Variabel output ngidini sampeyan nyimpen nilai sawise nggawe sumber daya lan bisa digunakake minangka variabel input ing modul liyane, contone ing blok Provisioners.

negara.

File negara nyimpen informasi babagan konfigurasi sumber daya platform panyedhiya. Nalika platform digawe pisanan, ora ana informasi babagan sumber daya lan sadurunge operasi apa wae, Terraform nganyari negara kanthi infrastruktur nyata sumber daya sing wis diterangake.

Tujuan utama negara yaiku kanggo nyimpen akeh obyek saka sumber daya sing wis digawe kanggo mbandhingake konfigurasi sumber daya lan obyek sing ditambahake supaya ora nggawe bola-bali lan owah-owahan ing platform kasebut.

Kanthi gawan, informasi negara disimpen ing file terraform.tfstate lokal, nanging yen perlu, sampeyan bisa nggunakake panyimpenan remot kanggo karya tim.

Sampeyan uga bisa ngimpor sumber daya platform saiki menyang negara kanggo luwih sesambungan karo sumber daya liyane sing padha digawe tanpa bantuan saka Terraform.  

2. Nggawe prasarana

Komponen wis diurutake, saiki nggunakake Terraform kita bakal nggawe infrastruktur kanthi telung mesin virtual. Pisanan karo server proxy nginx diinstal, nomer loro karo panyimpenan file adhedhasar Nextcloud lan katelu karo CMS Bitrix.

Kita bakal nulis kode lan nglakokake nggunakake conto kita awan ing VMware vCloud Director. Pangguna kita nampa akun kanthi hak Administrator Organisasi. Yen sampeyan nggunakake akun kanthi hak sing padha ing awan VMware liyane, sampeyan bisa ngasilake kode kasebut saka conto kita. Tindak!

Pisanan, ayo nggawe direktori kanggo proyek anyar ing ngendi file sing nggambarake infrastruktur bakal diselehake.

mkdir project01

Sabanjure, kita njlèntrèhaké komponen infrastruktur. Terraform nggawe hubungan lan ngolah file adhedhasar katrangan ing file kasebut. File kasebut dhewe bisa dijenengi adhedhasar tujuan pamblokiran sing diterangake, contone, network.tf - nggambarake paramèter jaringan kanggo infrastruktur.

Kanggo njlèntrèhaké komponen infrastruktur kita, kita nggawe file ing ngisor iki:

Dhaptar file.

main.tf - katrangan paramèter kanggo lingkungan virtual - mesin virtual, wadhah virtual;

network.tf - katrangan paramèter jaringan virtual lan aturan NAT lan Firewall;

variables.tf - dhaptar variabel sing digunakake;

vcd.tfvars - nilai variabel proyek kanggo modul VMware vCloud Director.

Basa konfigurasi ing Terraform minangka deklaratif lan urutan blok ora masalah, kajaba blok provisioner, amarga ing blok iki kita njlèntrèhaké prentah sing bakal ditindakake nalika nyiapake infrastruktur lan bakal ditindakake kanthi urutan.

Struktur blok.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Kanggo njlèntrèhaké pamblokiran, basa pamrograman dhewe HCL (HashiCorp Configuration Language) digunakake; iku bisa kanggo njlèntrèhaké infrastruktur nggunakake JSON. Sampeyan bisa sinau luwih lengkap babagan sintaksis maca ing situs web pangembang.

Konfigurasi variabel lingkungan, variabel.tf lan vcd.tfvars

Pisanan, ayo nggawe rong file sing nggambarake dhaptar kabeh variabel sing digunakake lan nilai kanggo modul VMware vCloud Director. Pisanan, ayo nggawe file variables.tf.

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

Nilai variabel sing ditampa saka panyedhiya.

  • vcd_org_user — jeneng pangguna kanthi hak Administrator Organisasi,

  • vcd_org_password — sandi pangguna,

  • vcd_org — jeneng organisasi,

  • vcd_org_vdc — jeneng pusat data virtual,

  • vcd_org_url - URL API,

  • vcd_org_edge_name — jeneng router virtual,

  • vcd_org_catalog — jeneng direktori kanthi cithakan mesin virtual,

  • vcd_edge_external_ip — alamat IP umum,

  • vcd_edge_external_network — jeneng jaringan eksternal,

  • vcd_org_hdd_sp — jeneng kabijakan panyimpenan HDD,

  • vcd_org_ssd_sp - jeneng kabijakan panyimpenan SSD.

Lan ketik variabel kita:

  • vcd_edge_local_ip_nginx — alamat IP mesin virtual nganggo NGINX,

  • vcd_edge_local_ip_bitrix - alamat IP mesin virtual kanthi 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — alamat IP mesin virtual karo Nextcloud.

Kanthi file kapindho kita nggawe lan nemtokake variabel kanggo modul VMware vCloud Director ing file vcd.tfvars: Ayo kita kelingan yen ing conto kita nggunakake mClouds awan dhewe, yen sampeyan nggarap panyedhiya liyane, priksa nilai kasebut. 

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

Konfigurasi jaringan, network.tf.

Variabel lingkungan disetel, saiki kita bakal nyetel skema sambungan mesin virtual - kita bakal nemtokake alamat IP pribadi kanggo saben mesin virtual lan nggunakake Destination NAT kanggo "nerusake" port menyang jaringan eksternal. Kanggo matesi akses menyang port manajemen, kita bakal nyetel akses mung kanggo alamat IP kita.

Cara Ngatur Infrastruktur Cloud nganggo TerraformDiagram jaringan kanggo platform Terraform sing digawe

Kita nggawe jaringan organisasi virtual kanthi jeneng net_lan01, gateway standar: 192.168.110.254, lan uga karo papan alamat: 192.168.110.0/24.

Kita nggambarake jaringan virtual.

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"

  }

}

Ayo nggawe aturan firewall sing ngidini mesin virtual ngakses Internet. Ing blok iki, kabeh sumber daya virtual ing awan bakal duwe akses menyang Internet:

We njlèntrèhaké aturan kanggo akses VM menyang 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]

}

Sawise netepake dependensi yen sawise ngolah blok vcdnetworkrouted.net, kita nerusake konfigurasi blok vcdnsxvfirewallrule, kanthi nggunakake gumantung ing. Kita nggunakake pilihan iki amarga sawetara dependensi bisa dikenali implisit ing konfigurasi.

Sabanjure, kita bakal nggawe aturan sing ngidini akses menyang port saka jaringan eksternal lan nuduhake alamat IP kita kanggo nyambungake liwat SSH menyang server. Sembarang pangguna Internet nduweni akses menyang port 80 lan 443 ing server web, lan pangguna kanthi alamat IP 90.1.15.1 nduweni akses menyang port SSH saka server virtual.

Ngidini akses menyang port saka jaringan eksternal.

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]

}

Kita nggawe aturan Source NAT kanggo ngakses Internet saka jaringan lokal awan:

Kita nerangake aturan 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]

}

Lan kanggo ngrampungake konfigurasi blok jaringan, kita nambah aturan NAT Tujuan kanggo ngakses layanan saka jaringan eksternal:

Nambahake aturan NAT Tujuan.

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]

}

Tambah aturan NAT kanggo terjemahan port menyang server SSH ing 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]

}

Tambah aturan NAT kanggo terjemahan port menyang server SSH karo 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]

}

Tambah aturan NAT kanggo terjemahan port menyang server SSH karo 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]

}

Konfigurasi lingkungan virtual Main.tf

Nalika kita ngrancang ing awal artikel, kita bakal nggawe telung mesin virtual. Dheweke bakal disiapake nggunakake "Kustomisasi Tamu". Kita bakal nyetel paramèter jaringan miturut setelan sing ditemtokake, lan sandhi pangguna bakal digawe kanthi otomatis.

Ayo njlèntrèhaké vApp ing ngendi mesin virtual bakal dumunung lan konfigurasi.

Cara Ngatur Infrastruktur Cloud nganggo TerraformKonfigurasi mesin virtual

Ayo nggawe wadhah vApp. Supaya kita bisa langsung nyambungake vApp lan VM menyang jaringan virtual, kita uga nambah parameter depende_on:

Nggawe wadhah

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

}

Ayo nggawe mesin virtual kanthi deskripsi

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

}

}

Parameter utama ing deskripsi VM:

  • jeneng - jeneng mesin virtual,

  • vappname - jeneng vApp kanggo nambah VM anyar,

  • jeneng katalog / jeneng template - jeneng katalog lan jeneng template mesin virtual,

  • storageprofile - kabijakan panyimpenan standar.

Parameter blok jaringan:

  • jinis - jinis jaringan sing disambungake,

  • jeneng - jaringan virtual kanggo nyambungake VM,

  • isprimary - adaptor jaringan utama,

  • ipallocation_mode — mode alokasi alamat MANUAL / DHCP / POOL,

  • ip - alamat IP kanggo mesin virtual, kita bakal nemtokake kanthi manual.

override_template_disk block:

  • sizeinmb - ukuran disk boot kanggo mesin virtual

  • storage_profile - kabijakan panyimpenan kanggo disk

Ayo nggawe VM kapindho kanthi katrangan babagan panyimpenan file 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 ]

}

Ing bagean vcdvminternal_disk kita bakal njlèntrèhaké disk virtual anyar sing disambungake menyang mesin virtual.

Panjelasan kanggo blok vcdvminternaldisk:

  • bustype - jinis pengontrol disk

  • sizeinmb - ukuran disk

  • busnumber / unitnumber - lokasi sambungan ing adaptor

  • storage_profile - kabijakan panyimpenan kanggo disk

Ayo nggambarake VM paling anyar ing 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

}

}

Nganyari OS lan nginstal skrip tambahan

Jaringan wis disiapake, mesin virtual diterangake. Sadurunge ngimpor infrastruktur kita, kita bisa nindakake provisioning dhisikan ing advance nggunakake pamblokiran provisioner lan tanpa nggunakake Ansible.

Ayo goleki carane nganyari OS lan mbukak skrip instalasi CMS Bitrix nggunakake blok provisioner.

Pisanan, ayo nginstal paket nganyari 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" ]

}

}

}

Sebutake komponen:

  • provisioner "remote-exec" - sambungake blok provisioning remot

  • Ing blok sambungan kita njlèntrèhaké jinis lan paramèter kanggo sambungan:

  • jinis - protokol, ing kasus kita SSH;

  • panganggo — jeneng panganggo;

  • sandi — sandi pangguna. Ing kasus kita, kita nuduhake parameter vcdvappvm.nginx.customization [0].admin_password, kang nyimpen sandi kui kanggo pangguna sistem.

  • host - alamat IP eksternal kanggo sambungan;

  • port - port kanggo sambungan, sing sadurunge kasebut ing setelan DNAT;

  • inline - dhaptar dhaptar printah sing bakal dilebokake. Printah bakal dilebokake miturut urutan sing dituduhake ing bagean iki.

Minangka conto, ayo nglakokake skrip instalasi 1C-Bitrix. Output saka asil eksekusi skrip bakal kasedhiya nalika rencana lagi mlaku. Kanggo nginstal script, pisanan kita njlèntrèhaké pamblokiran:

Ayo kita njlèntrèhaké instalasi 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"

]

}

Lan kita bakal langsung njlèntrèhaké nganyari Bitrix.

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

]

}

}

Penting! Skrip bisa uga ora bisa digunakake yen sampeyan ora mateni SELinux luwih dhisik! Yen sampeyan butuh artikel rinci babagan nginstal lan konfigurasi CMS 1C-Bitrix nggunakake bitrix-env.sh, sampeyan bisa gunakake artikel blog kita ing situs web.

3. Inisialisasi infrastruktur

Cara Ngatur Infrastruktur Cloud nganggo TerraformInitializing modul lan plugins

Kanggo kerja, kita nggunakake "kit gentleman" sing prasaja: laptop kanthi Windows 10 OS lan kit distribusi saka situs web resmi terraform.io. Ayo mbongkar lan miwiti nggunakake printah: terraform.exe init

Sawise njlèntrèhaké komputasi lan infrastruktur jaringan, kita miwiti planning kanggo nyoba konfigurasi kita, ngendi kita bisa ndeleng apa sing bakal digawe lan carane bakal disambungake kanggo saben liyane.

  1. Nglakokaké dhawuh - terraform plan -var-file=vcd.tfvars.

  2. Kita entuk asil - Plan: 16 to add, 0 to change, 0 to destroy. Tegese, miturut rencana iki, 16 sumber daya bakal digawe.

  3. We miwiti rencana ing printah - terraform.exe apply -var-file=vcd.tfvars.

Mesin virtual bakal digawe, banjur paket sing wis kadhaptar bakal dieksekusi ing bagean provisioner - OS bakal dianyari lan CMS Bitrix bakal diinstal.

Nampa data sambungan

Sawise nglakokake rencana, kita pengin nampa data ing wangun teks kanggo nyambungake menyang server, kanggo iki kita bakal format bagean output kaya ing ngisor iki:

output "nginxpassword" {

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

}

Lan output ing ngisor iki ngandhani sandhi kanggo mesin virtual sing digawe:

Outputs: nginx_password = F#4u8!!N

Akibaté, kita entuk akses menyang mesin virtual kanthi sistem operasi sing dianyari lan paket sing wis diinstal kanggo karya luwih lanjut. Kabeh wis siyap!

Nanging kepiye yen sampeyan wis duwe infrastruktur sing ana?

3.1. Makarya Terraform kanthi infrastruktur sing ana

Iku prasaja, sampeyan bisa ngimpor mesin virtual saiki lan kontaner vApp nggunakake printah impor.

Ayo njlèntrèhaké sumber vAPP lan mesin virtual.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Langkah sabanjure yaiku ngimpor properti sumber daya vApp ing format kasebut vcdvapp.<vApp> <org>.<orgvdc>.<vApp>ngendi:

  • vApp - jeneng vApp;

  • org - jeneng organisasi;

  • org_vdc - jeneng pusat data virtual.

Cara Ngatur Infrastruktur Cloud nganggo TerraformNgimpor properti sumber daya vAPP

Ayo ngimpor properti sumber daya VM ing format: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, kang:

  • VM - jeneng VM;

  • vApp - jeneng vApp;

  • org - jeneng organisasi;

  • orgvdc minangka jeneng pusat data virtual.

Impor sukses

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.

Saiki kita bisa ndeleng sumber daya sing diimpor anyar:

Sumber daya sing diimpor

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

}

}

Saiki kita wis siyap - kita wis rampung karo titik pungkasan (ngimpor menyang infrastruktur sing wis ana) lan wis nimbang kabeh poin utama kanggo nggarap Terraform. 

Alat kasebut trep banget lan ngidini sampeyan njlèntrèhaké infrastruktur minangka kode, wiwit saka mesin virtual siji panyedhiya maya kanggo njlèntrèhaké sumber daya komponen jaringan.

Ing wektu sing padha, kamardikan saka lingkungan ndadekake bisa nggarap sumber daya lokal, awan, lan malah ngatur platform kasebut. Lan yen ora ana platform sing didhukung lan sampeyan pengin nambah sing anyar, sampeyan bisa nulis panyedhiya dhewe lan nggunakake.

Source: www.habr.com

Add a comment