์ด ๊ธฐ์ฌ์์๋ Terraform์ด ๋ฌด์์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ์ดํด๋ณด๊ณ ์ ์ง์ ์ผ๋ก ์์ฒด ์ธํ๋ผ๋ฅผ ์ถ์ํ ๊ฒ์
๋๋ค.
๋ชจ๋ ์ธ๋ถ ์ฌํญ๊ณผ ์ธ ๋จ๊ณ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
1. Terraform - ์ค๋ช , ์ฅ์ ๋ฐ ๊ตฌ์ฑ ์์
Terraform์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ IaC(Infrastructure-as-Code) ๋๊ตฌ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๋ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ด์ ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
-
์ ํ ๋ํธ์ ๋ฐฐํฌ ์๋ (์ฌ์ฉ์ ์ ์ ๊ฐ์ ํ๊ฒฝ). ์ผ๋ฐ์ ์ผ๋ก ์๋ก์ด ํด๋ผ์ด์ธํธ๊ฐ ๋ง์์๋ก ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ๊ธฐ์ ์ง์ ์ง์์ด ๋ ๋ง์ "ํด๋ฆญ"์ ํด์ผ ํฉ๋๋ค. Terraform์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๋ ๊ธฐ์ ์ง์์ด๋ ๋จธ์ ์์ฒด๋ฅผ ์ข ๋ฃํ์ง ์๊ณ ๋ ๊ฐ์ ๋จธ์ ์ค์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค(์: OS ์๋ ์ข ๋ฃ ๋ฐ ๊ฐ์ ๋์คํฌ ํํฐ์ ๋๋ฆฌ๊ธฐ).
-
ํ์ฑํ ๊ณํ ์ฆ์ ํ์ธ ์๋ก์ด ํ ๋ํธ. ์ธํ๋ผ ์ฝ๋์ ๋ํ ์ค๋ช ์ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ๋ ํญ๋ชฉ๊ณผ ์์๋ ๋ฌผ๋ก ํน์ ๊ฐ์ ๋จธ์ ์ด๋ ๊ฐ์ ๋จธ์ ์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋คํธ์ํฌ๊ฐ ์ด๋ค ์ต์ข ์ํ๊ฐ ๋ ์ง ์ฆ์ ํ์ธํ ์ ์์ต๋๋ค.
-
๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํด๋ผ์ฐ๋ ํ๋ซํผ์ ์ค๋ช ํ๋ ๋ฅ๋ ฅ. ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. Amazon ๋ฐ Google Cloud์์ VMware vCloud Director ๊ธฐ๋ฐ์ ํ๋ผ์ด๋น ํ๋ซํผ์ ์ด๋ฅด๊ธฐ๊น์ง IaaS, SaaS ๋ฐ PaaS ์๋ฃจ์ ๋ด์์ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
์ฌ๋ฌ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด ๊ด๋ฆฌ ํด๋ผ์ฐ๋ ๋ฆฌ์์ค๋ฅผ ์์ฑ, ์ง๋จ ๋ฐ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋จ์ผ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ๋ด๊ฒฐํจ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ์ธํ๋ผ๋ฅผ ๋ถ์ฐ์ํต๋๋ค.
-
๋ฐ๋ชจ ์คํ ๋ ์ ์์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ ์ํํธ์จ์ด ํ ์คํธ ๋ฐ ๋๋ฒ๊น ์ ์ํด. ํ๋์ ๋ฆฌ์์ค ๊ตฌ์ถ ๊ณํ๋ง ์์ฑํ๋ฉด ํ ์คํธ ๋ถ์์ฉ ์คํ ๋ ์์ฑ ๋ฐ ์ด์ , ๋ค์ํ ํ๊ฒฝ์์ ์ํํธ์จ์ด๋ฅผ ๋ณ๋ ฌ๋ก ํ ์คํธํ ์ ์์ผ๋ฉฐ ์ฆ์ ๋ฆฌ์์ค ๋ณ๊ฒฝ ๋ฐ ์ญ์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
"ํ ๋ผ๋ฆฌ์" ํ ๋ผํผ
์ฐ๋ฆฌ๋ ๋๊ตฌ์ ์ฅ์ ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ด์ผ๊ธฐํ์ต๋๋ค. ์ด์ ๋๊ตฌ๋ฅผ ๊ตฌ์ฑ ์์๋ก ๋๋์ด ๋ณด๊ฒ ์ต๋๋ค.
๊ณต๊ธ์.
Terraform์์๋ ๊ฑฐ์ ๋ชจ๋ ์ ํ์ ์ธํ๋ผ๋ฅผ ๋ฆฌ์์ค๋ก ํํํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค์ API ํ๋ซํผ ๊ฐ์ ์ฐ๊ฒฐ์ Azure ๋๋ VMware vCloud Director์ ๊ฐ์ ํน์ ํ๋ซํผ ๋ด์์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ ์ ์๋ ๊ณต๊ธ์ ๋ชจ๋์ ์ํด ์ ๊ณต๋ฉ๋๋ค.
ํ๋ก์ ํธ์ ์ผ๋ถ๋ก ๋ค์ํ ํ๋ซํผ์ ๋ค์ํ ์ ๊ณต์์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
์์(์์ ์ค๋ช ).
๋ฆฌ์์ค์ ๋ํ ์ค๋ช ์ ํตํด ๊ฐ์ ๋จธ์ ์ด๋ ๋คํธ์ํฌ์ ๊ฐ์ ํ๋ซํผ ๊ตฌ์ฑ ์์๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
VMware vCloud Director ๊ณต๊ธ์์ ๋ํ ๋ฆฌ์์ค ์ค๋ช ์ ์ง์ ์์ฑํ๊ณ ์ด ์ค๋ช ์ ์ฌ์ฉํ์ฌ vCloud Director๋ฅผ ์ฌ์ฉํ๋ ํธ์คํ ๊ณต๊ธ์๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ธ์ฆ ๋งค๊ฐ๋ณ์์ ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋งค๊ฐ๋ณ์๋ง ํ์ํ ํธ์คํ ๊ณต๊ธ์๋ก ๋ณ๊ฒฝํ๋ฉด ๋ฉ๋๋ค.
์ ๊ณต์.
์ด ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ๋จธ์ ์ ์์ฑํ ํ ์ด์ ์ฒด์ ์ ์ด๊ธฐ ์ค์น ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๊ฐ์ ๋จธ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ ํ์๋ ํ๋ก๋น์ ๋๋ฅผ ์ฌ์ฉํ์ฌ SSH๋ฅผ ํตํด ๊ตฌ์ฑ ๋ฐ ์ฐ๊ฒฐํ๊ณ , ์ด์ ์ฒด์ ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ ์คํํ ์ ์์ต๋๋ค.
์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ๋ณ์.
์ ๋ ฅ ๋ณ์ - ๋ชจ๋ ๋ธ๋ก ์ ํ์ ๋ํ ์ ๋ ฅ ๋ณ์์ ๋๋ค.
์ถ๋ ฅ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฆฌ์์ค๋ฅผ ์์ฑํ ํ ๊ฐ์ ์ ์ฅํ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ๋ชจ๋(์: Provisioners ๋ธ๋ก)์ ์ ๋ ฅ ๋ณ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ํ.
์ํ ํ์ผ์ ๊ณต๊ธ์ ํ๋ซํผ ๋ฆฌ์์ค ๊ตฌ์ฑ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ํ๋ซํผ์ด ์ฒ์ ์์ฑ๋๋ฉด ๋ฆฌ์์ค์ ๋ํ ์ ๋ณด๊ฐ ์์ผ๋ฉฐ ์์ ์ ์ Terraform์ ์ด๋ฏธ ์ค๋ช ํ ๋ฆฌ์์ค์ ์ค์ ์ธํ๋ผ๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ํ์ ์ฃผ์ ๋ชฉ์ ์ ํ๋ซํผ์ ๋ํ ๋ฐ๋ณต์ ์ธ ์์ฑ ๋ฐ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด๋ฏธ ์์ฑ๋ ๋ฆฌ์์ค์ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ์ฌ ์ถ๊ฐ๋ ๋ฆฌ์์ค์ ๊ฐ์ฒด์ ๊ตฌ์ฑ์ ๋น๊ตํ๋ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ํ ์ ๋ณด๋ ๋ก์ปฌ terraform.tfstate ํ์ผ์ ์ ์ฅ๋์ง๋ง, ํ์ํ ๊ฒฝ์ฐ ํ์ํฌ๋ฅผ ์ํด ์๊ฒฉ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
๋ํ ํ์ฌ ํ๋ซํผ ๋ฆฌ์์ค๋ฅผ ์ํ๋ก ๊ฐ์ ธ์ Terraform์ ๋์ ์์ด ์์ฑ๋ ๋ค๋ฅธ ๋ฆฌ์์ค์ ์ถ๊ฐ๋ก ์ํธ ์์ฉํ ์๋ ์์ต๋๋ค.
2. ์ธํ๋ผ ์กฐ์ฑ
๊ตฌ์ฑ์์๊ฐ ์ ๋ฆฌ๋์์ผ๋ฏ๋ก ์ด์ Terraform์ ์ฌ์ฉํ์ฌ XNUMX๊ฐ์ ๊ฐ์ ๋จธ์ ์ด ํฌํจ๋ ์ธํ๋ผ๋ฅผ ์ ์ง์ ์ผ๋ก ์์ฑํ๊ฒ ์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ nginx ํ๋ก์ ์๋ฒ๊ฐ ์ค์น๋์ด ์๊ณ , ๋ ๋ฒ์งธ๋ Nextcloud ๊ธฐ๋ฐ ํ์ผ ์คํ ๋ฆฌ์ง๊ฐ ์๊ณ , ์ธ ๋ฒ์งธ๋ CMS Bitrix๊ฐ ์ค์น๋์ด ์์ต๋๋ค.
์์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํํ๊ฒ ์ต๋๋ค.
๋จผ์ , ์ธํ๋ผ๋ฅผ ์ค๋ช ํ๋ ํ์ผ์ด ๋ฐฐ์น๋ ์ ํ๋ก์ ํธ์ฉ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
mkdir project01
๋ค์์ผ๋ก ์ธํ๋ผ ๊ตฌ์ฑ ์์์ ๋ํด ์ค๋ช ํฉ๋๋ค. Terraform์ ํ์ผ์ ์ค๋ช ์ ๊ธฐ๋ฐ์ผ๋ก ๊ด๊ณ๋ฅผ ์์ฑํ๊ณ ํ์ผ์ ์ฒ๋ฆฌํฉ๋๋ค. ํ์ผ ์์ฒด๋ ์ค๋ช ๋๋ ๋ธ๋ก์ ๋ชฉ์ ์ ๋ฐ๋ผ ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด network.tf๋ ์ธํ๋ผ์ ๋ํ ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ค๋ช ํฉ๋๋ค.
์ธํ๋ผ์ ๊ตฌ์ฑ ์์๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ๋ค์ ํ์ผ์ ๋ง๋ค์์ต๋๋ค.
ํ์ผ ๋ชฉ๋ก.
main.tf - ๊ฐ์ ํ๊ฒฝ์ ๋ํ ๋งค๊ฐ๋ณ์ ์ค๋ช - ๊ฐ์ ๋จธ์ , ๊ฐ์ ์ปจํ ์ด๋
network.tf - ๊ฐ์ ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์์ NAT ๋ฐ ๋ฐฉํ๋ฒฝ ๊ท์น์ ๋ํ ์ค๋ช
variables.tf - ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋ณ์ ๋ชฉ๋ก;
vcd.tfvars - VMware vCloud Director ๋ชจ๋์ ํ๋ก์ ํธ ๋ณ์ ๊ฐ์ ๋๋ค.
Terraform์ ๊ตฌ์ฑ ์ธ์ด๋ ์ ์ธ์ ์ด๋ฉฐ ํ๋ก๋น์ ๋ ๋ธ๋ก์ ์ ์ธํ๊ณ ๋ธ๋ก์ ์์๋ ์ค์ํ์ง ์์ต๋๋ค. ์ด ๋ธ๋ก์์๋ ์ธํ๋ผ๋ฅผ ์ค๋นํ ๋ ์คํํ ๋ช ๋ น์ ์ค๋ช ํ๊ณ ์์๋๋ก ์คํ๋ฉ๋๋ค.
๋ธ๋ก ๊ตฌ์กฐ.
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
๋ธ๋ก์ ๊ธฐ์ ํ๊ธฐ ์ํด์๋ ์์ฒด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ HCL(HashiCorp Configuration Language)์ ์ฌ์ฉํ๋ฉฐ, JSON์ ํ์ฉํ์ฌ ์ธํ๋ผ ๊ธฐ์ ์ด ๊ฐ๋ฅํ๋ค. ๊ตฌ๋ฌธ์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
ํ๊ฒฝ ๋ณ์ ๊ตฌ์ฑ, Variable.tf ๋ฐ vcd.tfvars
๋จผ์ VMware vCloud Director ๋ชจ๋์ ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ณ์ ๋ชฉ๋ก๊ณผ ํด๋น ๊ฐ์ ์ค๋ช ํ๋ ๋ ๊ฐ์ ํ์ผ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ Variable.tf ํ์ผ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
Variable.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: Bitrix๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ ๋จธ์ ์ IP ์ฃผ์,
-
vcd_edge_local_ip_nextcloud โ Nextcloud๊ฐ ์๋ ๊ฐ์ ๋จธ์ ์ IP ์ฃผ์์ ๋๋ค.
๋ ๋ฒ์งธ ํ์ผ์ ์ฌ์ฉํ์ฌ vcd.tfvars ํ์ผ์์ VMware vCloud Director ๋ชจ๋์ ๋ํ ๋ณ์๋ฅผ ์์ฑํ๊ณ ์ง์ ํฉ๋๋ค.
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 ํ๋ซํผ์ ๋คํธ์ํฌ ๋ค์ด์ด๊ทธ๋จ
์ด๋ฆ์ด 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]
}
ํด๋ผ์ฐ๋ ๋ก์ปฌ ๋คํธ์ํฌ์์ ์ธํฐ๋ท์ ์ก์ธ์คํ๊ธฐ ์ํ ์์ค 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 ๊ฐ์ ํ๊ฒฝ ๊ตฌ์ฑ
๊ธฐ์ฌ ์์ ๋ถ๋ถ์์ ๊ณํํ ๋๋ก ์ธ ๊ฐ์ ๊ฐ์ ๋จธ์ ์ ์์ฑํ๊ฒ ์ต๋๋ค. "Guest Customization"์ ์ฌ์ฉํ์ฌ ์ค๋น๋ฉ๋๋ค. ์ง์ ํ ์ค์ ์ ๋ฐ๋ผ ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํ๋ฉด ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๊ฐ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
๊ฐ์ ๋จธ์ ์ด ์์นํ vApp๊ณผ ํด๋น ๊ตฌ์ฑ์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๊ฐ์ ๋จธ์ ๊ตฌ์ฑ
vApp ์ปจํ ์ด๋๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. vApp๊ณผ VM์ ๊ฐ์ ๋คํธ์ํฌ์ ์ฆ์ ์ฐ๊ฒฐํ ์ ์๋๋ก presents_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 ์ค๋ช ์ ์ฃผ์ ๋งค๊ฐ๋ณ์:
-
name โ ๊ฐ์ ๋จธ์ ์ ์ด๋ฆ
-
vappname - ์ VM์ ์ถ๊ฐํ vApp์ ์ด๋ฆ,
-
Catalogname / templatename - ์นดํ๋ก๊ทธ ์ด๋ฆ ๋ฐ ๊ฐ์ ๋จธ์ ํ ํ๋ฆฟ ์ด๋ฆ,
-
Storageprofile - ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง ์ ์ฑ ์ ๋๋ค.
๋คํธ์ํฌ ๋ธ๋ก ๋งค๊ฐ๋ณ์:
-
์ ํ - ์ฐ๊ฒฐ๋ ๋คํธ์ํฌ ์ ํ
-
์ด๋ฆ โ VM์ ์ฐ๊ฒฐํ ๊ฐ์ ๋คํธ์ํฌ,
-
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
}
}
OS ์ ๋ฐ์ดํธ ๋ฐ ์ถ๊ฐ ์คํฌ๋ฆฝํธ ์ค์น
๋คํธ์ํฌ๊ฐ ์ค๋น๋๊ณ ๊ฐ์ ๋จธ์ ์ด ์ค๋ช ๋ฉ๋๋ค. ์ธํ๋ผ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ ์ Ansible์ ์ฌ์ฉํ์ง ์๊ณ ๋ ํ๋ก๋น์ ๋ ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ํ๋ก๋น์ ๋์ ๋ฏธ๋ฆฌ ์ํํ ์ ์์ต๋๋ค.
Provisioner ๋ธ๋ก์ ์ฌ์ฉํ์ฌ 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" ]
}
}
}
๊ตฌ์ฑ ์์ ์ง์ :
-
ํ๋ก๋น์ ๋ "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 ์ค์น ๋ฐ ๊ตฌ์ฑ์ ๋ํ ์์ธํ ๊ธฐ์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
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. ๊ธฐ์กด ์ธํ๋ผ๋ก 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 โ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ์ ์ด๋ฆ์ ๋๋ค.
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 ์์ ์ ๋ชจ๋ ์ฃผ์ ์ง์ ์ ๊ณ ๋ คํ์ต๋๋ค.
์ด ๋๊ตฌ๋ ๋งค์ฐ ํธ๋ฆฌํ ๊ฒ์ผ๋ก ๋ฐํ์ก์ผ๋ฉฐ ํ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๊ฐ์ ๋จธ์ ๋ถํฐ ๋คํธ์ํฌ ๊ตฌ์ฑ ์์์ ๋ฆฌ์์ค ์ค๋ช ์ ์ด๋ฅด๊ธฐ๊น์ง ์ธํ๋ผ๋ฅผ ์ฝ๋๋ก ์ค๋ช ํ ์ ์์ต๋๋ค.
๋์์ ํ๊ฒฝ์ผ๋ก๋ถํฐ์ ๋ ๋ฆฝ์ฑ์ ํตํด ๋ก์ปฌ, ํด๋ผ์ฐ๋ ๋ฆฌ์์ค์์ ์์ ์ ๋ฌผ๋ก ํ๋ซํผ ๊ด๋ฆฌ๊น์ง ๊ฐ๋ฅํฉ๋๋ค. ์ง์๋๋ ํ๋ซํผ์ด ์๊ณ ์ ํ๋ซํผ์ ์ถ๊ฐํ๋ ค๋ ๊ฒฝ์ฐ ์์ฒด ๊ณต๊ธ์๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com