Terraform์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

Terraform์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Terraform์ด ๋ฌด์—‡์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ  ์ ์ง„์ ์œผ๋กœ ์ž์ฒด ์ธํ”„๋ผ๋ฅผ ์ถœ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. VMware๋ฅผ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ์—์„œ โ€” ํ”„๋ก์‹œ, ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€, CMS ๋“ฑ ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ XNUMX๊ฐœ์˜ VM์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์„ธ๋ถ€ ์‚ฌํ•ญ๊ณผ ์„ธ ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. VMware vCloud Director์˜ ํด๋ผ์šฐ๋“œ. ์šฐ๋ฆฌ ์‚ฌ์šฉ์ž๋Š” ์กฐ์ง ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ณ„์ •์„ ๋ฐ›๊ฒŒ ๋˜๋ฉฐ, ๋‹ค๋ฅธ VMware ํด๋ผ์šฐ๋“œ์—์„œ ๋™์ผํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์˜ˆ์ œ์—์„œ ์ฝ”๋“œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋‹ค!

๋จผ์ €, ์ธํ”„๋ผ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ํŒŒ์ผ์ด ๋ฐฐ์น˜๋  ์ƒˆ ํ”„๋กœ์ ํŠธ์šฉ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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 ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด ํด๋ผ์šฐ๋“œ mCloud, ๋‹ค๋ฅธ ์ œ๊ณต์—…์ฒด์™€ ํ˜‘๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ œ๊ณต์—…์ฒด์˜ ๊ฐ’์„ ํ™•์ธํ•˜์„ธ์š”. 

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์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ƒ์„ฑ ์ค‘์ธ 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๊ณผ ํ•ด๋‹น ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Terraform์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ฐ€์ƒ ๋จธ์‹  ๊ตฌ์„ฑ

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. ์ธํ”„๋ผ ์ดˆ๊ธฐํ™”

Terraform์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋ชจ๋“ˆ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ดˆ๊ธฐํ™”

์—…๋ฌด์—๋Š” 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. ๊ธฐ์กด ์ธํ”„๋ผ๋กœ Terraform ์ž‘์—…

๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ํ•ด๋‹น vApp ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

vAPP ๋ฆฌ์†Œ์Šค์™€ ๊ฐ€์ƒ ๋จธ์‹ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

๋‹ค์Œ ๋‹จ๊ณ„๋Š” vApp ๋ฆฌ์†Œ์Šค์˜ ์†์„ฑ์„ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, ์—ฌ๊ธฐ์„œ :

  • vApp - vApp ์ด๋ฆ„.

  • org โ€” ์กฐ์ง์˜ ์ด๋ฆ„

  • org_vdc โ€” ๊ฐ€์ƒ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

Terraform์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•vAPP ๋ฆฌ์†Œ์Šค ์†์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ

๋‹ค์Œ ํ˜•์‹์œผ๋กœ VM ๋ฆฌ์†Œ์Šค์˜ ์†์„ฑ์„ ๊ฐ€์ ธ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค. vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, ์—ฌ๊ธฐ์„œ:

  • VM - VM ์ด๋ฆ„.

  • vApp - vApp ์ด๋ฆ„.

  • org โ€” ์กฐ์ง์˜ ์ด๋ฆ„

  • orgvdc๋Š” ๊ฐ€์ƒ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๊ฐ€์ ธ์˜ค๊ธฐ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix

vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Import prepared!

Prepared vcd_vapp_vm for import

vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

์ด์ œ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜จ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์ ธ์˜จ ๋ฆฌ์†Œ์Šค

> terraform show

...

# vcd_vapp.Monitoring:

resource "vcd_vapp" "Monitoring" {

guest_properties = {}

href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"

id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"

ip = "allocated"

metadata = {}

name = "Monitoring"

org = "mClouds"

status = 4

status_text = "POWERED_ON"

vdc = "mClouds"

}

โ€ฆ

# vcd_vapp_vm.Zabbix:

resource "vcd_vapp_vm" "Zabbix" {

computer_name = "Zabbix"

cpu_cores = 1

cpus = 2

expose_hardware_virtualization = false

guest_properties = {}

hardware_version = "vmx-14"

href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

internal_disk = [

{

bus_number = 0

bus_type = "paravirtual"

disk_id = "2000"

iops = 0

size_in_mb = 122880

storage_profile = "Gold Storage Policy"

thin_provisioned = true

unit_number = 0

},

]

memory = 8192

metadata = {}

name = "Zabbix"

org = "mClouds"

os_type = "centos8_64Guest"

storage_profile = "Gold Storage Policy"

vapp_name = "Monitoring"

vdc = "mClouds"

customization {

allow_local_admin_password = true

auto_generate_password = true

change_sid = false

enabled = false

force = false

join_domain = false

join_org_domain = false

must_change_password_on_first_login = false

number_of_auto_logons = 0

}

network {

adapter_type = "VMXNET3"

ip_allocation_mode = "DHCP"

is_primary = true

mac = "00:50:56:07:01:b1"

name = "MCLOUDS-LAN01"

type = "org"

}

}

์ด์ œ ํ™•์‹คํžˆ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ง€์ (๊ธฐ์กด ์ธํ”„๋ผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ)์„ ์™„๋ฃŒํ–ˆ์œผ๋ฉฐ Terraform ์ž‘์—…์˜ ๋ชจ๋“  ์ฃผ์š” ์ง€์ ์„ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค. 

์ด ๋„๊ตฌ๋Š” ๋งค์šฐ ํŽธ๋ฆฌํ•œ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์œผ๋ฉฐ ํ•œ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž์˜ ๊ฐ€์ƒ ๋จธ์‹ ๋ถ€ํ„ฐ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ฆฌ์†Œ์Šค ์„ค๋ช…์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— ํ™˜๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ์˜ ๋…๋ฆฝ์„ฑ์„ ํ†ตํ•ด ๋กœ์ปฌ, ํด๋ผ์šฐ๋“œ ๋ฆฌ์†Œ์Šค์™€์˜ ์ž‘์—…์€ ๋ฌผ๋ก  ํ”Œ๋žซํผ ๊ด€๋ฆฌ๊นŒ์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ํ”Œ๋žซํผ์ด ์—†๊ณ  ์ƒˆ ํ”Œ๋žซํผ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ž์ฒด ๊ณต๊ธ‰์ž๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€