Post

Terraform Basic ์ •๋ฆฌ

Terraform์ด๋ž€?

Terraform์€ ์ฝ”๋“œ๋กœ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค. ์œ ์‚ฌํ•œ ๋„๊ตฌ๋กœ๋Š” AWS์˜ CloudFormation์ด ์žˆ๋Š”๋ฐ, AWS์— ์น˜์ค‘๋œ CloudFormation๊ณผ ๋‹ค๋ฅด๊ฒŒ Terraform์€ ์˜คํ”ˆ์†Œ์Šค(?)๋กœ Azure ๋“ฑ ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

ํ…Œ๋ผํผ์€ ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.

  • immutable(๋ถˆ๋ณ€): ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ๋Š” ํ•œ๋ฒˆ ๋ฐฐํฌ๋œ ๋ฆฌ์†Œ์Šค๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค. ๋‹ค๋งŒ, ์ธ์Šคํ„ด์Šค ํƒ€์ž… ๋“ฑ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์žฌ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์‚ด์ง ์ฃผ์ œ๋ฅผ ๋ฒ—์–ด๋‚ฌ์ง€๋งŒ, EC2์˜ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ, ์Šคํ† ๋ฆฌ์ง€๋Š” ์œ ์ง€๋˜๋‚˜, ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋‚ ์•„๊ฐ„๋‹ค. - ๊ทธ๋ž˜์„œ ๋™์ผํ•œ ์„œ๋น„์Šค๋ฅผ ์ง„ํ–‰ํ•˜๋‚˜ ๋‹ค์šดํƒ€์ž„์ด ์ƒ๊ธด๋‹ค.)
  • declarative(์„ ์–ธํ˜•): C์–ธ์–ด์™€ ๊ฐ™์ด ๋ช…๋ นํ˜•์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ตฌ์กฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๋“ฏ ๊ตฌ์ฒด์ ์ธ ํŠน์„ฑ์„ ์ •์˜ํ•จ.
  • State file: ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค. ID ๊ฐ’์„ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•˜๋ฉฐ, state ํŒŒ์ผ์€ ๊ทธ๋Œ€๋กœ ์žˆ๋Š” ๋ฐ ์ž„์˜๋กœ ํด๋ผ์šฐ๋“œ์—์„œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์—†์–ด, Terraform์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • Backends ๋ธ”๋Ÿญ์„ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ์›๊ฒฉ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. VCS์— ์ปค๋ฐ‹ํ•˜๊ณ  Terraform ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • modules: ์žฌ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ์„ ์ง€์›ํ•˜๋ฉฐ, Terraform Registry์— ๊ณต๊ฐœ์ ์œผ๋กœ ๋ชจ๋“ˆ์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๊ณ  ํ•˜์‹œ์ฝ”ํ”„๊ฐ€ ๊ฒ€์ฆ๋„ ์ง„ํ–‰ํ•œ๋‹ค.

๊ตฌ์„ฑ์š”์†Œ

Terraform์€ ํฌ๊ฒŒ ํ…Œ๋ผํผ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Terraform Core(CLI)์™€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ์ œ๊ณต์ž์™€ ๊ด€๋ จ๋œ Plugins(Provider, Provisioner)์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

์ด์™ธ์—๋„ Terraform ๋ชจ๋“ˆ์„ ๊ณต์œ ํ•˜๋Š” ์ €์žฅ์†Œ์ธ Registry, ํ˜„์žฌ ์ธํ”„๋ผ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ์ธํ”„๋ผ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” State ํŒŒ์ผ ๋“ฑ์ด ์ถ”๊ฐ€์ ์œผ๋กœ ์กด์žฌํ•œ๋‹ค.

What is IaC?

Iac(infrastructre as Code)

์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ”„๋กœ๋น„์ €๋‹(Code๋ฅผ ํ†ตํ•ด ์ธํ”„๋ผ๋ฅผ ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์‚ญ์ œ)ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

ํ…Œ๋ผํผ์€ IaC๋„๊ตฌ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • HashiCorp(ํ•˜์‹œ์ฝ”๋“œ)์—์„œ ์ œ์ž‘ํ•œ ์˜คํ”ˆ์†Œ์Šค Iac
  • Declarative(์„ ์–ธํ˜•) : ์›ํ•˜๋Š” ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ •์˜.
  • ๋ถˆ๋ณ€ : ์ธํ”„๋ผ๊ฐ€ ๋ฐฐํฌ๋œ ํ›„, ์—…๋ฐ์ดํŠธ๊ฐ€ ์•„๋‹Œ ์žฌ์ƒ์„ฑ ๋ฐ ๊ต์ฒด
    • ๋ช‡๊ฐ€์ง€ ํŠน์„ฑ์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅ ex) EC2 ์ธ์Šคํ„ด์Šค ํƒ€์ž…, ํ•˜์ง€๋งŒ ๋ฆฌ์†Œ์Šค๋Š” ์ดˆ๊ธฐํ™”๋œ๋‹ค.
  • Golang
  • API๋กœ ๋ชจ๋“  ํ•ญ๋ชฉ ๊ด€๋ฆฌ

์žฅ์ 

์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ฌ๋Ÿฌ ํˆด, ์žฌ์‚ฌ์šฉ์„ฑ์˜ ๊ฐ•์ 

Git ๊ณผ ๊ฐ™์€ ํ˜•์ƒ ๊ด€๋ฆฌ์™€ ์—ฐ๋™ํ•˜์—ฌ(ํ•˜์ง€๋งŒ, ๊นƒ์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ registry๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•œ๋‹ค.), ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๋‚จ๊ฒจ ๋ฌธ์ œ ์›์ธ์„ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค.

ํ…Œ๋ผํผ ๋ฌธ์„œ์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ธํ”„๋ผ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ •์˜ํ•œ๋‹ค.

Day 0 : ์ดˆ๊ธฐ ์ธํ”„๋ผ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ ํ•œ๋‹ค.

Day 1 : OS ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ์„ ์™„๋ฃŒํ•œ๋‹ค.

Day 1 ~ Day N : ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. (Chef, Ansible, Docker ์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ Terraform์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.)

์ถ”๊ฐ€์ ์œผ๋กœ, ์œ„์˜ ์‚ฌ์ดํŠธ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜์ƒ์„ ์ œ๊ณตํ•œ๋‹ค. ์˜์–ด์ด๊ณ , ์ค‘๋ณต๋œ ๋‚ด์šฉ์ด ๋งŽ์•„ ์ง์ ‘ ์ˆ˜๊ฐ•ํ•˜์ง„ ์•Š๊ณ  Summarize๋ฅผ ํ†ตํ•ด ์š”์•ฝํ–ˆ๋‹ค.

CTO๊ฐ€ Terraform ์†Œ๊ฐœ๋ฅผ ์ง„ํ–‰ํ•œ ์œ ํŠœ๋ธŒ๋ฅผ summarize๋ฅผ ํ†ตํ•ด ์š”์•ฝํ•œ ๊ฒฐ๊ณผ์ด๋‹ค. > ๐Ÿ’ก **ํ…Œ๋ผํผ ์†Œ๊ฐœ** > Terraform์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ”„๋ผ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ์œผ๋กœ์จ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Terraform์˜ ์ ์šฉ ๋‹จ๊ณ„๋Š” ์‹ค์ œ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ๊ณ„ํš์„ ์‹คํ–‰ํ•˜์—ฌ ์„ฑ๊ณต์ ์ธ ์‹คํ–‰์„ ์œ„ํ•ด ์ข…์†์„ฑ์ด ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ์ •์˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. **Terraform ์‚ฌ์šฉ์˜ ์žฅ์ ์€ ์ธํ”„๋ผ ์ƒํƒœ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ ๋‘˜์งธ ๋‚  ์ž‘์—…์„ ์ฒซ์งธ ๋‚ ๊ณผ ๋™์ผํ•˜๊ฒŒ ์›ํ™œํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.** > > ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค์ด ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ์˜ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ†ตํ•ฉํ•˜๋Š” ์ด์ฒด์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ค‘์š”์„ฑ์„ ๊ฐ•์กฐํ•˜๋Š” ๊ฒƒ์ด Terraform ์ž‘์„ฑ์ž์˜ ๊ด€์ ์ž…๋‹ˆ๋‹ค. > > ํ…Œ๋ผํผ์„ ์‚ฌ์šฉํ•˜๋Š” ์›Œํฌํ”Œ๋กœ๋Š” ํ…Œ๋ผํผ ๊ตฌ์„ฑ์„ ์ž‘์„ฑํ•˜๊ณ , ๊ณ„ํš์„ ์‹คํ–‰ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•œ ๋‹ค์Œ, ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ธํ”„๋ผ ๊ด€๋ฆฌ์˜ ์ง€์†์ ์ธ ์ฃผ๊ธฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. > > Terraform์˜ ์ค‘์•™ ์ง‘์ค‘์‹ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ”„๋กœ๋น„์ €๋‹ ๋ฐ ์†Œ๋ฉธ๋˜๋„๋ก ๋ณด์žฅํ•˜์—ฌ ์ถฉ๋Œ๊ณผ ์ƒํƒœ ํŒŒ์ผ ๋ถ„์‚ฐ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. > > Terraform์˜ ๋ชจ๋“ˆ์€ VM, ๋žŒ๋‹ค ํ•จ์ˆ˜, ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•˜์—ฌ ๋ณต์žก์„ฑ์„ ์บก์Аํ™”ํ•˜๊ณ  ์†Œ๋น„์ž์—๊ฒŒ ๊ฐ„์†Œํ™”๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. > > Google ๋ฐ Azure์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด๋Š” ๋„คํŠธ์›Œํฌ ๋ฐ ์ธํ”„๋ผ ํ”„๋กœ๋น„์ €๋‹์— ๋Œ€ํ•œ ๊ณต์‹ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ๊ฒŒ์‹œํ•˜์—ฌ Terraform ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ์˜ ์•ˆ์ •์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. Terraform์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ”„๋ผ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ์œผ๋กœ์จ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Terraform์˜ ์ ์šฉ ๋‹จ๊ณ„๋Š” ์‹ค์ œ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ๊ณ„ํš์„ ์‹คํ–‰ํ•˜์—ฌ ์„ฑ๊ณต์ ์ธ ์‹คํ–‰์„ ์œ„ํ•ด ์ข…์†์„ฑ์ด ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ์ •์˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. **Terraform ์‚ฌ์šฉ์˜ ์žฅ์ ์€ ์ธํ”„๋ผ ์ƒํƒœ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ ๋‘˜์งธ ๋‚  ์ž‘์—…์„ ์ฒซ์งธ ๋‚ ๊ณผ ๋™์ผํ•˜๊ฒŒ ์›ํ™œํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.** ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค์ด ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ์˜ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ†ตํ•ฉํ•˜๋Š” ์ด์ฒด์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ค‘์š”์„ฑ์„ ๊ฐ•์กฐํ•˜๋Š” ๊ฒƒ์ด Terraform ์ž‘์„ฑ์ž์˜ ๊ด€์ ์ž…๋‹ˆ๋‹ค. ํ…Œ๋ผํผ์„ ์‚ฌ์šฉํ•˜๋Š” ์›Œํฌํ”Œ๋กœ๋Š” ํ…Œ๋ผํผ ๊ตฌ์„ฑ์„ ์ž‘์„ฑํ•˜๊ณ , ๊ณ„ํš์„ ์‹คํ–‰ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•œ ๋‹ค์Œ, ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ธํ”„๋ผ ๊ด€๋ฆฌ์˜ ์ง€์†์ ์ธ ์ฃผ๊ธฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Terraform์˜ ์ค‘์•™ ์ง‘์ค‘์‹ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ”„๋กœ๋น„์ €๋‹ ๋ฐ ์†Œ๋ฉธ๋˜๋„๋ก ๋ณด์žฅํ•˜์—ฌ ์ถฉ๋Œ๊ณผ ์ƒํƒœ ํŒŒ์ผ ๋ถ„์‚ฐ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. Terraform์˜ ๋ชจ๋“ˆ์€ VM, ๋žŒ๋‹ค ํ•จ์ˆ˜, ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•˜์—ฌ ๋ณต์žก์„ฑ์„ ์บก์Аํ™”ํ•˜๊ณ  ์†Œ๋น„์ž์—๊ฒŒ ๊ฐ„์†Œํ™”๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Google ๋ฐ Azure์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด๋Š” ๋„คํŠธ์›Œํฌ ๋ฐ ์ธํ”„๋ผ ํ”„๋กœ๋น„์ €๋‹์— ๋Œ€ํ•œ ๊ณต์‹ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ๊ฒŒ์‹œํ•˜์—ฌ Terraform ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ์˜ ์•ˆ์ •์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜

ํ…Œ๋ผํผ์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํฌ๊ฒŒ Terraform core, Terraform Plugins ์œผ๋กœ ๋‚˜๋‰œ๋‹ค. Terraform Core๋Š” ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ(RPC)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ†ต์‹ ํ•˜๋ฉฐ, ํ”Œ๋Ÿฌ๊ทธ์ธ(ํ”„๋กœ๋ฐ”์ด๋”)๋Š” ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ API๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

1.avif

Terraform Core(CLI)

Terraform ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์œผ๋กœ, CLI ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ Terraform ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ , ํ•ด๋‹น ์ฝ”๋“œ์— ๊ธฐ์ˆ ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ, ์ˆ˜์ •, ๋˜๋Š” ์‚ญ์ œํ•ด์•ผ ํ•˜๋Š”์ง€ ํŒ๋‹จํ•˜์—ฌ, ํ•„์š”์— ๋”ฐ๋ผ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ํ”Œ๋žซํผ์˜ API๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

Terraform Plugins

RPC๋ฅผ ํ†ตํ•ด Terraform Core์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ˜ธ์ถœํ•œ๋‹ค. ๊ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ AWS์™€ ๊ฐ™์€ ํŠน์ • ํ”Œ๋žซํผ์— ๋Œ€ํ•œ API ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, Core๊ฐ€ ์š”์ฒญํ•œ ์ž‘์—…(์ƒ์„ฑ, ์‚ญ์ œ, ์ˆ˜์ •)์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ โ€œํ”„๋กœ๋ฐ”์ด๋”โ€๋ผ๋Š” ํ˜•ํƒœ๋กœ ์ œ๊ณต๋œ๋‹ค. โ€œInit ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.โ€

์‚ฌ์šฉ์˜ˆ์‹œ

Multi-Cloud Deployment

ํ•œ๋ฒˆ์— ๋‹ค์–‘ํ•œ ์ œ๊ณต์ž(ํด๋ผ์šฐ๋“œ)์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Application Infrastructure Deployment, Scaling, and Monitoring Tools

๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ๊ณ„์ธต๊ฐ„์˜ ์ข…์†์„ฑ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, Terraform์€ DB Tier๋ฅผ ๋ฐฐํฌ ํ›„ ์›น ์„œ๋ฒ„(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ‹ฐ์–ด)๋ฅผ ๋ฐฐํฌํ•œ๋‹ค.

Self-Service Clusters

๋Œ€๊ทœ๋ชจ์˜ ์กฐ์ง์—์„œ๋Š” ๋ฐ˜๋ณต์ ์ธ ์ธํ”„๋ผ ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํ…Œ๋ผํผ์—์„œ โ€œself-serveโ€ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” Terraform ๋ชจ๋“ˆ์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, Terraform Cloud๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ServiceNow์™€ ๊ฐ™์€ ํ‹ฐ์ผ“ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

Policy Compliance and Management

๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ •์ฑ…์„ ํ…Œ๋ผํผ์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. Sentienl์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ๋ผํผ์ด ์ธํ”„๋ผ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „ ๊ทœ์ • ์ค€์ˆ˜ ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค ์ •์ฑ…์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Sentinel์€ ์œ ๋ฃŒ์ด๋‹ค.(Terraform Cloud or ๊ฑฐ๋ฒ„๋„ˆ์Šค ํ‹ฐ์–ด๋งŒ ๊ฐ€๋Šฅ)

Software Defined Networking

ํ…Œ๋ผํผ์„ ํ†ตํ•ด Network ์ž๋™ํ™”๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Consul์— ์—ฐ๊ฒฐํ•˜์—ฌ ์„œ๋น„์Šค ์ƒํƒœ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ์ธ Consul-Terraform-Sync์— ์˜ํ•ด ์ˆ˜ํ–‰๋œ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜๋กœ Consul์—์„œ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ์ •์˜ํ•˜๋ฉด ํ…Œ๋ผํผ์ด ์ž๋™์ ์œผ๋กœ ์ธ์‹ํ•˜๊ณ , ์ธํ”„๋ผ ์ œ๊ณต์ž(Route 53๋“ฑ๋“ฑ)์— ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๊ตฌ์กฐ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

assets.avif

Kubernetes

ํ…Œ๋ผํผ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฐฐํฌํ•˜๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋น„์Šค, ํŒŒ๋“œ ๋“ฑ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ฒ˜์Œ ์•Œ์•˜๋‹ค.

Parallel Environments

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

This post is licensed under CC BY 4.0 by the author.