Terraform සමඟ Cloud Infrastructure කළමනාකරණය කරන්නේ කෙසේද?

Terraform සමඟ Cloud Infrastructure කළමනාකරණය කරන්නේ කෙසේද?

මෙම ලිපියෙන් අපි Terraform සමන්විත වන්නේ කුමක්දැයි සොයා බලනු ඇති අතර, ක්‍රමයෙන් අපගේම යටිතල පහසුකම් දියත් කරමු VMware සමඟ වලාකුළෙහි - අපි විවිධ අරමුණු සඳහා VM තුනක් සූදානම් කරමු: ප්‍රොක්සි, ගොනු ගබඩාව සහ CMS.

සෑම දෙයක් ගැනම විස්තරාත්මකව සහ අදියර තුනකින්:

1. Terraform - විස්තරය, වාසි සහ සංරචක

Terraform යනු කේතය භාවිතයෙන් අතථ්‍ය යටිතල පහසුකම් ගොඩනැගීම සහ කළමනාකරණය කිරීම සඳහා IaC (යටිතල පහසුකම්-කේතය ලෙස) මෙවලමකි.

මෙවලම සමඟ වැඩ කිරීමේ වාසි කිහිපයක් අපි සටහන් කළෙමු:

  • නව කුලී නිවැසියන් යෙදවීමේ වේගය (අභිරුචි අතථ්‍ය පරිසරයන්). සාමාන්‍යයෙන්, නව සේවාදායකයින් වැඩි වන තරමට, නව සම්පත් ප්‍රකාශයට පත් කිරීම සඳහා තාක්ෂණික සහාය කාර්ය මණ්ඩලය වැඩි “ක්ලික්” කළ යුතුය. Terraform සමඟින්, පරිශීලකයින්ට තාක්ෂණික සහාය අවශ්‍ය නොවී හෝ යන්ත්‍රය වසා දැමීමකින් තොරව අතථ්‍ය යන්ත්‍ර සැකසුම් (උදාහරණයක් ලෙස, ස්වයංක්‍රීයව OS වසා දැමීම සහ අථත්‍ය තැටි කොටස වැඩි කිරීම) වෙනස් කළ හැකිය.

  • සක්රිය කිරීමේ සැලැස්ම ක්ෂණිකව තහවුරු කිරීම නව කුලී නිවැසියන්. යටිතල පහසුකම් කේතයේ විස්තරය භාවිතා කරමින්, අපට වහාම එකතු කරන්නේ කුමක්ද සහ කුමන අනුපිළිවෙලෙහිද යන්න මෙන්ම, මෙම හෝ එම අථත්‍ය යන්ත්‍රය හෝ අථත්‍ය යන්ත්‍ර සමඟ සම්බන්ධතා ඇති අථත්‍ය ජාලය කුමක්ද යන්න පරීක්ෂා කළ හැකිය.

  • වඩාත්ම ජනප්‍රිය වලාකුළු වේදිකා විස්තර කිරීමේ හැකියාව. ඔබට මෙවලම භාවිතා කළ හැකිය Amazon සහ Google Cloud වෙතින්, VMware vCloud Director මත පදනම් වූ පුද්ගලික වේදිකා වෙත, IaaS, SaaS සහ PaaS විසඳුම් තුළ සේවා පිරිනමයි.

  • බහු වලාකුළු සපයන්නන් කළමනාකරණය කරන්න සහ වලාකුළු සම්පත් නිර්මාණය කිරීම, රෝග විනිශ්චය කිරීම සහ කළමනාකරණය කිරීම සඳහා තනි වින්‍යාසයක් භාවිතා කරමින්, වැරදි ඉවසීම වැඩි දියුණු කිරීම සඳහා ඔවුන් අතර යටිතල පහසුකම් බෙදා හැරීම.

  • demo stands නිර්මාණය කිරීම සඳහා පහසු භාවිතය මෘදුකාංග පරීක්ෂණ සහ නිදොස්කරණය සඳහා. ඔබට පරීක්ෂණ දෙපාර්තමේන්තුව සඳහා ස්ටෑන්ඩ් තැනීමට සහ මාරු කිරීමට, සමාන්තරව විවිධ පරිසරවල මෘදුකාංග පරීක්ෂා කිරීමට සහ එක් සම්පත් ගොඩනැගීමේ සැලැස්මක් පමණක් නිර්මාණය කිරීමෙන් සම්පත් ක්ෂණිකව වෙනස් කිරීමට සහ මකා දැමීමට හැකිය.

"ටෙරරියම්" ටෙරාෆෝම්

මෙවලමෙහි ඇති වාසි ගැන අපි කෙටියෙන් කතා කළෙමු, දැන් අපි එය එහි සංරචක වලට කඩා දමමු

සපයන්නන්. 

Terraform හි, ඕනෑම ආකාරයක යටිතල පහසුකම් සම්පතක් ලෙස නිරූපණය කළ හැක. සම්පත් සහ API වේදිකාව අතර සම්බන්ධතාවය සපයන්නාගේ මොඩියුල මගින් සපයනු ලැබේ, එමඟින් ඔබට නිශ්චිත වේදිකාවක් තුළ සම්පත් නිර්මාණය කිරීමට ඉඩ සලසයි, උදාහරණයක් ලෙස, Azure හෝ VMware vCloud Director.

ව්යාපෘතියේ කොටසක් ලෙස, ඔබට විවිධ වේදිකාවල විවිධ සැපයුම්කරුවන් සමඟ අන්තර් ක්රියා කළ හැකිය.

සම්පත් (සම්පත් විස්තරය).

සම්පත් විස්තර කිරීම අතථ්‍ය යන්ත්‍ර හෝ ජාල වැනි වේදිකා සංරචක කළමනාකරණය කිරීමට ඔබට ඉඩ සලසයි. 

ඔබට VMware vCloud අධ්‍යක්ෂ සැපයුම්කරු සඳහා සම්පත් විස්තරයක් නිර්මාණය කළ හැකි අතර vCloud Director භාවිතා කරන ඕනෑම සත්කාරක සැපයුම්කරුවෙකු සමඟ සම්පත් නිර්මාණය කිරීමට මෙම විස්තරය භාවිතා කරන්න. ඔබට අවශ්‍ය සත්කාරක සපයන්නා වෙත සත්‍යාපන පරාමිති සහ ජාල සම්බන්ධතා පරාමිතීන් පමණක් වෙනස් කළ යුතුය

සැපයුම්කරුවන්.

මෙම සංරචකය අථත්ය යන්ත්ර නිර්මාණය කිරීමෙන් පසු මෙහෙයුම් පද්ධතියේ මූලික ස්ථාපනය සහ නඩත්තුව සඳහා මෙහෙයුම් සිදු කිරීමට හැකි වේ. ඔබ අතථ්‍ය යන්ත්‍ර සම්පතක් නිර්මාණය කළ පසු, ඔබට SSH හරහා වින්‍යාස කිරීමට සහ සම්බන්ධ කිරීමට, මෙහෙයුම් පද්ධතිය යාවත්කාලීන කිරීමට සහ ස්ක්‍රිප්ට් බාගත කර ධාවනය කිරීමට ප්‍රතිපාදන භාවිතා කළ හැක. 

ආදාන සහ ප්රතිදාන විචල්යයන්.

ආදාන විචල්‍යයන් - ඕනෑම බ්ලොක් වර්ගයක් සඳහා ආදාන විචල්‍යයන්. 

ප්‍රතිදාන විචල්‍ය මඟින් සම්පත් නිර්මාණය කිරීමෙන් පසු අගයන් සුරැකීමට ඔබට ඉඩ ලබා දෙන අතර අනෙකුත් මොඩියුලවල ආදාන විචල්‍යයන් ලෙස භාවිතා කළ හැක, උදාහරණයක් ලෙස Provisioners block හි.

ජනපදය.

ප්‍රාන්ත ලිපිගොනු සපයන්නාගේ වේදිකා සම්පත් වින්‍යාස කිරීම පිළිබඳ තොරතුරු ගබඩා කරයි. වේදිකාව මුලින්ම නිර්මාණය කරන විට, සම්පත් පිළිබඳ තොරතුරු නොමැති අතර ඕනෑම මෙහෙයුමකට පෙර, Terraform දැනටමත් විස්තර කර ඇති සම්පත්වල සැබෑ යටිතල පහසුකම් සමඟ රාජ්යය යාවත්කාලීන කරයි.

ප්‍රාන්තවල ප්‍රධාන අරමුණ වන්නේ නැවත නැවත නිර්මාණය කිරීම සහ වේදිකාවට සිදුවන වෙනස්කම් වළක්වා ගැනීම සඳහා එකතු කරන ලද සම්පත් සහ වස්තූන්ගේ වින්‍යාසය සංසන්දනය කිරීම සඳහා දැනටමත් නිර්මාණය කර ඇති සම්පත් වල වස්තු පොකුරක් සුරැකීමයි.

පෙරනිමියෙන්, රාජ්ය තොරතුරු දේශීය terraform.tfstate ගොනුව තුළ ගබඩා කර ඇත, නමුත් අවශ්ය නම්, කණ්ඩායම් වැඩ සඳහා දුරස්ථ ගබඩාව භාවිතා කළ හැකිය.

ටෙරාෆෝම් ආධාරයෙන් තොරව නිර්මාණය කරන ලද අනෙකුත් සම්පත් සමඟ තවදුරටත් අන්තර් ක්‍රියා කිරීමට ඔබට වත්මන් වේදිකා සම්පත් රාජ්‍යයට ආයාත කළ හැකිය.  

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 අධ්‍යක්ෂක මොඩියුලය සඳහා ව්‍යාපෘති විචල්‍ය අගයන්.

Terraform හි වින්‍යාස කිරීමේ භාෂාව ප්‍රකාශනාත්මක වන අතර ප්‍රොවිශනර් බ්ලොක් හැර බ්ලොක් වල අනුපිළිවෙල වැදගත් නොවේ, මන්ද මෙම කොටසෙහි අපි යටිතල පහසුකම් සකස් කිරීමේදී ක්‍රියාත්මක කළ යුතු විධානයන් විස්තර කරන අතර ඒවා පිළිවෙලට ක්‍රියාත්මක වේ.

බ්ලොක් ව්යුහය.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

බ්ලොක් විස්තර කිරීමට, එහිම ක්‍රමලේඛන භාෂාව HCL (HashiCorp Configuration Language) භාවිතා කරයි; JSON භාවිතයෙන් යටිතල පහසුකම් විස්තර කිරීමට හැකිය. ඔබට වාක්‍ය ඛණ්ඩය ගැන වැඩිදුර ඉගෙන ගත හැක සංවර්ධකයාගේ වෙබ් අඩවියේ කියවන්න.

පරිසර විචල්‍ය වින්‍යාසය, variables.tf සහ vcd.tfvars

පළමුව, VMware vCloud අධ්‍යක්ෂක මොඩියුලය සඳහා භාවිතා කරන ලද සියලුම විචල්‍ය ලැයිස්තුව සහ ඒවායේ අගයන් විස්තර කරන ගොනු දෙකක් නිර්මාණය කරමු. මුලින්ම අපි 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 අධ්‍යක්ෂක මොඩියුලය සඳහා විචල්‍යයන් නිර්මාණය කර නියම කරමු: අපගේ උදාහරණයේදී අපි භාවිතා කරන බව අපි සිහිපත් කරමු. තමන්ගේම වලාකුළු 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 ලිපිනයක් ලබා දී වරායන් බාහිර ජාලයට “ඉදිරියට” යැවීමට ගමනාන්ත NAT භාවිතා කරන්නෙමු. කළමනාකරණ වරායන් වෙත ප්‍රවේශය සීමා කිරීම සඳහා, අපි අපගේ IP ලිපිනය සඳහා පමණක් ප්‍රවේශය සකසන්නෙමු.

Terraform සමඟ Cloud Infrastructure කළමනාකරණය කරන්නේ කෙසේද?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 වරායන් වෙත ප්‍රවේශය ඇති අතර, 90.1.15.1 IP ලිපිනයක් ඇති පරිශීලකයෙකුට අතථ්‍ය සේවාදායකවල SSH ports වෙත ප්‍රවේශය ඇත.

බාහිර ජාලයෙන් වරායන් වෙත ප්රවේශ වීමට ඉඩ දෙන්න.

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]

}

වලාකුළු දේශීය ජාලයකින් අන්තර්ජාලයට ප්‍රවේශ වීම සඳහා අපි මූලාශ්‍ර NAT නීති සාදන්නෙමු:

අපි මූලාශ්ර 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]

}

ජාල අවහිර කිරීමේ වින්‍යාසය සම්පූර්ණ කිරීම සඳහා, අපි බාහිර ජාලයෙන් සේවාවන් වෙත ප්‍රවේශ වීම සඳහා ගමනාන්ත NAT නීති එකතු කරමු:

ගමනාන්ත 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 සමඟ Cloud Infrastructure කළමනාකරණය කරන්නේ කෙසේද?අතථ්‍ය යන්ත්‍ර වින්‍යාසය

අපි vApp කන්ටේනරයක් නිර්මාණය කරමු. අපට වහාම vApp සහ VM අථත්‍ය ජාලයට සම්බන්ධ කිරීමට හැකි වන පරිදි, අපි රඳාපවතින_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 - නව VM එකක් එකතු කළ යුතු vApp නම,

  • නාමාවලිය නම / සැකිලි නාමය - නාමාවලිය නම සහ අතථ්‍ය යන්ත්‍ර අච්චු නම,

  • ගබඩා පැතිකඩ - පෙරනිමි ගබඩා ප්‍රතිපත්තිය.

ජාල වාරණ පරාමිතීන්:

  • වර්ගය - සම්බන්ධිත ජාල වර්ගය,

  • නම - VM සම්බන්ධ කළ යුතු අතථ්‍ය ජාලය,

  • isprimary - ප්‍රාථමික ජාල ඇඩැප්ටරය,

  • iallocation_mode — MANUAL / DHCP / POOL ලිපින වෙන් කිරීමේ මාදිලිය,

  • ip - අතථ්‍ය යන්ත්‍රය සඳහා IP ලිපිනය, අපි එය අතින් නියම කරන්නෙමු.

override_template_disk block:

  • 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 - තැටි ප්රමාණය

  • busnumber / unitnumber - ඇඩැප්ටරයේ සම්බන්ධතා ස්ථානය

  • 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

}

}

OS යාවත්කාලීන කිරීම සහ අතිරේක ස්ක්‍රිප්ට් ස්ථාපනය කිරීම

ජාලය සකස් කර ඇත, අථත්ය යන්ත්ර විස්තර කර ඇත. අපගේ යටිතල පහසුකම් ආනයනය කිරීමට පෙර, අපට ප්‍රතිපාදන කුට්ටි භාවිතයෙන් සහ Ansible භාවිතා නොකර මූලික ප්‍රතිපාදන කල්තියා සිදු කළ හැකිය.

ප්‍රොවිශනර් බ්ලොක් එක භාවිතයෙන් OS එක යාවත්කාලීන කර 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" ]

}

}

}

සංරචක නම් කිරීම:

  • provisioner "remote-exec" - දුරස්ථ ප්රතිපාදන කොටස සම්බන්ධ කරන්න

  • සම්බන්ධතා කොටසෙහි අපි සම්බන්ධතාවය සඳහා වර්ගය සහ පරාමිතීන් විස්තර කරමු:

  • වර්ගය - ප්රොටෝකෝලය, අපගේ නඩුවේ SSH;

  • පරිශීලක - පරිශීලක නාමය;

  • මුරපදය - පරිශීලක මුරපදය. අපගේ නඩුවේදී, අපි පද්ධති පරිශීලකයා සඳහා ජනනය කරන ලද මුරපදය ගබඩා කරන vcdvappvm.nginx.customization[0].admin_password පරාමිතිය වෙත යොමු කරමු.

  • සත්කාරක - සම්බන්ධතාවය සඳහා බාහිර IP ලිපිනය;

  • port - සම්බන්ධය සඳහා වරාය, කලින් 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 සමඟ Cloud Infrastructure කළමනාකරණය කරන්නේ කෙසේද?මොඩියුල සහ ප්ලගීන ආරම්භ කිරීම

වැඩ සඳහා, අපි සරල "මහත්වරුන්ගේ කට්ටලයක්" භාවිතා කරමු: Windows 10 OS සහිත ලැප්ටොප් පරිගණකයක් සහ නිල වෙබ් අඩවියෙන් බෙදාහැරීමේ කට්ටලයක් 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 සමඟ Cloud Infrastructure කළමනාකරණය කරන්නේ කෙසේද?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

අදහස් එක් කරන්න