Cara Mengelola Infrastruktur Cloud dengan Terraform

Cara Mengelola Infrastruktur Cloud dengan Terraform

Pada artikel ini kita akan melihat apa saja Terraform, dan juga secara bertahap meluncurkan infrastruktur kita sendiri di cloud dengan VMware — kami akan menyiapkan tiga VM untuk tujuan berbeda: proxy, penyimpanan file, dan CMS.

Tentang semuanya secara detail dan dalam tiga tahap:

1. Terraform - deskripsi, kelebihan dan komponen

Terraform adalah alat IaC (Infrastructure-as-Code) untuk membangun dan mengelola infrastruktur virtual menggunakan kode.

Kami mencatat beberapa keuntungan dalam bekerja dengan alat ini:

  • Kecepatan penerapan penyewa baru (lingkungan virtual khusus). Biasanya, semakin banyak klien baru, semakin banyak “klik” yang perlu dilakukan staf dukungan teknis untuk mempublikasikan sumber daya baru. Dengan Terraform, pengguna dapat mengubah pengaturan mesin virtual (misalnya, mematikan OS secara otomatis dan menambah partisi disk virtual) tanpa memerlukan dukungan teknis atau mematikan mesin itu sendiri.

  • Verifikasi instan dari rencana aktivasi Tennant baru. Dengan menggunakan deskripsi kode infrastruktur, kita dapat segera memeriksa apa yang akan ditambahkan dan dalam urutan apa, serta dalam keadaan akhir apa mesin virtual atau jaringan virtual dengan koneksi ke mesin virtual akan berada.

  • Kemampuan untuk mendeskripsikan platform cloud paling populer. Anda dapat menggunakan alat ini mulai dari Amazon dan Google Cloud, hingga platform pribadi berbasis VMware vCloud Director, yang menawarkan layanan dalam solusi IaaS, SaaS, dan PaaS.

  • Kelola beberapa penyedia cloud dan mendistribusikan infrastruktur di antara mereka untuk meningkatkan toleransi kesalahan, menggunakan konfigurasi tunggal untuk membuat, mendiagnosis, dan mengelola sumber daya cloud.

  • Penggunaan yang mudah untuk membuat stand demo untuk pengujian dan debugging perangkat lunak. Anda dapat membuat dan mentransfer singkatan dari departemen pengujian, menguji perangkat lunak di lingkungan yang berbeda secara paralel, dan langsung mengubah dan menghapus sumber daya hanya dengan membuat satu rencana pembangunan sumber daya

Terraform "Terarium".

Kita telah membahas secara singkat tentang kelebihan alat ini, sekarang mari kita bagi menjadi beberapa komponennya

Penyedia. 

Di Terraform, hampir semua jenis infrastruktur dapat direpresentasikan sebagai sumber daya. Koneksi antara sumber daya dan platform API disediakan oleh modul penyedia, yang memungkinkan Anda membuat sumber daya dalam platform tertentu, misalnya, Azure atau VMware vCloud Director.

Sebagai bagian dari proyek, Anda dapat berinteraksi dengan penyedia berbeda di platform berbeda.

Sumber daya (deskripsi sumber daya).

Deskripsi sumber daya memungkinkan Anda mengelola komponen platform, seperti mesin virtual atau jaringan. 

Anda dapat membuat sendiri deskripsi sumber daya untuk penyedia VMware vCloud Director dan menggunakan deskripsi ini untuk membuat sumber daya dengan penyedia hosting mana pun yang menggunakan vCloud Director. Anda hanya perlu mengubah parameter otentikasi dan parameter koneksi jaringan ke penyedia hosting yang diperlukan

Penyedia.

Komponen ini memungkinkan untuk melakukan operasi untuk instalasi awal dan pemeliharaan sistem operasi setelah pembuatan mesin virtual. Setelah Anda membuat sumber daya mesin virtual, Anda dapat menggunakan penyedia untuk mengonfigurasi dan terhubung melalui SSH, memperbarui sistem operasi, serta mengunduh dan menjalankan skrip. 

Variabel Masukan dan Keluaran.

Variabel masukan - variabel masukan untuk semua jenis blok. 

Variabel keluaran memungkinkan Anda menyimpan nilai setelah membuat sumber daya dan dapat digunakan sebagai variabel masukan di modul lain, misalnya di blok Penyedia.

Amerika.

File negara menyimpan informasi tentang konfigurasi sumber daya platform penyedia. Saat platform pertama kali dibuat, tidak ada informasi tentang sumber daya dan sebelum operasi apa pun, Terraform memperbarui status dengan infrastruktur nyata dari sumber daya yang telah dijelaskan.

Tujuan utama negara bagian adalah untuk menyimpan sekumpulan objek dari sumber daya yang sudah dibuat untuk membandingkan konfigurasi sumber daya dan objek yang ditambahkan untuk menghindari pembuatan dan perubahan berulang pada platform.

Secara default, informasi status disimpan dalam file terraform.tfstate lokal, tetapi jika perlu, penyimpanan jarak jauh dapat digunakan untuk kerja tim.

Anda juga dapat mengimpor sumber daya platform saat ini ke status untuk berinteraksi lebih lanjut dengan sumber daya lain yang dibuat tanpa bantuan Terraform.  

2. Penciptaan infrastruktur

Komponen sudah beres, sekarang dengan menggunakan Terraform kita secara bertahap akan membuat infrastruktur dengan tiga mesin virtual. Yang pertama dengan server proxy nginx terinstal, yang kedua dengan penyimpanan file berbasis Nextcloud dan yang ketiga dengan CMS Bitrix.

Kami akan menulis kode dan mengeksekusinya menggunakan contoh kami cloud di VMware vCloud Director. Pengguna kami menerima akun dengan hak Administrator Organisasi. Jika Anda menggunakan akun dengan hak yang sama di cloud VMware lain, Anda dapat mereproduksi kode dari contoh kami. Pergi!

Pertama, mari buat direktori untuk proyek baru kita di mana file yang menjelaskan infrastruktur akan ditempatkan.

mkdir project01

Selanjutnya, kami menjelaskan komponen infrastruktur. Terraform membuat hubungan dan memproses file berdasarkan deskripsi di file. File itu sendiri dapat diberi nama berdasarkan tujuan blok yang dijelaskan, misalnya network.tf - menjelaskan parameter jaringan untuk infrastruktur.

Untuk menjelaskan komponen infrastruktur kami, kami membuat file berikut:

Daftar file.

main.tf - deskripsi parameter untuk lingkungan virtual - mesin virtual, wadah virtual;

network.tf - deskripsi parameter jaringan virtual dan aturan NAT dan Firewall;

variabel.tf - daftar variabel yang kami gunakan;

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

Bahasa konfigurasi di Terraform bersifat deklaratif dan urutan blok tidak menjadi masalah, kecuali blok penyedia, karena di blok ini kami menjelaskan perintah yang akan dijalankan saat menyiapkan infrastruktur dan akan dijalankan secara berurutan.

Struktur blok.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Untuk mendeskripsikan blok, digunakan bahasa pemrogramannya sendiri HCL (HashiCorp Configuration Language), dimungkinkan untuk mendeskripsikan infrastruktur menggunakan JSON. Anda dapat mempelajari lebih lanjut tentang sintaksisnya baca di situs web pengembang.

Konfigurasi variabel lingkungan, variabel.tf dan vcd.tfvars

Pertama, mari buat dua file yang menjelaskan daftar semua variabel yang digunakan dan nilainya untuk modul VMware vCloud Director. Pertama, mari kita buat file variabel.tf.

Isi file variabel.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 yang kami terima dari penyedia.

  • vcd_org_user — nama pengguna dengan hak Administrator Organisasi,

  • vcd_org_password — kata sandi pengguna,

  • vcd_org — nama organisasi,

  • vcd_org_vdc — nama pusat data virtual,

  • vcd_org_url - URL API,

  • vcd_org_edge_name — nama router virtual,

  • vcd_org_catalog — nama direktori dengan templat mesin virtual,

  • vcd_edge_external_ip — alamat IP publik,

  • vcd_edge_external_network — nama jaringan eksternal,

  • vcd_org_hdd_sp — nama kebijakan penyimpanan HDD,

  • vcd_org_ssd_sp — nama kebijakan penyimpanan SSD.

Dan masukkan variabel kami:

  • vcd_edge_local_ip_nginx — Alamat IP mesin virtual dengan NGINX,

  • vcd_edge_local_ip_bitrix - Alamat IP mesin virtual dengan 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — Alamat IP mesin virtual dengan Nextcloud.

Dengan file kedua kita membuat dan menentukan variabel untuk modul VMware vCloud Director di file vcd.tfvars: Mari kita ingat bahwa dalam contoh kita, kita menggunakan cloud mClouds sendiri, jika Anda bekerja dengan penyedia lain, periksa nilainya dengan mereka. 

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, jaringan.tf.

Variabel lingkungan sudah diatur, sekarang kita akan menyiapkan skema koneksi mesin virtual - kita akan menetapkan alamat IP pribadi untuk setiap mesin virtual dan menggunakan NAT Tujuan untuk "meneruskan" port ke jaringan eksternal. Untuk membatasi akses ke port manajemen, kami akan mengatur akses hanya untuk alamat IP kami.

Cara Mengelola Infrastruktur Cloud dengan TerraformDiagram jaringan untuk platform Terraform sedang dibuat

Kami membuat jaringan organisasi virtual dengan nama net_lan01, gateway default: 192.168.110.254, dan juga dengan ruang alamat: 192.168.110.0/24.

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

  }

}

Mari buat aturan firewall yang mengizinkan mesin virtual mengakses Internet. Dalam blok ini, semua sumber daya virtual di cloud akan memiliki akses ke Internet:

Kami menjelaskan aturan 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 ketergantungan bahwa setelah memproses blok vcdnetworkrouted.net, kami melanjutkan untuk mengkonfigurasi blok vcdnsxvfirewallrule, омощью tergantung pada. Kami menggunakan opsi ini karena beberapa dependensi mungkin dikenali secara implisit dalam konfigurasi.

Selanjutnya, kita akan membuat aturan yang mengizinkan akses ke port dari jaringan eksternal dan menunjukkan alamat IP kita untuk menghubungkan melalui SSH ke server. Setiap pengguna Internet memiliki akses ke port 80 dan 443 di server web, dan pengguna dengan alamat IP 90.1.15.1 memiliki akses ke port SSH di server virtual.

Izinkan akses ke port dari 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]

}

Kami membuat aturan Sumber NAT untuk mengakses Internet dari jaringan lokal cloud:

Kami menjelaskan aturan Sumber 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 menyelesaikan konfigurasi blok jaringan, kami menambahkan aturan NAT Tujuan untuk mengakses layanan dari jaringan eksternal:

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

}

Tambahkan aturan NAT untuk terjemahan port ke server 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 aturan NAT untuk terjemahan port ke server 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 aturan NAT untuk terjemahan port ke server 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 lingkungan virtual Main.tf

Seperti yang kami rencanakan di awal artikel, kami akan membuat tiga mesin virtual. Mereka akan dipersiapkan menggunakan "Kustomisasi Tamu". Kami akan mengatur parameter jaringan sesuai dengan pengaturan yang kami tentukan, dan kata sandi pengguna akan dibuat secara otomatis.

Mari kita jelaskan vApp tempat mesin virtual akan ditempatkan dan konfigurasinya.

Cara Mengelola Infrastruktur Cloud dengan TerraformKonfigurasi mesin virtual

Mari buat wadah vApp. Agar kita bisa langsung menghubungkan vApp dan VM ke jaringan virtual, kita juga menambahkan parameter depend_on:

Buat wadah

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

}

Mari buat mesin virtual dengan 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 dalam deskripsi VM:

  • nama — nama mesin virtual,

  • vappname - nama vApp yang akan ditambahkan VM baru,

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

  • profil penyimpanan - kebijakan penyimpanan default.

Parameter blok jaringan:

  • tipe — jenis jaringan yang terhubung,

  • nama — jaringan virtual mana yang akan dihubungkan dengan VM,

  • isprimary - adaptor jaringan utama,

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

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

blok override_template_disk:

  • sizeinmb — ukuran boot disk untuk mesin virtual

  • storage_profile — kebijakan penyimpanan untuk disk

Mari buat VM kedua dengan deskripsi penyimpanan 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 ]

}

Pada bagian vcdvminternal_disk kami akan menjelaskan disk virtual baru yang terhubung ke mesin virtual.

Penjelasan untuk blok vcdvminternaldisk:

  • tipe bus - tipe pengontrol disk

  • sizeinmb — ukuran disk

  • busnumber / unitnumber - lokasi koneksi di adaptor

  • storage_profile — kebijakan penyimpanan untuk disk

Mari kita uraikan VM terbaru di 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

}

}

Memperbarui OS dan menginstal skrip tambahan

Jaringan disiapkan, mesin virtual dijelaskan. Sebelum mengimpor infrastruktur, kami dapat melakukan provisi awal terlebih dahulu menggunakan blok provisi dan tanpa menggunakan Ansible.

Mari kita lihat cara memperbarui OS dan menjalankan skrip instalasi CMS Bitrix menggunakan blok penyedia.

Pertama, mari kita instal paket pembaruan 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" ]

}

}

}

Penunjukan komponen:

  • penyedia "remote-exec" - sambungkan blok penyediaan jarak jauh

  • Di blok koneksi kami menjelaskan jenis dan parameter koneksi:

  • ketik — protokol, dalam kasus kami SSH;

  • pengguna — nama pengguna;

  • kata sandi — kata sandi pengguna. Dalam kasus kami, kami menunjuk ke parameter vcdvappvm.nginx.customization[0].admin_password, yang menyimpan kata sandi yang dihasilkan untuk pengguna sistem.

  • host — alamat IP eksternal untuk koneksi;

  • port — port untuk koneksi, yang sebelumnya ditentukan dalam pengaturan DNAT;

  • inline - daftar daftar perintah yang akan dimasukkan. Perintah akan dimasukkan secara berurutan seperti yang ditunjukkan di bagian ini.

Sebagai contoh, mari kita jalankan juga skrip instalasi 1C-Bitrix. Output hasil eksekusi skrip akan tersedia saat rencana berjalan. Untuk menginstal skrip, pertama-tama kita jelaskan bloknya:

Mari kita jelaskan 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"

]

}

Dan kami akan segera menjelaskan update Bitrix.

Contoh penyediaan 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 menonaktifkan SELinux terlebih dahulu! Jika Anda memerlukan artikel mendetail tentang menginstal dan mengkonfigurasi CMS 1C-Bitrix menggunakan bitrix-env.sh, oo Anda bisa gunakan artikel blog kami di situs web.

3. Inisialisasi infrastruktur

Cara Mengelola Infrastruktur Cloud dengan TerraformInisialisasi modul dan plugin

Untuk pekerjaan, kami menggunakan "gentleman's kit" sederhana: laptop dengan OS Windows 10 dan kit distribusi dari situs resmi terraform.io. Mari kita buka kemasannya dan inisialisasi menggunakan perintah: terraform.exe init

Setelah menjelaskan infrastruktur komputasi dan jaringan, kami meluncurkan perencanaan untuk menguji konfigurasi kami, di mana kami dapat melihat apa yang akan dibuat dan bagaimana itu akan dihubungkan satu sama lain.

  1. Jalankan perintah - terraform plan -var-file=vcd.tfvars.

  2. Kami mendapatkan hasilnya - Plan: 16 to add, 0 to change, 0 to destroy. Artinya, menurut rencana ini, 16 sumber daya akan dibuat.

  3. Kami meluncurkan rencana sesuai perintah - terraform.exe apply -var-file=vcd.tfvars.

Mesin virtual akan dibuat, dan kemudian paket yang kami daftarkan akan dijalankan di bagian penyedia - OS akan diperbarui dan CMS Bitrix akan diinstal.

Menerima data koneksi

Setelah menjalankan rencana, kami ingin menerima data dalam bentuk teks untuk menghubungkan ke server, untuk ini kami akan memformat bagian output sebagai berikut:

output "nginxpassword" {

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

}

Dan keluaran berikut memberi tahu kita kata sandi untuk mesin virtual yang dibuat:

Outputs: nginx_password = F#4u8!!N

Hasilnya, kami mendapatkan akses ke mesin virtual dengan sistem operasi yang diperbarui dan paket pra-instal untuk pekerjaan kami selanjutnya. Semuanya sudah siap!

Namun bagaimana jika Anda sudah memiliki infrastruktur?

3.1. Terraform Bekerja dengan infrastruktur yang ada

Sederhana saja, Anda dapat mengimpor mesin virtual saat ini dan container vApp-nya menggunakan perintah import.

Mari kita jelaskan sumber daya vAPP dan 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 selanjutnya adalah mengimpor properti sumber daya vApp dalam format vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, di mana:

  • vApp - nama vApp;

  • org — nama organisasi;

  • org_vdc — nama pusat data virtual.

Cara Mengelola Infrastruktur Cloud dengan TerraformMengimpor properti sumber daya vAPP

Mari impor properti sumber daya VM dalam format: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, di mana:

  • VM - nama VM;

  • vApp - nama vApp;

  • org — nama organisasi;

  • orgvdc adalah nama pusat data virtual.

Impor berhasil

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 dapat melihat sumber daya baru yang diimpor:

Sumber daya yang 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"

}

}

Sekarang kami benar-benar siap - kami telah selesai dengan poin terakhir (mengimpor ke infrastruktur yang ada) dan telah mempertimbangkan semua poin utama dalam bekerja dengan Terraform. 

Alat ini ternyata sangat nyaman dan memungkinkan Anda mendeskripsikan infrastruktur Anda sebagai kode, mulai dari mesin virtual dari satu penyedia cloud hingga mendeskripsikan sumber daya komponen jaringan.

Pada saat yang sama, kemandirian dari lingkungan memungkinkan untuk bekerja dengan sumber daya lokal, cloud, dan bahkan mengelola platform. Dan jika tidak ada platform yang didukung dan Anda ingin menambahkan yang baru, Anda dapat menulis penyedia Anda sendiri dan menggunakannya.

Sumber: www.habr.com

Tambah komentar