Чӣ тавр идора кардани инфрасохтори абрӣ бо Terraform

Чӣ тавр идора кардани инфрасохтори абрӣ бо Terraform

В этой статье мы рассмотрим из чего состоит Terraform, а также поэтапно запустим собственную инфраструктуру дар абр бо VMware — мо се VM-ро барои мақсадҳои гуногун омода хоҳем кард: прокси, нигаҳдории файл ва CMS.

Дар бораи ҳама чиз ба таври муфассал ва дар се марҳила:

1. Terraform - тавсиф, афзалиятҳо ва ҷузъҳои

Terraform як воситаи IaC (Infrastructure-as-Code) барои сохтан ва идоракунии инфрасохтори виртуалӣ бо истифода аз код мебошад.

Мо якчанд бартариҳои кор бо асбобро қайд кардем:

  • Суръати ҷойгиркунии иҷорагирони нав (муҳитҳои виртуалии фармоишӣ). Одатан, чӣ қадаре ки муштариёни нав зиёд бошанд, ҳамон қадар кормандони дастгирии техникӣ барои нашри захираҳои нав бояд "клик" кунанд. Бо Terraform, корбарон метавонанд танзимоти мошини виртуалиро тағир диҳанд (масалан, ба таври худкор хомӯш кардани ОС ва зиёд кардани қисмати диски виртуалӣ) бидуни ниёз ба дастгирии техникӣ ё қатъ кардани худи мошин.

  • Моментальная проверка плана активации Теннант нав. Бо истифода аз тавсифи рамзи инфрасохтор, мо метавонем фавран тафтиш кунем, ки чӣ илова карда мешавад ва бо кадом тартиб, инчунин дар кадом ҳолати ниҳоӣ ин ё он мошини виртуалӣ ё шабакаи виртуалӣ бо пайвастшавӣ ба мошинҳои виртуалӣ.

  • Қобилияти тавсифи маъмултарин платформаҳои абрӣ. Шумо метавонед асбобро истифода баред аз Amazon ва Google Cloud, ба платформаҳои хусусӣ дар асоси VMware vCloud Director, ки хидматҳоро дар доираи ҳалли IaaS, SaaS ва PaaS пешниҳод мекунанд.

  • Управлять несколькими облачными провайдерами ва тақсим кардани инфрасохтор байни онҳо барои беҳтар кардани таҳаммулпазирии хатоҳо бо истифода аз конфигуратсияи ягона барои эҷод, ташхис ва идоракунии захираҳои абрӣ.

  • Истифодаи қулай барои сохтани стендҳои намоишӣ барои санҷиш ва ислоҳи нармафзор. Шумо метавонед барои шӯъбаи санҷиш стендҳо эҷод ва интиқол диҳед, нармафзорро дар муҳитҳои гуногун дар як вақт санҷед ва бо эҷоди танҳо як нақшаи сохтани захираҳо захираҳоро фавран тағир диҳед ва нест кунед.

"Террариум" Терраформа

Мо ба таври мухтасар дар бораи бартариҳои асбоб сӯҳбат кардем, ҳоло биёед онро ба ҷузъҳои он тақсим кунем

Таъминкунандагон. 

Дар Terraform, қариб ҳама намуди инфрасохторро метавон ҳамчун захира муаррифӣ кард. Пайвастшавӣ байни захираҳо ва платформаи API аз ҷониби модулҳои провайдер таъмин карда мешавад, ки ба шумо имкон медиҳанд захираҳоро дар як платформаи мушаххас эҷод кунед, масалан, Azure ё VMware vCloud Director.

Дар доираи лоиҳа шумо метавонед бо провайдерҳои гуногун дар платформаҳои гуногун муошират кунед.

Захираҳо (тафсири захираҳо).

Описание ресурсов позволяет управлять компонентами платформы, например виртуальными машинами или сетями. 

Шумо метавонед тавсифи захираҳоро барои провайдери VMware vCloud Director худатон эҷод кунед ва ин тавсифро барои эҷод кардани захираҳо бо ҳама провайдери хостинг, ки vCloud Director-ро истифода мебарад, истифода баред. Шумо танҳо бояд параметрҳои аутентификатсия ва параметрҳои пайвасти шабакаро ба провайдери хостинги зарурӣ тағир диҳед

Provisioners.

Ин ҷузъ имкон медиҳад, ки пас аз эҷоди мошинҳои виртуалӣ амалиётҳо барои насби аввалия ва нигоҳдории системаи оператсионӣ анҷом дода шаванд. Пас аз он ки шумо як манбаи мошини маҷозӣ эҷод кардед, шумо метавонед провайдерҳоро барои танзим ва пайвастшавӣ тавассути SSH истифода баред, системаи амалиётиро навсозӣ кунед ва скриптро зеркашӣ ва иҷро кунед. 

Тағйирёбандаҳои вуруд ва баромад.

Тағйирёбандаҳои воридотӣ - тағирёбандаҳои вуруд барои ҳама намуди блокҳо. 

Output переменные позволяют сохранить значения после создания ресурсов и могут быть использованы, как входные переменные в других модулях, например в блоке Provisioners.

Штатхо.

Файлҳои штатҳо маълумотро дар бораи конфигуратсияи захираҳои платформаи провайдер нигоҳ медоранд. Вақте ки платформа бори аввал офарида мешавад, дар бораи захираҳо маълумот мавҷуд нест ва пеш аз ҳама гуна амалиёт, Terraform ҳолатро бо инфрасохтори воқеии захираҳои аллакай тавсифшуда нав мекунад.

Ҳадафи асосии иёлотҳо захира кардани як қатор объектҳои захираҳои аллакай сохташуда барои муқоисаи конфигуратсияи захираҳо ва объектҳои иловашуда бо мақсади пешгирӣ кардани эҷод ва тағироти такрорӣ дар платформа мебошад.

Информация о состоянии по умолчанию хранится в локальном файле  terraform.tfstate, но при необходимости есть возможность использовать удаленное хранение для работы в команде.

Шумо инчунин метавонед захираҳои ҷории платформаро ба давлат ворид кунед, то бо дигар захираҳое, ки дар навбати худ бе кӯмаки Terraform сохта шудаанд, муошират кунед.  

2. Создание инфраструктуры

Компонентҳо ҷудо карда шуданд, ҳоло бо истифода аз Terraform мо тадриҷан инфрасохторро бо се мошини виртуалӣ эҷод мекунем. Якум бо сервери прокси nginx насб шудааст, дуюм бо нигаҳдории файл дар асоси Nextcloud ва сеюм бо CMS Bitrix.

Мо бо истифода аз мисоли худ код менависем ва онро иҷро мекунем абрҳо дар VMware vCloud Director. Корбарони мо ҳисобро бо ҳуқуқи администратори созмон мегиранд.Агар шумо ҳисобро бо ҳамон ҳуқуқҳо дар абри дигари 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 -ро созем.

Cодержимое файла 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 — суроғаи IP-и мошини виртуалӣ бо NGINX,

  • vcd_edge_local_ip_bitrix - суроғаи IP-и мошини виртуалӣ бо 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — суроғаи IP-и мошини виртуалӣ бо Nextcloud.

Бо файли дуюм мо тағирёбандаҳоро барои модули VMware vCloud Director дар файли vcd.tfvars эҷод ва муайян мекунем: Биёед ба ёд орем, ки дар мисоли худ мо истифода мебарем. 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 идома медиҳем., бо истифода аз dependson. Используем эту опцию, так как некоторые зависимости могут быть распознаны неявно в конфигурации.

Минбаъд, мо қоидаҳоеро эҷод мекунем, ки дастрасӣ ба портҳо аз шабакаи берунаро фароҳам меоранд ва суроғаи IP-и моро барои пайвастшавӣ тавассути SSH ба серверҳо нишон медиҳанд. Ҳар як корбари интернет ба портҳои 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-ро барои дастрасӣ ба хидматҳо аз шабакаи беруна илова мекунем:

Илова кардани қоидаҳои NAT Destination.

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]

}

Добавляем правило NAT для трансляции портов к SSH-серверу под 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]

}

Қоидаи NAT-ро барои тарҷумаи порт ба сервери SSH бо 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]

}

Қоидаи NAT-ро барои тарҷумаи порт ба сервери SSH бо 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]

}

Конфигуратсияи муҳити виртуалии Main.tf

Тавре ки мо дар аввали мақола ба нақша гирифта будем, мо се мошини виртуалӣ эҷод мекунем. Онҳо бо истифода аз "Мутобиқсозии меҳмонон" омода карда мешаванд. Мо параметрҳои шабакаро мувофиқи танзимоти муқарраркардаамон муқаррар мекунем ва пароли корбар ба таври худкор тавлид мешавад.

Биёед vApp-ро, ки дар он мошинҳои виртуалӣ ҷойгир мешаванд ва конфигуратсияи онҳоро тавсиф кунем.

Чӣ тавр идора кардани инфрасохтори абрӣ бо TerraformКонфигуратсияи мошини виртуалӣ

Биёед як контейнери vApp созем. Барои он ки мо фавран vApp ва VM-ро ба шабакаи виртуалӣ пайваст кунем, мо инчунин параметри depend_on -ро илова мекунем:

Эҷоди як контейнер

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 - номи vApp, ки ба он VM-и нав илова карда мешавад,

  • номи каталог / номи шаблон - номи каталог ва номи қолаби мошини виртуалӣ,

  • storageprofile — политика хранения по умолчанию.

Параметрҳои блоки шабака:

  • type — тип подключаемой сети,

  • ном - ба кадом шабакаи виртуалӣ барои пайваст кардани VM,

  • isprimary - адаптери шабакавии ибтидоӣ,

  • ipallocation_mode — режим выделения адреса MANUAL / DHCP / POOL,

  • ip — IP-адрес для виртуальной машины, укажем вручную.

блоки override_template_disk:

  • sizeinmb — андозаи диски пурборшаванда барои мошини виртуалӣ

  • storage_profile — сиёсати нигоҳдорӣ барои диск

Биёед як VM-и дуюмро бо тавсифи нигаҳдории файли 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 ]

}

Дар фасли vcdvminternal_disk мо диски нави виртуалиро, ки ба мошини маҷозӣ пайваст аст, тасвир хоҳем кард.

Шарҳҳо барои блоки vcdvminternaldisk:

  • bustype - навъи контролери диск

  • sizeinmb — размер диска

  • busnumber / unitnumber - ҷойгиршавии пайвастшавӣ дар адаптер

  • storage_profile — сиёсати нигоҳдорӣ барои диск

Опишем последнюю 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" - блоки таъминоти дурдастро пайваст кунед

  • В блоке connection описываем тип и параметры для подключения:

  • type — протокол, в нашем случае SSH;

  • истифодабаранда — номи корбар;

  • парол — пароли корбар. Дар ҳолати мо, мо ба параметри vcdvappvm.nginx.customization[0].admin_password ишора мекунем, ки пароли тавлидшуда барои корбари системаро нигоҳ медорад.

  • мизбон — суроғаи IP-и беруна барои пайвастшавӣ;

  • порт — порт барои пайвастшавӣ, ки қаблан дар танзимоти DNAT муқаррар шуда буд;

  • inline - рӯйхати фармонҳои воридшавандаро номбар кунед. Фармонҳо бо тартиби дар ин бахш нишондода ворид карда мешаванд.

Как пример, дополнительно выполним скрипт установки 1С-Битрикс. Вывод результата выполнения скрипта будет доступен во время выполнения плана. Для установки скрипта, сначала опишем блок:

Опишем установку 1С-Битрикс.

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-ро тавсиф хоҳем кард.

Пример провижининга 1С-Битрикс.

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! Если вам требуется подробная статья по установке и настройке CMS 1С-Битрикс с помощью bitrix-env.sh, оо вы можете мақолаи блоги моро дар вебсайт истифода баред.

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.

Мошинҳои виртуалӣ эҷод карда мешаванд ва баъд бастаҳое, ки мо номбар кардем, дар қисмати провайдер иҷро карда мешаванд - OS нав карда мешавад ва CMS Bitrix насб карда мешавад.

Гирифтани маълумоти пайвастшавӣ

Пас аз иҷрои нақша, мо мехоҳем маълумотро дар шакли матнӣ барои пайвастшавӣ ба серверҳо гирем, барои ин мо қисмати баромадро ба таври зерин формат мекунем:

output "nginxpassword" {

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

}

И следующий вывод сообщает нам пароль от созданной виртуальной машины:

Outputs: nginx_password = F#4u8!!N

Дар натиҷа, мо ба мошинҳои виртуалӣ бо системаи оператсионии навшуда ва бастаҳои қаблан насбшуда барои кори минбаъдаи худ дастрасӣ пайдо мекунем. Ҳама омода аст!

Аммо чӣ мешавад, агар шумо аллакай инфрасохтори мавҷуда дошта бошед?

3.1. Терраформаи корӣ бо инфрасохтори мавҷуда

Ин оддӣ аст, шумо метавонед бо истифода аз фармони воридот мошинҳои виртуалии ҷорӣ ва контейнерҳои 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 баррасӣ кардем. 

Восита хеле қулай баромад ва ба шумо имкон медиҳад, ки инфрасохтори худро ҳамчун код тавсиф кунед, аз мошинҳои виртуалии як провайдери абрӣ то тавсифи захираҳои ҷузъҳои шабака.

Ҳамзамон, мустақилият аз муҳити зист имкон медиҳад, ки бо захираҳои маҳаллӣ, абрӣ кор кунем ва ҳатто платформаро идора кунем. Ва агар ягон платформаи дастгирӣшаванда вуҷуд надошта бошад ва шумо мехоҳед платформаи нав илова кунед, шумо метавонед провайдери худро нависед ва аз он истифода баред.

Манбаъ: will.com

Илова Эзоҳ