Kumaha Ngatur Infrastruktur Awan sareng Terraform

Kumaha Ngatur Infrastruktur Awan sareng Terraform

Dina artikel ieu kami baris nempo naon Terraform diwangun, sarta ogé laun ngajalankeun infrastruktur urang sorangan dina awan sareng VMware - kami bakal nyiapkeun tilu VM pikeun tujuan anu béda: proxy, neundeun file sareng CMS.

Ngeunaan sadayana sacara rinci sareng dina tilu tahap:

1. Terraform - pedaran, kaunggulan sareng komponenana

Terraform mangrupikeun alat IaC (Infrastructure-as-Code) pikeun ngawangun sareng ngatur infrastruktur virtual nganggo kode.

Urang nyatet sababaraha kaunggulan dina gawé bareng alat:

  • Laju deployment panyewa anyar (lingkungan virtual custom). Ilaharna, beuki klien anyar aya, beuki "clicks" staf rojongan teknis kudu nyieun pikeun nyebarkeun sumberdaya anyar. Kalayan Terraform, pangguna tiasa ngarobih setélan mesin virtual (contona, mareuman OS sacara otomatis sareng ningkatkeun partisi disk virtual) tanpa peryogi dukungan téknis atanapi mareuman mesin éta.

  • Verifikasi instan tina rencana aktivasina Tenant anyar. Nganggo katerangan kode infrastruktur, urang tiasa langsung pariksa naon anu bakal ditambah sareng dina urutan naon, kitu ogé dina kaayaan ahir ieu atanapi éta mesin virtual atanapi jaringan virtual sareng sambungan kana mesin virtual.

  • Kamampuhan pikeun ngajelaskeun platform awan anu pang populerna. Anjeun tiasa nganggo alat ti Amazon sareng Google Cloud, ka platform swasta dumasar kana VMware vCloud Director, nawiskeun jasa dina solusi IaaS, SaaS sareng PaaS.

  • Atur sababaraha panyadia awan sarta ngadistribusikaeun infrastruktur antara aranjeunna pikeun ngaronjatkeun kasabaran sesar, ngagunakeun konfigurasi tunggal pikeun nyieun, nangtukeun jenis panyakitna jeung ngatur sumberdaya awan.

  • Pamakéan merenah pikeun nyieun stan demo pikeun nguji software na debugging. Anjeun tiasa nyiptakeun sareng nransferkeun singkatan pikeun departemén tés, nguji parangkat lunak dina lingkungan anu béda sacara paralel, sareng langsung ngarobih sareng ngahapus sumber ku cara nyiptakeun ngan ukur hiji rencana ngawangun sumber.

"Terrarium" Terraform

Urang sakeudeung ngobrol ngeunaan kaunggulan alat, ayeuna hayu urang ngarecahna kana komponén na

Panyadia. 

Dina Terraform, ampir sagala jenis infrastruktur bisa digambarkeun salaku sumberdaya a. Sambungan antara sumberdaya jeung platform API disadiakeun ku modul panyadia, nu ngidinan Anjeun pikeun nyieun sumberdaya dina platform husus, Contona, Azure atanapi VMware vCloud Diréktur.

Salaku bagian tina proyék, anjeun tiasa berinteraksi sareng panyadia anu béda dina platform anu béda.

Sumberdaya (deskripsi sumberdaya).

Katerangan sumberdaya ngamungkinkeun anjeun pikeun ngatur komponén platform, sapertos mesin virtual atanapi jaringan. 

Anjeun tiasa nyiptakeun déskripsi sumberdaya pikeun panyadia VMware vCloud Director sorangan sareng nganggo déskripsi ieu pikeun nyiptakeun sumber daya sareng panyadia hosting anu nganggo vCloud Director. Anjeun ngan ukur kedah ngarobih parameter auténtikasi sareng parameter sambungan jaringan ka panyadia hosting anu diperyogikeun

Provisioners.

Komponén ieu ngamungkinkeun pikeun ngalakukeun operasi pikeun pamasangan awal sareng pangropéa sistem operasi saatos nyiptakeun mesin virtual. Sakali anjeun geus nyieun sumberdaya mesin virtual, Anjeun bisa make provisioners pikeun ngonpigurasikeun tur sambungkeun via SSH, ngamutahirkeun sistem operasi, tur ngundeur tur ngajalankeun skrip. 

Input jeung Kaluaran variabel.

Variabel input - variabel input pikeun sagala jinis blok. 

Variabel kaluaran ngamungkinkeun anjeun pikeun ngahémat nilai saatos nyiptakeun sumber daya sareng tiasa dianggo salaku variabel input dina modul anu sanés, contona dina blok Provisioners.

Amérika Sarikat.

File Amérika nyimpen inpormasi ngeunaan konfigurasi sumberdaya platform panyadia. Nalika platform mimiti diciptakeun, henteu aya inpormasi ngeunaan sumber daya sareng sateuacan operasi naon waé, Terraform ngamutahirkeun nagara sareng infrastruktur nyata sumber anu parantos dijelaskeun.

Tujuan utama nagara nyaéta pikeun ngahemat sakumpulan objék tina sumber daya anu parantos diciptakeun pikeun ngabandingkeun konfigurasi sumber daya sareng objék tambahan pikeun ngahindarkeun kreasi sareng parobihan kana platform.

Sacara standar, informasi kaayaan disimpen dina file terraform.tfstate lokal, tapi lamun perlu, kasebut nyaéta dimungkinkeun pikeun ngagunakeun gudang jauh pikeun gawé tim.

Anjeun ogé tiasa ngimpor sumber daya platform ayeuna kana kaayaan pikeun langkung berinteraksi sareng sumber daya sanés anu didamel tanpa bantosan Terraform.  

2. Nyiptakeun infrastruktur

Komponén parantos diurutkeun, ayeuna nganggo Terraform kami laun-laun bakal nyiptakeun infrastruktur sareng tilu mesin virtual. Anu kahiji sareng server proxy nginx dipasang, anu kadua kalayan neundeun file dumasar kana Nextcloud sareng anu katilu sareng CMS Bitrix.

Urang bakal nulis kode jeung ngaéksekusi eta ngagunakeun conto urang awan dina VMware vCloud Diréktur. Pamaké kami nampi akun sareng hak Administrator Organisasi. Upami anjeun nganggo akun anu gaduh hak anu sami dina awan VMware anu sanés, anjeun tiasa ngahasilkeun deui kodeu tina conto kami. indit!

Kahiji, hayu urang nyieun hiji diréktori pikeun proyék anyar urang nu file ngajéntrékeun infrastruktur bakal disimpen.

mkdir project01

Salajengna, urang ngajelaskeun komponén infrastruktur. Terraform nyiptakeun hubungan sareng ngolah file dumasar kana katerangan dina file. File sorangan tiasa dingaranan dumasar kana tujuan blok anu dijelaskeun, contona, network.tf - ngajelaskeun parameter jaringan pikeun infrastruktur.

Pikeun ngajelaskeun komponén infrastruktur kami, kami nyiptakeun file ieu:

Daptar file.

main.tf - pedaran parameter pikeun lingkungan maya - mesin virtual, peti virtual;

network.tf - pedaran parameter jaringan virtual sareng aturan NAT sareng Firewall;

variables.tf - daptar variabel anu kami anggo;

vcd.tfvars - nilai variabel proyék pikeun modul Diréktur vCloud VMware.

Basa konfigurasi dina Terraform nyaéta déklaratif sareng urutan blok henteu masalah, iwal blok provisioner, sabab dina blok ieu kami ngajelaskeun paréntah anu bakal dieksekusi nalika nyiapkeun infrastruktur sareng aranjeunna bakal dilaksanakeun dina urutan.

Struktur blok.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Pikeun ngajelaskeun blok, basa pamrograman sorangan HCL (HashiCorp Configuration Language) dianggo; mungkin pikeun ngajelaskeun infrastruktur nganggo JSON. Anjeun tiasa diajar langkung seueur ngeunaan sintaksis baca dina ramatloka pamekar.

Konfigurasi variabel lingkungan, variables.tf sareng vcd.tfvars

Mimiti, hayu urang ngadamel dua file anu ngajelaskeun daptar sadaya variabel anu dianggo sareng nilaina pikeun modul Diréktur VMware vCloud. Kahiji, hayu urang nyieun file variables.tf.

Eusi 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 anu kami tampi ti panyadia.

  • vcd_org_user — ngaran pamaké kalawan hak Administrator Organisasi,

  • vcd_org_password - sandi pamaké,

  • vcd_org - ngaran organisasi,

  • vcd_org_vdc — ngaran puseur data virtual,

  • vcd_org_url - URL API,

  • vcd_org_edge_name - nami router virtual,

  • vcd_org_catalog — ngaran diréktori nu mibanda témplat mesin virtual,

  • vcd_edge_external_ip — alamat IP umum,

  • vcd_edge_external_network - ngaran jaringan éksternal,

  • vcd_org_hdd_sp — ngaran kawijakan panyimpenan HDD,

  • vcd_org_ssd_sp - nami kawijakan neundeun SSD.

Sareng lebetkeun variabel kami:

  • vcd_edge_local_ip_nginx — Alamat IP mesin virtual nganggo NGINX,

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

  • vcd_edge_local_ip_nextcloud - Alamat IP tina mesin virtual sareng Nextcloud.

Jeung file kadua urang nyieun jeung nangtukeun variabel pikeun modul VMware vCloud Diréktur dina file vcd.tfvars: Hayu urang ngelingan yen dina conto urang ngagunakeun sorangan awan mClouds, upami anjeun damel sareng panyadia anu sanés, pariksa nilai sareng aranjeunna. 

Eusi 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 diatur, ayeuna urang bakal nyetél skéma sambungan mesin virtual - urang bakal napelkeun alamat IP pribadi ka unggal mesin virtual tur nganggo Tujuan NAT pikeun "neraskeun" palabuhan ka jaringan éksternal. Pikeun ngawates aksés ka palabuhan manajemén, urang bakal nyetél aksés ngan pikeun alamat IP urang.

Kumaha Ngatur Infrastruktur Awan sareng TerraformDiagram jaringan pikeun platform Terraform keur dijieun

Urang nyieun jaringan organisasi virtual kalawan nami net_lan01, gateway standar: 192.168.110.254, sarta ogé kalawan spasi alamat: 192.168.110.0/24.

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

  }

}

Hayu urang nyieun aturan firewall nu ngidinan mesin virtual ngakses Internet. Dina blok ieu, sadaya sumber virtual dina awan bakal gaduh aksés ka Internét:

Urang ngajelaskeun aturan pikeun aksés VM ka Internét.

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]

}

Sanggeus netepkeun kagumantungan yén sanggeus ngolah blok vcdnetworkrouted.net, urang neruskeun pikeun ngonpigurasikeun blok vcdnsxvfirewallrule., ku ngagunakeun gumantung. Kami nganggo pilihan ieu kusabab sababaraha dependensi tiasa dikenal sacara implisit dina konfigurasi.

Salajengna, urang bakal nyiptakeun aturan anu ngamungkinkeun aksés ka palabuhan tina jaringan éksternal sareng nunjukkeun alamat IP urang pikeun nyambungkeun via SSH ka server. Sakur pamaké Internet boga aksés ka palabuhan 80 jeung 443 dina web server, sarta pamaké kalawan alamat IP 90.1.15.1 boga aksés ka palabuhan SSH tina server virtual.

Ngidinan aksés ka palabuhan tina jaringan éksternal.

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]

}

Kami nyiptakeun aturan Source NAT pikeun ngaksés Internét tina jaringan lokal awan:

Kami ngajelaskeun 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]

}

Sareng pikeun ngarengsekeun konfigurasi blok jaringan, urang tambahkeun aturan Tujuan NAT pikeun ngaksés jasa tina jaringan éksternal:

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

}

Tambahkeun aturan NAT pikeun tarjamahan port ka server SSH handapeun 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]

}

Tambahkeun aturan NAT pikeun tarjamahan port ka server SSH kalawan 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]

}

Tambahkeun aturan NAT pikeun tarjamahan port ka server SSH kalawan 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 maya Main.tf

Salaku urang rencanana di awal artikel, urang bakal nyieun tilu mesin virtual. Aranjeunna bakal disiapkeun ngagunakeun "Kustomisasi Tamu". Urang bakal nyetél parameter jaringan numutkeun kana setélan anu kami khususkeun, sareng kecap akses pangguna bakal otomatis dibangkitkeun.

Hayu urang ngajelaskeun vApp dimana mesin virtual bakal aya sareng konfigurasi na.

Kumaha Ngatur Infrastruktur Awan sareng TerraformKonfigurasi mesin virtual

Hayu urang nyieun wadah vApp. Janten urang tiasa langsung nyambungkeun vApp sareng VM ka jaringan virtual, urang ogé nambihan parameter depende_on:

Jieun wadah

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

}

Hayu urang ngadamel mesin virtual kalayan pedaran

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 dina pedaran VM:

  • nami - nami mesin virtual,

  • vappname - nami vApp pikeun nambahkeun VM anyar,

  • catalogname / templatename - ngaran katalog sareng nami template mesin virtual,

  • storageprofile - kawijakan gudang standar.

Parameter blok jaringan:

  • tipe - tipe jaringan disambungkeun,

  • nami - jaringan virtual mana pikeun nyambungkeun VM,

  • isprimary - adaptor jaringan primér,

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

  • ip - Alamat IP pikeun mesin virtual, kami bakal nangtukeun sacara manual.

override_template_disk block:

  • sizeinmb - ukuran disk boot pikeun mesin virtual

  • storage_profile - kawijakan panyimpen pikeun disk

Hayu urang ngadamel VM kadua kalayan pedaran ngeunaan neundeun 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 ]

}

Dina bagian vcdvminternal_disk urang bakal ngajelaskeun hiji disk virtual anyar nu disambungkeun ka mesin virtual.

Katerangan pikeun blok vcdvminternaldisk:

  • bustype - tipe disk controller

  • sizeinmb - ukuran disk

  • busnumber / unitnumber - lokasi sambungan dina adaptor nu

  • storage_profile - kawijakan panyimpen pikeun disk

Hayu urang ngajelaskeun VM panganyarna dina 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

}

}

Ngamutahirkeun OS sareng masang skrip tambahan

jaringan geus disiapkeun, mesin virtual digambarkeun. Sateuacan ngimpor infrastruktur urang, urang tiasa ngalaksanakeun penyediaan awal sateuacanna nganggo blok provisioner sareng henteu nganggo Ansible.

Hayu urang tingali kumaha ngapdet OS sareng ngajalankeun skrip instalasi CMS Bitrix nganggo blok provisioner.

Mimiti, hayu urang pasang bungkusan apdet 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" ]

}

}

}

Sebutkeun komponén:

  • provisioner "remote-exec" - sambungkeun blok provisioning jauh

  • Dina blok sambungan, kami ngajelaskeun jinis sareng parameter pikeun sambungan:

  • tipe — protokol, dina hal urang SSH;

  • pamaké - ngaran pamaké;

  • sandi — sandi pamaké. Bisi kami, urang nunjuk kana parameter vcdvappvm.nginx.customization [0].admin_password, nu nyimpen sandi dihasilkeun pikeun pamaké sistem.

  • host - alamat IP éksternal pikeun sambungan;

  • port - port pikeun sambungan, nu saméméhna dieusian dina setélan DNAT;

  • inline - daptar daptar paréntah anu bakal diasupkeun. Paréntah bakal diasupkeun dina urutan sakumaha dituduhkeun dina bagian ieu.

Salaku conto, hayu urang ogé ngaéksekusi skrip pamasangan 1C-Bitrix. Kaluaran hasil palaksanaan naskah bakal sayogi nalika rencanana jalan. Pikeun masang skrip, mimiti urang ngajelaskeun blok:

Hayu urang ngajelaskeun pamasangan 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"

]

}

Sareng kami bakal langsung ngajelaskeun pembaruan 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"

]

}

}

Kadé! Skrip moal tiasa dianggo upami anjeun henteu nganonaktipkeun SELinux sateuacanna! Upami anjeun peryogi artikel lengkep ngeunaan masang sareng ngonpigurasikeun CMS 1C-Bitrix nganggo bitrix-env.sh, oo anjeun tiasa ngagunakeun artikel blog urang dina website.

3. Infrastruktur initialization

Kumaha Ngatur Infrastruktur Awan sareng TerraformInitializing modul jeung plugins

Pikeun digawé, kami nganggo "kit gentleman" saderhana: laptop nganggo Windows 10 OS sareng kit distribusi tina halaman wéb resmi. terraform.io. Hayu urang ngabongkar sareng ngamimitian nganggo paréntah: terraform.exe init

Saatos ngajelaskeun komputasi sareng infrastruktur jaringan, urang ngaluncurkeun perencanaan pikeun nguji konfigurasi urang, dimana urang tiasa ningali naon anu bakal didamel sareng kumaha éta bakal dihubungkeun.

  1. Laksanakeun paréntah - terraform plan -var-file=vcd.tfvars.

  2. Urang meunang hasilna - Plan: 16 to add, 0 to change, 0 to destroy. Hartina, nurutkeun rencana ieu, 16 sumberdaya bakal dijieun.

  3. Urang ngajalankeun rencana on paréntah - terraform.exe apply -var-file=vcd.tfvars.

Mesin virtual bakal didamel, teras bungkusan anu kami daptarkeun bakal dieksekusi dina bagian provisioner - OS bakal diropéa sareng CMS Bitrix bakal dipasang.

Nampi inpormasi sambungan

Saatos ngalaksanakeun rencana, urang hoyong nampi data dina bentuk téks pikeun nyambung ka server, pikeun ieu kami bakal pormat bagian kaluaran sapertos kieu:

output "nginxpassword" {

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

}

Sareng kaluaran di handap ieu nyarioskeun kecap konci pikeun mesin virtual anu diciptakeun:

Outputs: nginx_password = F#4u8!!N

Hasilna, urang meunang aksés ka mesin virtual kalawan sistem operasi diropéa sarta pakét tos dipasang pikeun karya urang salajengna. Kabéh geus siap!

Tapi kumaha upami anjeun parantos gaduh infrastruktur anu tos aya?

3.1. Gawé Terraform sareng infrastruktur anu tos aya

Éta basajan, anjeun tiasa ngimpor mesin virtual ayeuna sareng wadah vApp na nganggo paréntah impor.

Hayu urang ngajelaskeun sumberdaya vAPP jeung 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"

}

Lengkah saterusna nyaéta ngimpor sipat sumberdaya vApp dina format vcdvapp.<vApp> <org>.<orgvdc>.<vApp>dimana:

  • vApp - ngaran vApp;

  • org - ngaran organisasi;

  • org_vdc - ngaran puseur data virtual.

Kumaha Ngatur Infrastruktur Awan sareng TerraformNgimpor sipat sumberdaya vAPP

Hayu urang ngimpor sipat sumberdaya VM dina format: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, di mana:

  • VM - ngaran VM;

  • vApp - ngaran vApp;

  • org - ngaran organisasi;

  • orgvdc nyaeta nami puseur data virtual.

Impor suksés

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.

Ayeuna urang tiasa ningali sumber impor énggal:

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

}

}

Ayeuna kami pasti siap - kami parantos réngsé sareng titik terakhir (ngimpor kana infrastruktur anu tos aya) sareng parantos nganggap sadaya titik utama pikeun damel sareng Terraform. 

Alatna tétéla pisan merenah sareng ngamungkinkeun anjeun pikeun ngajelaskeun infrastruktur anjeun salaku kode, mimitian ti mesin virtual tina hiji panyadia awan pikeun ngajelaskeun sumberdaya komponén jaringan.

Dina waktu nu sarua, kamerdikaan ti lingkungan ngamungkinkeun pikeun digawekeun ku lokal, sumberdaya awan, komo ngatur platform nu. Sareng upami teu aya platform anu dirojong sareng anjeun badé nambihan anu énggal, anjeun tiasa nyerat panyadia anjeun nyalira sareng nganggo éta.

sumber: www.habr.com

Tambahkeun komentar