Cara Mengurus Infrastruktur Awan dengan Terraform

Cara Mengurus Infrastruktur Awan dengan Terraform

Dalam artikel ini kita akan melihat apa yang terdiri daripada Terraform, dan juga secara beransur-ansur melancarkan infrastruktur kita sendiri dalam awan dengan VMware — kami akan menyediakan tiga VM untuk tujuan berbeza: proksi, storan fail dan CMS.

Mengenai segala-galanya secara terperinci dan dalam tiga peringkat:

1. Terraform - penerangan, kelebihan dan komponen

Terraform ialah alat IaC (Infrastructure-as-Code) untuk membina dan mengurus infrastruktur maya menggunakan kod.

Kami mencatat beberapa kelebihan dalam bekerja dengan alat:

  • Kelajuan penggunaan penyewa baharu (persekitaran maya tersuai). Biasanya, lebih ramai pelanggan baharu ada, lebih banyak "klik" kakitangan sokongan teknikal perlu lakukan untuk menerbitkan sumber baharu. Dengan Terraform, pengguna boleh menukar tetapan mesin maya (contohnya, mematikan OS secara automatik dan meningkatkan partition cakera maya) tanpa memerlukan sokongan teknikal atau mematikan mesin itu sendiri.

  • Pengesahan segera pelan pengaktifan Penyewa baru. Dengan menggunakan perihalan kod infrastruktur, kami boleh segera menyemak perkara yang akan ditambah dan dalam susunan apa, serta dalam keadaan akhir ini atau mesin maya atau rangkaian maya dengan sambungan ke mesin maya.

  • Keupayaan untuk menerangkan platform awan yang paling popular. Anda boleh menggunakan alat tersebut daripada Amazon dan Google Cloud, kepada platform peribadi berdasarkan VMware vCloud Director, menawarkan perkhidmatan dalam penyelesaian IaaS, SaaS dan PaaS.

  • Urus berbilang pembekal awan dan mengedarkan infrastruktur antara mereka untuk meningkatkan toleransi kesalahan, menggunakan konfigurasi tunggal untuk mencipta, mendiagnosis dan mengurus sumber awan.

  • Penggunaan yang mudah untuk mencipta gerai demo untuk ujian perisian dan penyahpepijatan. Anda boleh membuat dan memindahkan singkatan untuk jabatan ujian, menguji perisian dalam persekitaran yang berbeza secara selari, dan serta-merta menukar serta memadam sumber dengan mencipta hanya satu pelan binaan sumber

Terraform "Terrarium".

Kami bercakap secara ringkas tentang kelebihan alat, sekarang mari kita pecahkan kepada komponennya

Pembekal. 

Dalam Terraform, hampir semua jenis infrastruktur  boleh diwakili sebagai sumber. Sambungan antara sumber dan platform API disediakan oleh modul pembekal, yang membolehkan anda mencipta sumber dalam platform tertentu, contohnya, Azure atau VMware vCloud Director.

Sebagai sebahagian daripada projek, anda boleh berinteraksi dengan pembekal yang berbeza pada platform yang berbeza.

Sumber (huraian sumber).

Perihalan sumber membolehkan anda mengurus komponen platform, seperti mesin maya atau rangkaian. 

Anda boleh membuat penerangan sumber untuk pembekal vCloud Director VMware sendiri dan menggunakan penerangan ini untuk mencipta sumber dengan mana-mana penyedia pengehosan yang menggunakan vCloud Director. Anda hanya perlu menukar parameter pengesahan dan parameter sambungan rangkaian kepada penyedia pengehosan yang diperlukan

Pemberi rezeki.

Komponen ini memungkinkan untuk melaksanakan operasi untuk pemasangan awal dan penyelenggaraan sistem pengendalian selepas mencipta mesin maya. Sebaik sahaja anda telah mencipta sumber mesin maya, anda boleh menggunakan penyedia untuk mengkonfigurasi dan menyambung melalui SSH, mengemas kini sistem pengendalian dan memuat turun serta menjalankan skrip. 

Pembolehubah Input dan Output.

Pembolehubah input - pembolehubah input untuk sebarang jenis blok. 

Pembolehubah output membolehkan anda menyimpan nilai selepas mencipta sumber dan boleh digunakan sebagai pembolehubah input dalam modul lain, contohnya dalam blok Provisioners.

negeri.

Fail negara menyimpan maklumat tentang konfigurasi sumber platform pembekal. Apabila platform pertama kali dibuat, tiada maklumat tentang sumber dan sebelum sebarang operasi, Terraform mengemas kini keadaan dengan infrastruktur sebenar sumber yang telah diterangkan.

Tujuan utama keadaan adalah untuk menyimpan sekumpulan objek sumber yang telah dibuat untuk membandingkan konfigurasi sumber dan objek tambahan untuk mengelakkan penciptaan berulang dan perubahan pada platform.

Secara lalai, maklumat keadaan disimpan dalam fail tempatan terraform.tfstate, tetapi jika perlu, adalah mungkin untuk menggunakan storan jauh untuk kerja berpasukan.

Anda juga boleh mengimport sumber platform semasa ke dalam keadaan untuk terus berinteraksi dengan sumber lain yang seterusnya dicipta tanpa bantuan Terraform.  

2. Pewujudan infrastruktur

Komponen telah disusun, kini menggunakan Terraform kami akan secara beransur-ansur mencipta infrastruktur dengan tiga mesin maya. Yang pertama dengan pelayan proksi nginx dipasang, yang kedua dengan storan fail berdasarkan Nextcloud dan yang ketiga dengan CMS Bitrix.

Kami akan menulis kod dan melaksanakannya menggunakan contoh kami awan pada VMware vCloud Director. Pengguna kami menerima akaun dengan hak Pentadbir Organisasi. Jika anda menggunakan akaun dengan hak yang sama dalam awan VMware lain, anda boleh menghasilkan semula kod daripada contoh kami. Pergi!

Mula-mula, mari buat direktori untuk projek baharu kami di mana fail yang menerangkan infrastruktur akan diletakkan.

mkdir project01

Seterusnya, kami menerangkan komponen infrastruktur. Terraform mencipta perhubungan dan memproses fail berdasarkan penerangan dalam fail. Fail itu sendiri boleh dinamakan berdasarkan tujuan blok yang diterangkan, contohnya, network.tf - menerangkan parameter rangkaian untuk infrastruktur.

Untuk menerangkan komponen infrastruktur kami, kami mencipta fail berikut:

Senarai fail.

main.tf - perihalan parameter untuk persekitaran maya - mesin maya, bekas maya;

network.tf - perihalan parameter rangkaian maya dan peraturan NAT dan Firewall;

variables.tf - senarai pembolehubah yang kami gunakan;

vcd.tfvars - nilai pembolehubah projek untuk modul Pengarah vCloud VMware.

Bahasa konfigurasi dalam Terraform adalah deklaratif dan susunan blok tidak penting, kecuali untuk blok penyedia, kerana dalam blok ini kami menerangkan arahan yang akan dilaksanakan semasa menyediakan infrastruktur dan ia akan dilaksanakan mengikut urutan.

Struktur blok.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Untuk menerangkan blok, bahasa pengaturcaraannya sendiri HCL (HashiCorp Configuration Language) digunakan; adalah mungkin untuk menerangkan infrastruktur menggunakan JSON. Anda boleh mengetahui lebih lanjut tentang sintaks baca di laman web pembangun.

Konfigurasi pembolehubah persekitaran, variables.tf dan vcd.tfvars

Mula-mula, mari buat dua fail yang menerangkan senarai semua pembolehubah yang digunakan dan nilainya untuk modul Pengarah vCloud VMware. Mula-mula, mari buat fail variables.tf.

Kandungan fail 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 boleh ubah yang kami terima daripada pembekal.

  • vcd_org_user — nama pengguna dengan hak Pentadbir Organisasi,

  • vcd_org_password — kata laluan pengguna,

  • vcd_org — nama organisasi,

  • vcd_org_vdc — nama pusat data maya,

  • vcd_org_url - URL API,

  • vcd_org_edge_name — nama penghala maya,

  • vcd_org_catalog — nama direktori dengan templat mesin maya,

  • vcd_edge_external_ip — alamat IP awam,

  • vcd_edge_external_network — nama rangkaian luaran,

  • vcd_org_hdd_sp — nama dasar storan HDD,

  • vcd_org_ssd_sp — nama dasar storan SSD.

Dan masukkan pembolehubah kami:

  • vcd_edge_local_ip_nginx — alamat IP mesin maya dengan NGINX,

  • vcd_edge_local_ip_bitrix - alamat IP mesin maya dengan 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — alamat IP mesin maya dengan Nextcloud.

Dengan fail kedua kami mencipta dan menentukan pembolehubah untuk modul Pengarah vCloud VMware dalam fail vcd.tfvars: Mari kita ingat bahawa dalam contoh kita, kita menggunakan mClouds awan sendiri, jika anda bekerja dengan pembekal lain, semak nilai dengan mereka. 

Kandungan fail 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 rangkaian, rangkaian.tf.

Pembolehubah persekitaran ditetapkan, kini kami akan menyediakan skema sambungan mesin maya - tetapkan alamat IP peribadi kepada setiap mesin maya dan gunakan Destination NAT untuk "majukan" port ke rangkaian luaran. Untuk mengehadkan akses kepada port pengurusan, kami akan menetapkan akses hanya untuk alamat IP kami.

Cara Mengurus Infrastruktur Awan dengan TerraformGambar rajah rangkaian untuk platform Terraform sedang dibuat

Kami mencipta rangkaian organisasi maya dengan nama net_lan01, get laluan lalai: 192.168.110.254, dan juga dengan ruang alamat: 192.168.110.0/24.

Kami menerangkan rangkaian maya.

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"

  }

}

Mari kita cipta peraturan firewall yang membenarkan mesin maya mengakses Internet. Dalam blok ini, semua sumber maya dalam awan akan mempunyai akses kepada Internet:

Kami menerangkan peraturan untuk akses VM ke 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]

}

Setelah menetapkan kebergantungan bahawa selepas memproses blok vcdnetworkrouted.net, kami meneruskan untuk mengkonfigurasi blok vcdnsxvfirewallrule, dengan menggunakan bergantung kepada. Kami menggunakan pilihan ini kerana beberapa kebergantungan mungkin diiktiraf secara tersirat dalam konfigurasi.

Seterusnya, kami akan membuat peraturan yang membenarkan akses kepada port daripada rangkaian luaran dan menunjukkan alamat IP kami untuk menyambung melalui SSH ke pelayan. Mana-mana pengguna Internet mempunyai akses kepada port 80 dan 443 pada pelayan web, dan pengguna dengan alamat IP 90.1.15.1 mempunyai akses kepada port SSH pelayan maya.

Benarkan akses kepada port daripada rangkaian luaran.

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 mencipta peraturan Source NAT untuk mengakses Internet daripada rangkaian tempatan awan:

Kami menerangkan peraturan 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]

}

Dan untuk melengkapkan konfigurasi blok rangkaian, kami menambah peraturan NAT Destinasi untuk mengakses perkhidmatan daripada rangkaian luaran:

Menambah peraturan NAT Destinasi.

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]

}

Tambahkan peraturan NAT untuk terjemahan port ke pelayan SSH di bawah 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]

}

Tambahkan peraturan NAT untuk terjemahan port ke pelayan SSH dengan 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]

}

Tambahkan peraturan NAT untuk terjemahan port ke pelayan SSH dengan 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 persekitaran maya Main.tf

Seperti yang kami rancang pada permulaan artikel, kami akan mencipta tiga mesin maya. Mereka akan disediakan menggunakan "Penyesuaian Tetamu". Kami akan menetapkan parameter rangkaian mengikut tetapan yang kami tetapkan, dan kata laluan pengguna akan dijana secara automatik.

Mari kita terangkan vApp di mana mesin maya akan ditempatkan dan konfigurasinya.

Cara Mengurus Infrastruktur Awan dengan TerraformKonfigurasi mesin maya

Mari buat bekas vApp. Supaya kami boleh menyambungkan vApp dan VM dengan segera ke rangkaian maya, kami juga menambah parameter depende_on:

Buat bekas

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

}

Mari buat mesin maya dengan penerangan

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 dalam perihalan VM:

  • nama — nama mesin maya,

  • vappname - nama vApp untuk menambah VM baharu,

  • nama katalog / nama templat - nama katalog dan nama templat mesin maya,

  • storageprofile - dasar penyimpanan lalai.

Parameter blok rangkaian:

  • jenis — jenis rangkaian yang disambungkan,

  • nama — rangkaian maya mana untuk menyambungkan VM,

  • isprimary - penyesuai rangkaian utama,

  • ipallocation_mode — mod peruntukan alamat MANUAL / DHCP / POOL,

  • ip — Alamat IP untuk mesin maya, kami akan menentukannya secara manual.

override_template_disk block:

  • sizeinmb — saiz cakera but untuk mesin maya

  • storage_profile — dasar penyimpanan untuk cakera

Mari buat VM kedua dengan penerangan storan fail 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 ]

}

Dalam bahagian vcdvminternal_disk kami akan menerangkan cakera maya baharu yang disambungkan ke mesin maya.

Penjelasan untuk blok vcdvminternaldisk:

  • bustype - jenis pengawal cakera

  • sizeinmb — saiz cakera

  • nombor bas / nombor unit - lokasi sambungan dalam penyesuai

  • storage_profile — dasar penyimpanan untuk cakera

Mari kita huraikan VM terkini pada 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

}

}

Mengemas kini OS dan memasang skrip tambahan

Rangkaian disediakan, mesin maya diterangkan. Sebelum mengimport infrastruktur kami, kami boleh menjalankan peruntukan awal terlebih dahulu menggunakan blok penyedia dan tanpa menggunakan Ansible.

Mari lihat cara mengemas kini OS dan jalankan skrip pemasangan CMS Bitrix menggunakan blok penyedia.

Mula-mula, mari pasang pakej kemas kini 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" ]

}

}

}

Penetapan komponen:

  • penyedia "remote-exec" - sambungkan blok peruntukan jauh

  • Dalam blok sambungan kami menerangkan jenis dan parameter untuk sambungan:

  • jenis — protokol, dalam kes kami SSH;

  • pengguna — nama pengguna;

  • kata laluan — kata laluan pengguna. Dalam kes kami, kami menunjuk kepada parameter vcdvappvm.nginx.customization[0].admin_password, yang menyimpan kata laluan yang dijana untuk pengguna sistem.

  • hos — alamat IP luaran untuk sambungan;

  • port — port untuk sambungan, yang sebelum ini dinyatakan dalam tetapan DNAT;

  • sebaris - senaraikan senarai arahan yang akan dimasukkan. Perintah akan dimasukkan mengikut urutan seperti yang ditunjukkan dalam bahagian ini.

Sebagai contoh, mari kita laksanakan skrip pemasangan 1C-Bitrix. Output hasil pelaksanaan skrip akan tersedia semasa rancangan sedang berjalan. Untuk memasang skrip, mula-mula kami menerangkan blok:

Mari kita terangkan pemasangan 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"

]

}

Dan kami akan segera menerangkan kemas kini Bitrix.

Contoh peruntukan 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 mungkin tidak berfungsi jika anda tidak melumpuhkan SELinux terlebih dahulu! Jika anda memerlukan artikel terperinci tentang memasang dan mengkonfigurasi CMS 1C-Bitrix menggunakan bitrix-env.sh, oo anda boleh gunakan artikel blog kami di laman web.

3. Inisialisasi infrastruktur

Cara Mengurus Infrastruktur Awan dengan TerraformMemulakan modul dan pemalam

Untuk kerja, kami menggunakan "kit lelaki" yang ringkas: komputer riba dengan OS Windows 10 dan kit pengedaran dari tapak web rasmi terraform.io. Mari kita bongkar dan mulakan menggunakan arahan: terraform.exe init

Selepas menerangkan infrastruktur pengkomputeran dan rangkaian, kami melancarkan perancangan untuk menguji konfigurasi kami, di mana kami boleh melihat perkara yang akan dibuat dan bagaimana ia akan disambungkan antara satu sama lain.

  1. Laksanakan arahan - terraform plan -var-file=vcd.tfvars.

  2. Kita dapat hasilnya - Plan: 16 to add, 0 to change, 0 to destroy. Iaitu, mengikut rancangan ini, 16 sumber akan diwujudkan.

  3. Kami melancarkan pelan arahan - terraform.exe apply -var-file=vcd.tfvars.

Mesin maya akan dibuat, dan kemudian pakej yang telah kami senaraikan akan dilaksanakan dalam bahagian penyedia - OS akan dikemas kini dan CMS Bitrix akan dipasang.

Menerima maklumat sambungan

Selepas melaksanakan rancangan, kami ingin menerima data dalam bentuk teks untuk menyambung ke pelayan, untuk ini kami akan memformat bahagian output seperti berikut:

output "nginxpassword" {

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

}

Dan output berikut memberitahu kami kata laluan untuk mesin maya yang dibuat:

Outputs: nginx_password = F#4u8!!N

Hasilnya, kami mendapat akses kepada mesin maya dengan sistem pengendalian yang dikemas kini dan pakej prapasang untuk kerja kami selanjutnya. Semua sudah sedia!

Tetapi bagaimana jika anda sudah mempunyai infrastruktur sedia ada?

3.1. Terraform Bekerja dengan infrastruktur sedia ada

Mudah sahaja, anda boleh mengimport mesin maya semasa dan bekas vApp mereka menggunakan arahan import.

Mari kita terangkan sumber vAPP dan mesin maya.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Langkah seterusnya ialah mengimport sifat sumber vApp dalam format vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, di mana:

  • vApp - nama vApp;

  • org — nama organisasi;

  • org_vdc — nama pusat data maya.

Cara Mengurus Infrastruktur Awan dengan TerraformMengimport sifat sumber vAPP

Mari kita import sifat sumber VM dalam format: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, di mana:

  • VM - nama VM;

  • vApp - nama vApp;

  • org — nama organisasi;

  • orgvdc ialah nama pusat data maya.

Import berjaya

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.

Sekarang kita boleh melihat sumber baharu yang diimport:

Sumber yang diimport

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

}

}

Kini kami sudah pasti selesai - kami telah selesai dengan titik terakhir (mengimport ke dalam infrastruktur sedia ada) dan telah merangkumi semua perkara utama bekerja dengan Terraform. 

Alat ini ternyata sangat mudah dan membolehkan anda menerangkan infrastruktur anda sebagai kod, bermula dari mesin maya satu pembekal awan hingga menerangkan sumber komponen rangkaian.

Pada masa yang sama, kebebasan daripada persekitaran membolehkan anda bekerja dengan sumber awan tempatan dan juga mengurus platform. Dan jika tiada platform yang disokong dan anda ingin menambah yang baharu, anda boleh menulis pembekal anda sendiri dan menggunakannya.

Sumber: www.habr.com

Tambah komen