Terraform көмегімен бұлттық инфрақұрылымды қалай басқаруға болады

Terraform көмегімен бұлттық инфрақұрылымды қалай басқаруға болады

Бұл мақалада біз Terraform неден тұратынын қарастырамыз, сонымен қатар өз инфрақұрылымымызды біртіндеп іске қосамыз. VMware көмегімен бұлтта — біз әртүрлі мақсаттар үшін үш VM дайындаймыз: прокси, файлдарды сақтау және CMS.

Барлығы туралы егжей-тегжейлі және үш кезеңде:

1. Терраформа – сипаттамасы, артықшылықтары және құрамдас бөліктері

Terraform - кодты пайдаланып виртуалды инфрақұрылымды құруға және басқаруға арналған IaC (Infrastructure-as-Code) құралы.

Құралмен жұмыс істеудің бірнеше артықшылықтарын атап өттік:

  • Жаңа жалға алушылардың орналастыру жылдамдығы (арнаулы виртуалды орталар). Әдетте, жаңа клиенттер неғұрлым көп болса, техникалық қолдау көрсету қызметкерлері жаңа ресурстарды жариялау үшін соғұрлым көп «нұқу» жасауы керек. Terraform көмегімен пайдаланушылар виртуалды машина параметрлерін (мысалы, ОЖ-ны автоматты түрде өшіру және виртуалды диск бөлімін ұлғайту) техникалық қолдауды қажет етпей немесе құрылғының өзін өшірмей өзгерте алады.

  • Белсендіру жоспарын лезде тексеру жаңа Теннант. Инфрақұрылымдық кодтың сипаттамасын пайдалана отырып, біз бірден не қосылатынын және қандай ретпен, сондай-ақ осы немесе басқа виртуалды машинаның немесе виртуалды машиналарға қосылымдары бар виртуалды желінің қандай соңғы күйде болатынын тексере аламыз.

  • Ең танымал бұлттық платформаларды сипаттау мүмкіндігі. Сіз құралды пайдалана аласыз Amazon және Google Cloud-тан IaaS, SaaS және PaaS шешімдерінде қызметтер ұсынатын VMware vCloud Director негізіндегі жеке платформаларға дейін.

  • Бірнеше бұлттық провайдерлерді басқарыңыз және бұлтты ресурстарды жасау, диагностикалау және басқару үшін бір конфигурацияны пайдалана отырып, ақауларға төзімділікті жақсарту үшін олардың арасында инфрақұрылымды таратыңыз.

  • Демо-стендтер жасау үшін ыңғайлы пайдалану бағдарламалық қамтамасыз етуді тексеру және жөндеу үшін. Тек бір ресурс құру жоспарын жасау арқылы тестілеу бөлімі үшін стендтерді жасауға және тасымалдауға, бағдарламалық құралды әртүрлі орталарда параллельді тексеруге және ресурстарды лезде өзгертуге және жоюға болады.

«Террариум» Терраформасы

Біз құралдың артықшылықтары туралы қысқаша айттық, енді оны құрамдас бөліктерге бөлейік

Провайдерлер. 

Terraform-та кез келген дерлік инфрақұрылым түрі ресурс ретінде ұсынылуы мүмкін. Ресурстар мен API платформасы арасындағы байланыс белгілі бір платформада ресурстар жасауға мүмкіндік беретін провайдер модульдері арқылы қамтамасыз етіледі, мысалы, Azure немесе VMware vCloud Director.

Жобаның бір бөлігі ретінде әртүрлі платформаларда әртүрлі провайдерлермен өзара әрекеттесуге болады.

Ресурстар (ресурс сипаттамасы).

Ресурстардың сипаттамасы виртуалды машиналар немесе желілер сияқты платформа құрамдастарын басқаруға мүмкіндік береді. 

VMware vCloud Director провайдері үшін ресурс сипаттамасын өзіңіз жасай аласыз және осы сипаттаманы vCloud Director қызметін пайдаланатын кез келген хостинг провайдерімен ресурстар жасау үшін пайдалана аласыз. Сізге тек аутентификация параметрлері мен желілік қосылым параметрлерін қажетті хостинг провайдеріне өзгерту қажет

Провайдерлер.

Бұл компонент виртуалды машиналарды жасағаннан кейін операциялық жүйені бастапқы орнату және техникалық қызмет көрсету операцияларын орындауға мүмкіндік береді. Виртуалды машина ресурсын жасағаннан кейін SSH арқылы конфигурациялау және қосылу, амалдық жүйені жаңарту және сценарийді жүктеп алу және іске қосу үшін провайдерлерді пайдалануға болады. 

Енгізу және шығару айнымалылары.

Енгізілетін айнымалылар – кез келген блок түрлеріне арналған кіріс айнымалылары. 

Шығару айнымалылары ресурстарды жасағаннан кейін мәндерді сақтауға мүмкіндік береді және басқа модульдерде, мысалы, Provisioners блогында енгізу айнымалылары ретінде пайдаланылуы мүмкін.

мемлекеттер.

Күй файлдары провайдер платформасының ресурстарының конфигурациясы туралы ақпаратты сақтайды. Платформа алғаш рет жасалған кезде, ресурстар туралы ақпарат жоқ және кез келген операция алдында Terraform күйді бұрыннан сипатталған ресурстардың нақты инфрақұрылымымен жаңартады.

Күйлердің негізгі мақсаты платформаға қайталанатын жасау мен өзгертулерді болдырмау үшін қосылған ресурстар мен объектілердің конфигурациясын салыстыру үшін бұрыннан жасалған ресурстар объектілерінің жиынын сақтау болып табылады.

Әдепкі бойынша күй ақпараты жергілікті terraform.tfstate файлында сақталады, бірақ қажет болса, топтық жұмыс үшін қашықтағы жадты пайдалануға болады.

Сондай-ақ, Terraform көмегінсіз жасалған басқа ресурстармен әрі қарай әрекеттесу үшін ағымдағы платформа ресурстарын күйге импорттай аласыз.  

2. Инфрақұрылымды құру

Құрамдас бөліктер сұрыпталды, енді Terraform көмегімен біз үш виртуалды машинасы бар инфрақұрылымды біртіндеп жасаймыз. Біріншісі орнатылған nginx прокси серверімен, екіншісі Nextcloud негізіндегі файлдарды сақтауымен және үшіншісі CMS Bitrix көмегімен.

Біз кодты жазып, оны мысал арқылы орындаймыз VMware vCloud директорындағы бұлттар. Біздің пайдаланушылар Ұйым әкімшісі құқықтары бар тіркелгіні алады. Егер сіз басқа VMware бұлтында бірдей құқықтары бар тіркелгіні пайдалансаңыз, кодты мысалдарымыздан қайта жасай аласыз. Бар!

Алдымен, инфрақұрылымды сипаттайтын файлдар орналастырылатын жаңа жобамыз үшін каталог жасайық.

mkdir project01

Әрі қарай, біз инфрақұрылым құрамдастарын сипаттаймыз. Terraform файлдардағы сипаттамалар негізінде қарым-қатынастар жасайды және файлдарды өңдейді. Файлдардың өздері сипатталған блоктардың мақсатына қарай аталуы мүмкін, мысалы, network.tf - инфрақұрылымға арналған желі параметрлерін сипаттайды.

Инфрақұрылымның құрамдастарын сипаттау үшін біз келесі файлдарды жасадық:

Файлдар тізімі.

main.tf - виртуалды орта үшін параметрлерді сипаттау - виртуалды машиналар, виртуалды контейнерлер;

network.tf - виртуалды желі параметрлерінің сипаттамасы және NAT және Firewall ережелері;

variables.tf - біз қолданатын айнымалылар тізімі;

vcd.tfvars - VMware vCloud Director модулі үшін жобаның айнымалы мәндері.

Terraform ішіндегі конфигурация тілі декларативті болып табылады және провайдер блоктарынан басқа блоктардың реті маңызды емес, өйткені бұл блокта біз инфрақұрылымды дайындау кезінде орындалатын командаларды сипаттаймыз және олар ретімен орындалады.

Блок құрылымы.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Блоктарды сипаттау үшін оның HCL (HashiCorp Configuration Language) программалау тілі пайдаланылады, JSON көмегімен инфрақұрылымды сипаттауға болады. Синтаксис туралы көбірек біле аласыз әзірлеушінің веб-сайтында оқыңыз.

Ортаның айнымалы конфигурациясы, variables.tf және vcd.tfvars

Алдымен, VMware vCloud Director модулі үшін барлық пайдаланылған айнымалылар тізімін және олардың мәндерін сипаттайтын екі файлды жасайық. Алдымен variables.tf файлын жасайық.

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

Біз провайдерден алатын айнымалы мәндер.

  • vcd_org_user — Ұйым әкімшісі құқықтары бар пайдаланушы аты,

  • vcd_org_password — пайдаланушы құпия сөзі,

  • vcd_org — ұйымның атауы,

  • vcd_org_vdc — виртуалды деректер орталығының атауы,

  • vcd_org_url - API URL мекенжайы,

  • vcd_org_edge_name — виртуалды маршрутизатордың аты,

  • vcd_org_catalog — виртуалды машина үлгілері бар каталог атауы,

  • vcd_edge_external_ip — жалпыға ортақ IP мекенжайы,

  • vcd_edge_external_network — сыртқы желінің атауы,

  • vcd_org_hdd_sp — HDD сақтау саясатының атауы,

  • vcd_org_ssd_sp — SSD сақтау саясатының атауы.

Және айнымалы мәндерді енгізіңіз:

  • vcd_edge_local_ip_nginx — NGINX бар виртуалды машинаның IP мекенжайы,

  • vcd_edge_local_ip_bitrix - 1C бар виртуалды машинаның IP мекенжайы: Bitrix,

  • vcd_edge_local_ip_nextcloud — Nextcloud көмегімен виртуалды машинаның IP мекенжайы.

Екінші файл арқылы біз vcd.tfvars файлында VMware vCloud Director модулі үшін айнымалы мәндерді жасаймыз және көрсетеміз: Біздің мысалда біз қолданатынымызды еске түсірейік. жеке бұлттық mClouds, басқа провайдермен жұмыс істесеңіз, олармен мәндерді тексеріңіз. 

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"

Желі конфигурациясы, network.tf.

Қоршаған ортаның айнымалы мәндері орнатылды, енді виртуалды машинаның қосылу схемасын орнатамыз - біз әрбір виртуалды машинаға жеке IP мекенжайын тағайындаймыз және порттарды сыртқы желіге «алға жіберу» үшін Destination NAT пайдаланамыз. Басқару порттарына қол жеткізуді шектеу үшін біз тек IP мекенжайымыз үшін рұқсатты орнатамыз.

Terraform көмегімен бұлттық инфрақұрылымды қалай басқаруға боладыTerraform платформасының желілік диаграммасы жасалуда

Біз net_lan01 атауымен виртуалды ұйымдық желіні жасаймыз, әдепкі шлюз: 192.168.110.254, сонымен қатар мекенжай кеңістігі: 192.168.110.0/24.

Біз виртуалды желіні сипаттаймыз.

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"

  }

}

Виртуалды машиналарға Интернетке кіруге мүмкіндік беретін желіаралық қалқан ережелерін жасайық. Бұл блоктың ішінде бұлттағы барлық виртуалды ресурстар Интернетке қол жеткізе алады:

Біз Интернетке VM кіру ережелерін сипаттаймыз.

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]

}

Vcdnetworkrouted.net блогын өңдегеннен кейін біз vcdnsxvfirewallrule блогын конфигурациялауға кірісеміз деген тәуелділікті анықтай отырып, көмегімен байланысты. Біз бұл опцияны қолданамыз, себебі кейбір тәуелділіктер конфигурацияда жасырын түрде танылуы мүмкін.

Әрі қарай, біз сыртқы желіден порттарға қол жеткізуге мүмкіндік беретін ережелерді жасаймыз және серверлерге SSH арқылы қосылу үшін IP мекенжайымызды көрсетеміз. Кез келген Интернет пайдаланушысы веб-сервердегі 80 және 443 порттарына, ал IP мекенжайы 90.1.15.1 пайдаланушы виртуалды серверлердің SSH порттарына қол жеткізе алады.

Сыртқы желіден порттарға кіруге рұқсат беріңіз.

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]

}

Біз бұлтты жергілікті желіден Интернетке кіру үшін Source NAT ережелерін жасаймыз:

Біз 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]

}

Желі блогының конфигурациясын аяқтау үшін сыртқы желіден қызметтерге қол жеткізу үшін Destination NAT ережелерін қосамыз:

Destination NAT ережелерін қосу.

resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

  description = "NGINX HTTPs"

original_address = var.vcd_edge_external_ip
original_port = 443

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"

depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "NGINX HTTP"

original_address = var.vcd_edge_external_ip
original_port = 80

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Nginx астындағы SSH серверіне портты аудару үшін NAT ережесін қосыңыз.

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]

}

1C-Bitrix көмегімен SSH серверіне портты аудару үшін NAT ережесін қосыңыз.

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]

}

Nextcloud көмегімен SSH серверіне портты аудару үшін NAT ережесін қосыңыз.

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]

}

Main.tf виртуалды орта конфигурациясы

Мақаланың басында жоспарлағанымыздай, біз үш виртуалды машина жасаймыз. Олар «Қонақтарды теңшеу» арқылы дайындалады. Біз желі параметрлерін біз көрсеткен параметрлерге сәйкес орнатамыз және пайдаланушы құпия сөзі автоматты түрде жасалады.

Виртуалды машиналар орналасатын vApp қолданбасын және олардың конфигурациясын сипаттап көрейік.

Terraform көмегімен бұлттық инфрақұрылымды қалай басқаруға боладыВиртуалды машина конфигурациясы

vApp контейнерін жасайық. vApp және VM виртуалды желіге бірден қосыла алуымыз үшін, біз тәуелді_он параметрін қосамыз:

Контейнер жасаңыз

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

}

Сипаттамасымен виртуалды машинаны жасайық

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

}

}

VM сипаттамасындағы негізгі параметрлер:

  • атауы — виртуалды машинаның аты,

  • vappname - жаңа VM қосылатын vApp атауы,

  • каталог атауы / шаблон атауы - каталог атауы және виртуалды машина үлгісінің атауы,

  • сақтау профилі - әдепкі сақтау саясаты.

Желі блогының параметрлері:

  • түрі — қосылған желінің түрі,

  • атауы — виртуалды желіні қандай виртуалды желіге қосу керек;

  • isprimary - негізгі желі адаптері,

  • ipallocation_mode — MANUAL / DHCP / POOL мекенжайын бөлу режимі,

  • ip — виртуалды машинаның IP мекенжайы, біз оны қолмен анықтаймыз.

override_template_disk блогы:

  • sizeinmb — виртуалды машина үшін жүктеу дискінің өлшемі

  • storage_profile — дискіні сақтау саясаты

Nextcloud файл қоймасының сипаттамасы бар екінші VM жасайық

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 ]

}

vcdvminternal_disk бөлімінде біз виртуалды машинаға қосылған жаңа виртуалды дискіні сипаттаймыз.

vcdvminternaldisk блогы үшін түсініктемелер:

  • bustype - диск контроллерінің түрі

  • sizeinmb — диск өлшемі

  • автобус нөмірі / бірлік нөмірі - адаптердегі қосылым орны

  • storage_profile — дискіні сақтау саясаты

Bitrix жүйесіндегі соңғы VM-ді сипаттап көрейік

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

}

}

ОЖ-ны жаңарту және қосымша сценарийлерді орнату

Желі дайындалды, виртуалды машиналар сипатталады. Инфрақұрылымды импорттамас бұрын біз провайдер блоктарын пайдаланып және Ansible қолданбай-ақ бастапқы қамтамасыз етуді алдын ала орындай аламыз.

Операциялық жүйені жаңарту және провайдер блогын пайдаланып CMS Bitrix орнату сценарийін іске қосу жолын қарастырайық.

Алдымен 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" ]

}

}

}

Компоненттерді белгілеу:

  • «remote-exec» провайдері - қашықтағы қамтамасыз ету блогын қосыңыз

  • Қосылым блогында біз қосылымның түрі мен параметрлерін сипаттаймыз:

  • түрі — протокол, біздің жағдайда SSH;

  • пайдаланушы — пайдаланушы аты;

  • құпия сөз — пайдаланушы құпия сөзі. Біздің жағдайда жүйе пайдаланушысы үшін жасалған құпия сөзді сақтайтын vcdvappvm.nginx.customization[0].admin_password параметрін көрсетеміз.

  • хост — қосылу үшін сыртқы IP мекенжайы;

  • порт — қосылуға арналған порт, ол бұрын DNAT параметрлерінде көрсетілген;

  • inline - енгізілетін пәрмендер тізімін көрсетіңіз. Пәрмендер осы бөлімде көрсетілгендей ретпен енгізіледі.

Мысал ретінде 1C-Bitrix орнату сценарийін қосымша орындайық. Сценарийдің орындалу нәтижесінің нәтижесі жоспар орындалып жатқанда қолжетімді болады. Сценарийді орнату үшін алдымен блокты сипаттаймыз:

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"

]

}

Біз бірден Bitrix жаңартуын сипаттайтын боламыз.

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"

]

}

}

Маңызды! SELinux-ты алдын ала өшірмесеңіз, сценарий жұмыс істемеуі мүмкін! Егер сізге bitrix-env.sh арқылы CMS 1C-Bitrix орнату және конфигурациялау туралы егжей-тегжейлі мақала қажет болса, oo сіз веб-сайттағы біздің блог мақаласын пайдаланыңыз.

3. Инфрақұрылымды инициализациялау

Terraform көмегімен бұлттық инфрақұрылымды қалай басқаруға боладыМодульдер мен плагиндерді инициализациялау

Жұмыс үшін біз қарапайым «джентльмен жинағын» қолданамыз: Windows 10 операциялық жүйесі бар ноутбук және ресми веб-сайттағы тарату жинағы terraform.io. Пәрменді пайдаланып қаптаманы ашамыз және инициализациялаймыз: terraform.exe init

Есептеу және желілік инфрақұрылымды сипаттағаннан кейін біз конфигурациямызды тексеру үшін жоспарлауды бастаймыз, онда не жасалатынын және оның бір-бірімен қалай қосылатынын көре аламыз.

  1. Пәрменді орындаңыз - terraform plan -var-file=vcd.tfvars.

  2. Біз нәтиже аламыз - Plan: 16 to add, 0 to change, 0 to destroy. Яғни, бұл жоспар бойынша 16 ресурс құрылады.

  3. Біз жоспарды команда бойынша іске қосамыз - terraform.exe apply -var-file=vcd.tfvars.

Виртуалды машиналар жасалады, содан кейін біз тізімдеген пакеттер провайдер бөлімінде орындалады - ОЖ жаңартылады және CMS Bitrix орнатылады.

Қосылым деректерін қабылдау

Жоспарды орындағаннан кейін серверлерге қосылу үшін деректерді мәтіндік түрде алғымыз келеді, ол үшін шығыс бөлігін келесідей пішімдейміз:

output "nginxpassword" {

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

}

Келесі шығыс бізге жасалған виртуалды машинаның құпия сөзін айтады:

Outputs: nginx_password = F#4u8!!N

Нәтижесінде біз жаңартылған операциялық жүйесі бар виртуалды машиналарға және әрі қарай жұмыс істеу үшін алдын ала орнатылған пакеттерге қол жеткіземіз. Бәрі дайын!

Ал егер сізде бұрыннан бар инфрақұрылым болса ше?

3.1. Қолданыстағы инфрақұрылымы бар жұмыс Terraform

Бұл қарапайым, импорт пәрменін пайдаланып ағымдағы виртуалды машиналар мен олардың vApp контейнерлерін импорттай аласыз.

vAPP ресурсын және виртуалды машинаны сипаттап көрейік.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Келесі қадам пішімдегі vApp ресурстарының сипаттарын импорттау болып табылады vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, мұнда:

  • vApp - vApp атауы;

  • org — ұйымның атауы;

  • org_vdc — виртуалды деректер орталығының атауы.

Terraform көмегімен бұлттық инфрақұрылымды қалай басқаруға боладыvAPP ресурсының сипаттарын импорттау

VM ресурстарының сипаттарын пішімде импорттайық: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, онда:

  • VM - VM атауы;

  • vApp - vApp атауы;

  • org — ұйымның атауы;

  • orgvdc — виртуалды деректер орталығының атауы.

Импорт сәтті болды

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.

Енді біз жаңа импортталған ресурсты қарастыра аламыз:

Импортталған ресурс

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

}

}

Енді біз сөзсіз дайынбыз - біз соңғы нүктені (қолданыстағы инфрақұрылымға импорттау) аяқтадық және Terraform-пен жұмыс істеудің барлық негізгі тармақтарын қарастырдық. 

Құрал өте ыңғайлы болып шықты және бір бұлттық провайдердің виртуалды машиналарынан бастап желі құрамдастарының ресурстарын сипаттауға дейінгі инфрақұрылымды код ретінде сипаттауға мүмкіндік береді.

Сонымен қатар, қоршаған ортадан тәуелсіздік жергілікті, бұлттық ресурстармен жұмыс істеуге, тіпті платформаны басқаруға мүмкіндік береді. Қолдау көрсетілетін платформа болмаса және жаңасын қосқыңыз келсе, өзіңіздің провайдеріңізді жазып, оны пайдалануға болады.

Ақпарат көзі: www.habr.com

пікір қалдыру