ఈ కథనంలో మేము టెర్రాఫార్మ్ను కలిగి ఉన్న వాటిని పరిశీలిస్తాము మరియు క్రమంగా మా స్వంత మౌలిక సదుపాయాలను కూడా ప్రారంభిస్తాము
ప్రతిదాని గురించి వివరంగా మరియు మూడు దశల్లో:
1. టెర్రాఫార్మ్ - వివరణ, ప్రయోజనాలు మరియు భాగాలు
టెర్రాఫార్మ్ అనేది కోడ్ని ఉపయోగించి వర్చువల్ ఇన్ఫ్రాస్ట్రక్చర్ను నిర్మించడానికి మరియు నిర్వహించడానికి IaC (ఇన్ఫ్రాస్ట్రక్చర్-కోడ్-కోడ్) సాధనం.
సాధనంతో పనిచేయడంలో మేము అనేక ప్రయోజనాలను గుర్తించాము:
-
కొత్త అద్దెదారుల విస్తరణ వేగం (కస్టమ్ వర్చువల్ పరిసరాలు). సాధారణంగా, ఎక్కువ మంది కొత్త క్లయింట్లు ఉంటే, కొత్త వనరులను ప్రచురించడానికి సాంకేతిక మద్దతు సిబ్బంది ఎక్కువ “క్లిక్లు” చేయాల్సి ఉంటుంది. టెర్రాఫార్మ్తో, వినియోగదారులు సాంకేతిక మద్దతు అవసరం లేకుండా లేదా యంత్రాన్ని మూసివేయకుండానే వర్చువల్ మెషీన్ సెట్టింగ్లను (ఉదాహరణకు, స్వయంచాలకంగా OS షట్ డౌన్ చేయడం మరియు వర్చువల్ డిస్క్ విభజనను పెంచడం) మార్చవచ్చు.
-
యాక్టివేషన్ ప్లాన్ యొక్క తక్షణ ధృవీకరణ కొత్త టెనెంట్. ఇన్ఫ్రాస్ట్రక్చర్ కోడ్ యొక్క వివరణను ఉపయోగించి, ఏది జోడించబడుతుందో మరియు ఏ క్రమంలో, అలాగే ఈ లేదా ఆ వర్చువల్ మెషీన్ లేదా వర్చువల్ మెషీన్లకు కనెక్షన్లతో వర్చువల్ నెట్వర్క్ ఏ తుది స్థితిలో ఉంటుందో మేము వెంటనే తనిఖీ చేయవచ్చు.
-
అత్యంత జనాదరణ పొందిన క్లౌడ్ ప్లాట్ఫారమ్లను వివరించే సామర్థ్యం. మీరు సాధనాన్ని ఉపయోగించవచ్చు Amazon మరియు Google Cloud నుండి, VMware vCloud డైరెక్టర్ ఆధారంగా ప్రైవేట్ ప్లాట్ఫారమ్లకు, IaaS, SaaS మరియు PaaS సొల్యూషన్లలో సేవలను అందిస్తోంది.
-
బహుళ క్లౌడ్ ప్రొవైడర్లను నిర్వహించండి మరియు క్లౌడ్ వనరులను సృష్టించడం, నిర్ధారించడం మరియు నిర్వహించడం కోసం ఒకే కాన్ఫిగరేషన్ని ఉపయోగించి, తప్పు సహనాన్ని మెరుగుపరచడానికి వాటి మధ్య మౌలిక సదుపాయాలను పంపిణీ చేయండి.
-
డెమో స్టాండ్లను రూపొందించడానికి అనుకూలమైన ఉపయోగం సాఫ్ట్వేర్ పరీక్ష మరియు డీబగ్గింగ్ కోసం. మీరు టెస్టింగ్ డిపార్ట్మెంట్ కోసం స్టాండ్లను సృష్టించవచ్చు మరియు బదిలీ చేయవచ్చు, సాఫ్ట్వేర్ను సమాంతరంగా వివిధ వాతావరణాలలో పరీక్షించవచ్చు మరియు కేవలం ఒక రిసోర్స్ బిల్డ్ ప్లాన్ను రూపొందించడం ద్వారా వనరులను తక్షణమే మార్చవచ్చు మరియు తొలగించవచ్చు
"టెర్రేరియం" టెర్రాఫార్మ్
మేము సాధనం యొక్క ప్రయోజనాల గురించి క్లుప్తంగా మాట్లాడాము, ఇప్పుడు దానిని దాని భాగాలుగా విభజించండి
ప్రొవైడర్లు.
టెర్రాఫార్మ్లో, దాదాపు ఏ రకమైన మౌలిక సదుపాయాలనూ వనరుగా సూచించవచ్చు. వనరులు మరియు API ప్లాట్ఫారమ్ మధ్య కనెక్షన్ ప్రొవైడర్ మాడ్యూల్స్ ద్వారా అందించబడుతుంది, ఇది ఒక నిర్దిష్ట ప్లాట్ఫారమ్లో వనరులను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది, ఉదాహరణకు, Azure లేదా VMware vCloud డైరెక్టర్.
ప్రాజెక్ట్లో భాగంగా, మీరు వేర్వేరు ప్లాట్ఫారమ్లలో వేర్వేరు ప్రొవైడర్లతో పరస్పర చర్య చేయవచ్చు.
వనరులు (వనరుల వివరణ).
వనరుల వివరణ వర్చువల్ మిషన్లు లేదా నెట్వర్క్ల వంటి ప్లాట్ఫారమ్ భాగాలను నిర్వహించడానికి మిమ్మల్ని అనుమతిస్తుంది.
మీరు VMware vCloud డైరెక్టర్ ప్రొవైడర్ కోసం వనరుల వివరణను మీరే సృష్టించవచ్చు మరియు vCloud డైరెక్టర్ని ఉపయోగించే ఏదైనా హోస్టింగ్ ప్రొవైడర్తో వనరులను సృష్టించడానికి ఈ వివరణను ఉపయోగించవచ్చు. మీరు ప్రామాణీకరణ పారామితులు మరియు నెట్వర్క్ కనెక్షన్ పారామితులను అవసరమైన హోస్టింగ్ ప్రొవైడర్కు మాత్రమే మార్చాలి
ప్రొవిజనర్లు.
ఈ భాగం వర్చువల్ మిషన్లను సృష్టించిన తర్వాత ఆపరేటింగ్ సిస్టమ్ యొక్క ప్రారంభ సంస్థాపన మరియు నిర్వహణ కోసం కార్యకలాపాలను నిర్వహించడం సాధ్యం చేస్తుంది. మీరు వర్చువల్ మెషీన్ రిసోర్స్ను సృష్టించిన తర్వాత, మీరు SSH ద్వారా కాన్ఫిగర్ చేయడానికి మరియు కనెక్ట్ చేయడానికి, ఆపరేటింగ్ సిస్టమ్ను అప్డేట్ చేయడానికి మరియు స్క్రిప్ట్ను డౌన్లోడ్ చేసి, అమలు చేయడానికి ప్రొవిజనర్లను ఉపయోగించవచ్చు.
ఇన్పుట్ మరియు అవుట్పుట్ వేరియబుల్స్.
ఇన్పుట్ వేరియబుల్స్ - ఏదైనా బ్లాక్ రకాల కోసం ఇన్పుట్ వేరియబుల్స్.
అవుట్పుట్ వేరియబుల్స్ వనరులను సృష్టించిన తర్వాత విలువలను సేవ్ చేయడానికి మిమ్మల్ని అనుమతిస్తాయి మరియు ఇతర మాడ్యూల్స్లో ఇన్పుట్ వేరియబుల్స్గా ఉపయోగించవచ్చు, ఉదాహరణకు ప్రొవిజనర్స్ బ్లాక్లో.
రాష్ట్రాలు.
స్టేట్స్ ఫైల్లు ప్రొవైడర్ ప్లాట్ఫారమ్ వనరుల కాన్ఫిగరేషన్ గురించి సమాచారాన్ని నిల్వ చేస్తాయి. ప్లాట్ఫారమ్ మొదట సృష్టించబడినప్పుడు, వనరుల గురించి సమాచారం లేదు మరియు ఏదైనా ఆపరేషన్కు ముందు, Terraform ఇప్పటికే వివరించిన వనరుల యొక్క నిజమైన మౌలిక సదుపాయాలతో రాష్ట్రాన్ని నవీకరిస్తుంది.
ప్లాట్ఫారమ్లో పదేపదే సృష్టించడం మరియు మార్పులను నివారించడానికి జోడించిన వనరులు మరియు వస్తువుల కాన్ఫిగరేషన్ను సరిపోల్చడానికి ఇప్పటికే సృష్టించిన వనరులలోని వస్తువుల సమూహాన్ని సేవ్ చేయడం రాష్ట్రాల ముఖ్య ఉద్దేశ్యం.
డిఫాల్ట్గా, రాష్ట్ర సమాచారం స్థానిక terraform.tfstate ఫైల్లో నిల్వ చేయబడుతుంది, అయితే అవసరమైతే, జట్టు పని కోసం రిమోట్ నిల్వను ఉపయోగించడం సాధ్యమవుతుంది.
టెర్రాఫార్మ్ సహాయం లేకుండా సృష్టించబడిన ఇతర వనరులతో మరింత పరస్పర చర్య చేయడానికి మీరు ప్రస్తుత ప్లాట్ఫారమ్ వనరులను రాష్ట్రంలోకి దిగుమతి చేసుకోవచ్చు.
2. మౌలిక సదుపాయాల కల్పన
భాగాలు క్రమబద్ధీకరించబడ్డాయి, ఇప్పుడు టెర్రాఫార్మ్ని ఉపయోగించి మేము క్రమంగా మూడు వర్చువల్ మిషన్లతో మౌలిక సదుపాయాలను సృష్టిస్తాము. మొదటిది nginx ప్రాక్సీ సర్వర్ ఇన్స్టాల్ చేయబడింది, రెండవది Nextcloud ఆధారంగా ఫైల్ నిల్వతో మరియు మూడవది CMS Bitrixతో.
మేము కోడ్ వ్రాస్తాము మరియు మా ఉదాహరణను ఉపయోగించి దాన్ని అమలు చేస్తాము
ముందుగా, మన కొత్త ప్రాజెక్ట్ కోసం ఒక డైరెక్టరీని క్రియేట్ చేద్దాం, దీనిలో ఇన్ఫ్రాస్ట్రక్చర్ను వివరించే ఫైల్లు ఉంచబడతాయి.
mkdir project01
తరువాత, మేము మౌలిక సదుపాయాల భాగాలను వివరిస్తాము. Terraform సంబంధాలను సృష్టిస్తుంది మరియు ఫైల్లలోని వివరణ ఆధారంగా ఫైల్లను ప్రాసెస్ చేస్తుంది. వర్ణించబడిన బ్లాక్ల ప్రయోజనం ఆధారంగా ఫైల్లకు పేరు పెట్టవచ్చు, ఉదాహరణకు, network.tf - ఇన్ఫ్రాస్ట్రక్చర్ కోసం నెట్వర్క్ పారామితులను వివరిస్తుంది.
మా ఇన్ఫ్రాస్ట్రక్చర్లోని భాగాలను వివరించడానికి, మేము ఈ క్రింది ఫైల్లను సృష్టించాము:
ఫైళ్ల జాబితా.
main.tf - వర్చువల్ పర్యావరణం కోసం పారామితుల వివరణ - వర్చువల్ మిషన్లు, వర్చువల్ కంటైనర్లు;
network.tf - వర్చువల్ నెట్వర్క్ పారామితులు మరియు NAT మరియు ఫైర్వాల్ నియమాల వివరణ;
variables.tf - మనం ఉపయోగించే వేరియబుల్స్ జాబితా;
vcd.tfvars - VMware vCloud డైరెక్టర్ మాడ్యూల్ కోసం ప్రాజెక్ట్ వేరియబుల్ విలువలు.
టెర్రాఫార్మ్లోని కాన్ఫిగరేషన్ లాంగ్వేజ్ డిక్లరేటివ్ మరియు ప్రొవిజనర్ బ్లాక్లు మినహా బ్లాక్ల క్రమం పట్టింపు లేదు, ఎందుకంటే ఈ బ్లాక్లో మేము మౌలిక సదుపాయాలను సిద్ధం చేసేటప్పుడు అమలు చేయవలసిన ఆదేశాలను వివరిస్తాము మరియు అవి క్రమంలో అమలు చేయబడతాయి.
బ్లాక్ నిర్మాణం.
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
బ్లాక్లను వివరించడానికి, దాని స్వంత ప్రోగ్రామింగ్ లాంగ్వేజ్ హెచ్సిఎల్ (హాషికార్ప్ కాన్ఫిగరేషన్ లాంగ్వేజ్) ఉపయోగించబడుతుంది; 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 డైరెక్టర్ మాడ్యూల్ కోసం వేరియబుల్లను సృష్టిస్తాము మరియు నిర్దేశిస్తాము: మన ఉదాహరణలో మనం ఉపయోగించిన దాన్ని గుర్తుచేసుకుందాం.
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 చిరునామాకు మాత్రమే యాక్సెస్ను సెట్ చేస్తాము.
టెర్రాఫార్మ్ ప్లాట్ఫారమ్ కోసం నెట్వర్క్ రేఖాచిత్రం సృష్టించబడుతోంది
మేము 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 పోర్ట్లకు ప్రాప్యతను కలిగి ఉంటారు.
బాహ్య నెట్వర్క్ నుండి పోర్ట్లకు ప్రాప్యతను అనుమతించండి.
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 మరియు వాటి కాన్ఫిగరేషన్ గురించి వివరిస్తాము.
వర్చువల్ మెషీన్ కాన్ఫిగరేషన్
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 పేరు,
-
కేటలాగ్ పేరు / టెంప్లేట్ పేరు - కేటలాగ్ పేరు మరియు వర్చువల్ మెషిన్ టెంప్లేట్ పేరు,
-
storeprofile - డిఫాల్ట్ నిల్వ విధానం.
నెట్వర్క్ బ్లాక్ పారామితులు:
-
రకం - కనెక్ట్ చేయబడిన నెట్వర్క్ రకం,
-
పేరు — VMని ఏ వర్చువల్ నెట్వర్క్కి కనెక్ట్ చేయాలి,
-
isprimary - ప్రైమరీ నెట్వర్క్ అడాప్టర్,
-
iallocation_mode — మాన్యువల్ / 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 — డిస్క్ పరిమాణం
-
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" ]
}
}
}
భాగాల హోదా:
-
ప్రొవిజనర్ “రిమోట్-ఎగ్జిక్యూట్” - రిమోట్ ప్రొవిజనింగ్ బ్లాక్ని కనెక్ట్ చేయండి
-
కనెక్షన్ బ్లాక్లో మేము కనెక్షన్ రకం మరియు పారామితులను వివరిస్తాము:
-
రకం - ప్రోటోకాల్, మా సందర్భంలో 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. మౌలిక సదుపాయాల ప్రారంభం
మాడ్యూల్స్ మరియు ప్లగిన్లను ప్రారంభించడం
పని కోసం, మేము సాధారణ “పెద్దమనిషి కిట్”ని ఉపయోగిస్తాము: Windows 10 OSతో ల్యాప్టాప్ మరియు అధికారిక వెబ్సైట్ నుండి పంపిణీ కిట్ terraform.exe init
కంప్యూటింగ్ మరియు నెట్వర్క్ ఇన్ఫ్రాస్ట్రక్చర్ను వివరించిన తర్వాత, మేము మా కాన్ఫిగరేషన్ను పరీక్షించడానికి ప్రణాళికను ప్రారంభించాము, అక్కడ ఏమి సృష్టించబడుతుందో మరియు అది ఒకదానికొకటి ఎలా కనెక్ట్ చేయబడుతుందో చూడవచ్చు.
-
ఆదేశాన్ని అమలు చేయండి
- terraform plan -var-file=vcd.tfvars
. -
మేము ఫలితం పొందుతాము
- Plan: 16 to add, 0 to change, 0 to destroy.
అంటే, ఈ ప్రణాళిక ప్రకారం, 16 వనరులు సృష్టించబడతాయి. -
మేము కమాండ్పై ప్రణాళికను ప్రారంభిస్తాము
- 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 — వర్చువల్ డేటా సెంటర్ పేరు.
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