[ํ…Œ๋ผํผ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” IaC] HCL ๋ธ”๋ก ๋ฐ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฌธ๋ฒ•

2023. 10. 29. 22:30ใ†ETC

 

[ํ…Œ๋ผํผ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” IaC] IaC์™€ ํ…Œ๋ผํผ ๊ฐœ์š”, ํ…Œ๋ผํผ ๊ธฐ๋ณธ ๋ช…๋ น์–ด

์ฝ”๋“œ๋กœ ์ธํ”„๋ผ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•œ๋‹ค๋Š” ๊ฒƒ์— ํฅ๋ฏธ๋ฅผ ๋Š๊ผˆ๊ณ  ์œ„ ์ฑ…์„ ์ถ”์ฒœ๋ฐ›์•„ ์ฝ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํฌ์ŠคํŒ… ๋‚ด์šฉ์€ "ํ…Œ๋ผํผ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” IaC" ๋„์„œ๋ฅผ ์ฝ๊ณ  ์š”์•ฝํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. Chapter 1. IaC์™€ ํ…Œ๋ผํผ IaC

hyeon-joo.tistory.com

ํฌ์ŠคํŒ… ๋‚ด์šฉ์€ "ํ…Œ๋ผํผ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” IaC" ๋„์„œ๋ฅผ ์ฝ๊ณ  ์š”์•ฝํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ๋ณธ ํฌ์ŠคํŒ…์€ ์œ„ ํฌ์ŠคํŒ… ๋‚ด์šฉ์—์„œ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

 

Chapter 3 - (2) ์„ ์–ธ ๋ธ”๋ก

HCL์ด๋ž€?

HashiCorp์‚ฌ์—์„œ IaC์™€ ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ.

 

ํ…Œ๋ผํผ ๋ฒ„์ „

ํ‘œ๊ธฐ ๋ฐฉ์‹ : semantic versioning ( Major.Minor.Patch )

terraform, module์—์„œ ๋ฒ„์ „ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

  • Major ๋ฒ„์ „ : ๋‚ด๋ถ€ ๋™์ž‘์˜ API๊ฐ€ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ํ•˜์œ„ ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š๋Š” ๋ฒ„์ „
  • Minor ๋ฒ„์ „ : ์‹ ๊ทœ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๊ฐœ์„ ๋˜๊ณ  ํ•˜์œ„ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „
  • Patch ๋ฒ„์ „ : ๋ฒ„๊ทธ ๋ฐ ์ผ๋ถ€ ๊ธฐ๋Šฅ์ด ๊ฐœ์„ ๋œ ํ•˜์œ„ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „

required_version : ํ…Œ๋ผํผ ๋ฒ„์ „์„ ๋ช…์‹œํ•œ๋‹ค. ํ…Œ๋ผํผ ๋ฒ„์ „์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ๋‚ด์—ญ์€ ๋‹ค์Œ ๋งํฌ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ : Changelog

required_providers : ํ…Œ๋ผํผ ๋ธ”๋ก์—์„œ ๊ฐ ํ”„๋กœ๋ฐ”์ด๋”์˜ ์ด๋ฆ„์— ์†Œ์Šค ๊ฒฝ๋กœ์™€ ๋ฒ„์ „์„ ๋ช…์‹œํ•œ๋‹ค.

 

1. terraform ๋ธ”๋ก

ํ…Œ๋ผํผ์˜ ๊ตฌ์„ฑ์„ ๋ช…์‹œํ•œ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ํ•จ๊ป˜ ์ž‘์—…ํ•  ๋•Œ๋Š” ๋ฒ„์ „์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜๊ณ  ํ•„์š”ํ•œ ์กฐ๊ฑด์„ ์ž…๋ ฅํ•˜์—ฌ ์‹คํ–‰ ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™”ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

 

2. backend ๋ธ”๋ก

ํ…Œ๋ผํผ ์‹คํ–‰ ์‹œ ์ €์žฅ๋˜๋Š” state(์ƒํƒœ ํŒŒ์ผ)์˜ ์ €์žฅ ์œ„์น˜๋ฅผ ์„ ์–ธํ•œ๋‹ค. ํ…Œ๋ผํผ์—์„œ๋Š” ํ•˜๋‚˜์˜ ๋ฐฑ์—”๋“œ๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. ํ˜‘์—…์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ์ƒํƒœ ์ €์žฅ ํŒŒ์ผ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์™ธ๋ถ€ ๋ฐฑ์—”๋“œ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์ด๋Š” ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์ž๊ฐ€ ์ ‘๊ทผํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์œ  ์Šคํ† ๋ฆฌ์ง€์™€ ๊ฐ™์€ ๊ฐœ๋…์„ ๊ฐ–๋Š”๋‹ค. state์˜ ์•ˆ์ „ํ•œ ๋ณด๊ด€์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ๊ณ ๊ฐ€์šฉ์„ฑ๊ณผ ๋ฐฑ์—…์ด ์ง€์›๋˜๋Š” ์ €์žฅ์†Œ๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋‹ค.

  • state ์ž ๊ธˆ ๋™์ž‘
    ๊ณต์œ ๋˜๋Š” ๋ฐฑ์—”๋“œ์— state๊ฐ€ ๊ด€๋ฆฌ๋˜๋ฉด ํ…Œ๋ผํผ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ .terraform.tfstate.lock.info ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์–ด ํ•ด๋‹น state๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ž ๊ธˆ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  • ๋ฐฑ์—”๋“œ ์„ค์ • ๋ณ€๊ฒฝ
    ๋ฐฑ์—”๋“œ๊ฐ€ ์„ค์ •๋˜๋ฉด Init ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•ด state์˜ ์œ„์น˜๋ฅผ ์žฌ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ƒˆ๋กœ์šด ๋ฐฑ์—”๋“œ ์œ„์น˜ ์„ค์ • ์‹œ, ๋‘๊ฐ€์ง€ ์˜ต์…˜์ด ์กด์žฌํ•œ๋‹ค.
  1. ์ด์ „ ๊ตฌ์„ฑ ์œ ์ง€ (default) : -migrate-state๋Š” terraform.tfstate์˜ ์ด์ „ ๊ตฌ์„ฑ์—์„œ ์ตœ์‹ ์˜ state ์Šค๋ƒ…์ƒท์„ ์ฝ๊ณ  ๊ธฐ๋ก๋œ ์ •๋ณด๋ฅผ ์ƒˆ ๊ตฌ์„ฑ์œผ๋กœ ์ „ํ™˜ํ•œ๋‹ค.
  2. ์ƒˆ๋กœ ์ดˆ๊ธฐํ™” : -reconfiguresms init๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— terraform.tfstate ํŒŒ์ผ์„ ์‚ญ์ œํ•ด ํ…Œ๋ผํผ์„ ์ฒ˜์Œ ์‚ฌ์šฉํ•  ๋•Œ์ฒ˜๋Ÿผ ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋™์ž‘์ด๋‹ค.

3. resource ๋ธ”๋ก

์„ ์–ธ๋œ ํ•ญ๋ชฉ์„ ์ƒ์„ฑํ•˜๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

resource "<๋ฆฌ์†Œ์Šค ์œ ํ˜•>" "<์ด๋ฆ„>" {
    <์ธ์ˆ˜> = <๊ฐ’>
}

๋ฆฌ์†Œ์Šค ์œ ํ˜•์€ ํ”„๋กœ๋ฐ”์ด๋”์— ์ข…์†์„ฑ์„ ๊ฐ–๋Š”๋‹ค. ํŠน์ • ํ”„๋กœ๋ฐ”์ด๋” ์œ ํ˜•๋งŒ ์ถ”๊ฐ€ํ•ด๋„ terraform init์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ•ด๋‹น ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

3-1. ์ข…์†์„ฑ

ํ…Œ๋ผํผ์˜ ์ข…์†์„ฑ์€ resource, module ์„ ์–ธ์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹๋˜๋Š” ๊ฐ ์š”์†Œ์˜ ์ƒ์„ฑ ์ˆœ์„œ๋ฅผ ๊ตฌ๋ถ„ ์ง“๋Š”๋‹ค.

  • ์•”์‹œ์  ์ข…์†์„ฑ : ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์—์„œ ๊ฐ’์„ ์ฐธ์กฐํ•ด ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ ์ƒ์„ฑ ์„ ํ›„ ๊ด€๊ณ„์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์ •์˜๋œ๋‹ค.
  • ๋ช…์‹œ์  ์ข…์†์„ : depends_on ๋ฉ”ํƒ€์ธ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ•์ œ๋กœ ๋ฆฌ์†Œ์Šค ๊ฐ„ ์ข…์†์„ฑ์„ ๋ถ€์—ฌํ•œ๋‹ค.

3-2. ๋ฆฌ์†Œ์Šค ์†์„ฑ ์ฐธ์กฐ

๋ฆฌ์†Œ์Šค ๊ตฌ์„ฑ์—์„œ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ ์ธ์ˆ˜์™€ ์†์„ฑ์ด๋‹ค. ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ‘์ธ์ˆ˜’๋ฅผ ๋ฐ›์•„ ์‹ค์ œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ผ๋ถ€ ๋ฆฌ์†Œ์Šค๋Š” ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ๊ฐ‘์ด๋‚˜ ์ถ”๊ฐ€๋˜๋Š” ‘์†์„ฑ’์ด ๋ถ€์—ฌ๋œ๋‹ค.

  • Arguments(์ธ์ˆ˜): ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ์–ธํ•˜๋Š” ๊ฐ’.
  • Attributes(์†์„ฑ): ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์ดํ›„ ํš๋“ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค ๊ณ ์œ  ๊ฐ’
# ๋ฆฌ์†Œ์Šค ์ฐธ์กฐ
<๋ฆฌ์†Œ์Šค ์œ ํ˜•>.<์ด๋ฆ„>.<์ธ์ˆ˜>
<๋ฆฌ์†Œ์Šค ์œ ํ˜•>.<์ด๋ฆ„>.<์†์„ฑ>

3-3. ์ˆ˜๋ช… ์ฃผ๊ธฐ

๋ฆฌ์†Œ์Šค์˜ ๊ธฐ๋ณธ ์ˆ˜๋ช…์ฃผ๊ธฐ๋ฅผ ์ž‘์—…์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”ํƒ€์ธ์ˆ˜. ํ…Œ๋ผํผ์˜ ๊ธฐ๋ณธ ์ˆ˜๋ช…์ฃผ๊ธฐ๋Š” ์‚ญ์ œ ํ›„ ์ƒ์„ฑ์ด๋‹ค.

  1. create_before_destroy
    : true๋กœ ์„ ์–ธ๋˜๋ฉด ์ˆ˜์ •๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋จผ์ € ์ƒ์„ฑ ํ›„ ์‚ญ์ œ๋œ๋‹ค. ๋‹จ, ์ƒ์„ฑ๋˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๋กœ ์ธํ•ด ์ƒ์„ฑ์ด ์‹คํŒจ๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ ์‹œ ํ•จ๊ป˜ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
  2. prevent_destroy
    : ์ž‘์—…์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ํŠน์ • ๋ฆฌ์†Œ์Šค์˜ ์‚ญ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ…Œ๋ผํผ ์ˆ˜๋ช…์ฃผ๊ธฐ(์‚ญ์ œ→์ƒ์„ฑ)์— ๋”ฐ๋ผ ์ˆ˜ํ–‰๋˜๋Š” ๋ฆฌ์†Œ์Šค์— prevent_destroy๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค ๊ตฌ์„ฑ ์ˆ˜์ • ํ›„ terraform apply ์‹œ ์‹คํŒจํ•˜๊ฒŒ ๋œ๋‹ค.
  3. ignore_changes
    : ๋ฆฌ์†Œ์Šค ์š”์†Œ์˜ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•ด ์ˆ˜์ • ๊ณ„ํš์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ignore_changes = all๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. precondition
    : ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์ด์ „์— ์ž…๋ ฅ๋œ ์ธ์ˆ˜ ๊ฐ’์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๋น„์ €๋‹ ์ด์ „์— ๋ฏธ๋ฆฌ ์•ฝ์†๋œ ๊ฐ’ ์ด์™ธ์˜ ๊ฐ’ ๋˜๋Š” ํ•„์ˆ˜๋กœ ๋ช…์‹œํ•ด์•ผ ํ•˜๋Š” ์ธ์ˆ˜ ๊ฐ’์„ ๊ฒ€์ฆํ•œ๋‹ค. ํ”„๋กœ๋น„์ €๋‹ํ•ด์•ผ ํ•˜๋Š” ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ์˜ VM์„ ์ƒ์„ฑํ•  ๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฒ€์ฆ๋œ ์ด๋ฏธ์ง€์˜ id๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€, ์Šคํ† ๋ฆฌ์ง€ ์•”ํ˜ธํ™” ์„ค์ •์ด ๋˜์–ด์žˆ๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•˜๊ณ  ์‚ฌ์ „์— ์ž˜๋ชป๋œ ํ”„๋กœ๋น„์ €๋‹์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  5. postcondition
    : ํ”„๋กœ๋น„์ €๋‹ ๋ณ€๊ฒฝ ์ดํ›„ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•จ๊ณผ ๋™์‹œ์— ์˜์กด์„ฑ์„ ๊ฐ–๋Š” ๋‹ค๋ฅธ ๊ตฌ์„ฑ์˜ ๋ณ€๊ฒฝ์„ ๋ง‰๋Š”๋‹ค. ํŠนํžˆ ํ”„๋กœ๋น„์ €๋‹ ์ดํ›„์— ์ƒ์„ฑ๋˜๋Š” ์†์„ฑ๊ฐ’์ด ์žˆ์œผ๋ฏ€๋กœ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์— ์˜ˆ์ƒ๋˜์ง€ ์•Š์€ ํ”„๋กœ๋น„์ €๋‹ ์ž‘์—…์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Chapter 3 - (3) ๋ฐ์ดํ„ฐ ์†Œ์Šค

ํ…Œ๋ผํผ์œผ๋กœ ์ •์˜๋˜์ง€ ์•Š์€ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ๋˜๋Š” ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ํ…Œ๋ผํผ ๋‚ด์—์„œ ์ฐธ์กฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

data "<๋ฆฌ์†Œ์Šค ์œ ํ˜•>" "<์ด๋ฆ„>" {
    <์ธ์ˆ˜> = <๊ฐ’>
}

# ๋ฐ์ดํ„ฐ ์†Œ์Šค ์ฐธ์กฐ
data.<๋ฆฌ์†Œ์Šค ์œ ํ˜•>.<์ด๋ฆ„>.<์†์„ฑ>

 

 

Chapter 3 - (4) ์ž…๋ ฅ ๋ณ€์ˆ˜(variable)

์ธํ”„๋ผ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์†์„ฑ ๊ฐ’์„ ์ •์˜ํ•ด ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์—†์ด ์—ฌ๋Ÿฌ ์ธํ”„๋ผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค. ํ”„๋กœ๋น„์ €๋‹ ์‹คํ–‰ ์‹œ์— ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋ณ€์ˆ˜์— ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

variable "<์ด๋ฆ„>" {
    <์ด๋ฆ„> = <๊ฐ’>
}

๋ฉ”ํƒ€์ธ์ˆ˜

  • default : ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’ ์ •์˜
  • type : ๋ณ€์ˆ˜์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’ ์œ ํ˜•์˜ ์ •์˜
  • description : ์ž…๋ ฅ ๋ณ€์ˆ˜์˜ ์„ค๋ช…
  • validation : ๋ณ€์ˆ˜ ์„ ์–ธ์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ์ •์˜
  • sensitive : ๋ฏผ๊ฐํ•œ ๋ณ€์ˆ˜ ๊ฐ’์ž„์„ ์•Œ๋ฆฌ๊ณ  ํ…Œ๋ผํผ์˜ ์ถœ๋ ฅ๋ฌธ์—์„œ ๊ฐ’ ๋…ธ์ถœ์„ ์ œํ•œ
  • nullable : ๋ณ€์ˆ˜์— ๊ฐ’์ด ์—†์–ด๋„ ๋จ์„ ์ง€์ •

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

์ž…๋ ฅ๋ณ€์ˆ˜ ๋ธ”๋ก ๋‚ด valiation ๋ธ”๋ก์„ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. validation ๋ธ”๋ก์—์„œ condition์— ์ง€์ •๋˜๋Š” ๊ทœ์น™์ด true ๋˜๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋ฉฐ, error_message๋Š” condition ๊ฐ’์˜ ๊ฒฐ๊ณผ๊ฐ€ false์ธ ๊ฒฝ์šฐ ์ถœ๋ ฅ๋˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ •์˜ํ•œ๋‹ค. valudation ๋ธ”๋ก์€ ์ค‘๋ณต์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. regrex ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์— ์ •๊ทœ์‹์„ ์ ์šฉํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์—ฌ๊ธฐ์— can ํ•จ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ •๊ทœ์‹์— ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์˜ ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์ถœํ•œ๋‹ค.

 

๋ณ€์ˆ˜ ์ฐธ์กฐ

variable์€ ์ฝ”๋“œ ๋‚ด์—์„œ var.<์ด๋ฆ„>์œผ๋กœ ์ฐธ์กฐ๋œ๋‹ค.

 

๋ฏผ๊ฐํ•œ ๋ณ€์ˆ˜ ์ทจ๊ธ‰

๋ณ€์ˆ˜ ์„ ์–ธ์— sensitive=ture๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ถ”๊ฐ€ ์‹œ, ํ…Œ๋ผํผ์˜ ๊ณ„ํš ์ถœ๋ ฅ์—์„œ ์ฐธ์กฐ๋˜๋Š” ๋ณ€์ˆ˜ ๊ฐ’์ด (sensitive)๋กœ ๊ฐ์ถฐ์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฏผ๊ฐํ•œ ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•ด๋„ terraform.tfstate ํŒŒ์ผ์—๋Š” ๊ฒฐ๊ณผ๋ฌผ์ด ํ‰๋ฌธ์œผ๋กœ ๊ธฐ๋ก๋˜๋ฏ€๋กœ State ํŒŒ์ผ์˜ ๋ณด์•ˆ์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.

 

๋ณ€์ˆ˜ ์šฐ์„ ์ˆœ์œ„

์ˆซ์ž๊ฐ€ ์ž‘์„์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๋„ ๋‚ฎ๋‹ค.

  1. ์‹คํ–‰ ํ›„ ์ž…๋ ฅ (๋ณ€์ˆ˜์— ๊ฐ’์ด ์„ ์–ธ๋˜์ง€ ์•Š์•„ CLI์—์„œ ์ž…๋ ฅ)
  2. variable ๋ธ”๋ก์˜ default ๊ฐ’
  3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (TF_VAR_๋ณ€์ˆ˜์ด๋ฆ„)
    • ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์ ‘๋‘์‚ฌ์— TF_VAR_๊ฐ€ ํฌํ•จ๋˜๋ฉด ๊ทธ ๋’ค์˜ ๋ฌธ์ž์—ด์˜ ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ์ธ์‹ํ•œ๋‹ค.
    # Unix/Linux/macOS
    export TF_VAR_my_var=var1
    
    # Windows Powershell
    $Env:TF_VAR_my_var="var1"
  4. terraform.tfvars์— ์ •์˜๋œ ๋ณ€์ˆ˜ ์„ ์–ธ
  5. *. auto.tfvars์— ์ •์˜๋œ ๋ณ€์ˆ˜ ์„ ์–ธ
  6. *.auto. tfvars.json์— ์ •์˜๋œ ๋ณ€์ˆ˜ ์„ ์–ธ
  7. CLI ์‹คํ–‰ ์‹œ -var ์ธ์ˆ˜์— ์ง€์ • ๋˜๋Š” -var-file๋กœ ํŒŒ์ผ ์ง€์ •
terraform plan -var=my_var=var7

terraform plan -var=my_var=var7 -var=my_var=var8

terraform plan -var=my_var=var7 -var-file=my_var=var9

.tfvars ํ™•์žฅ์ž๋กœ ์ƒ์„ฑ๋œ ํŒŒ์ผ์— ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๊ธฐ์ž…ํ•˜๋ฉด ์‹คํ–‰ ์‹œ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ๋ณ€์ˆ˜ ๊ฐ’์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. Terraform Cloud์—์„œ ๋ณ€์ˆ˜ ์ •์˜ ์‹œ, terraform.tfvars ํŒŒ์ผ ์ƒ์„ฑ๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•œ ์ž…๋ ฅ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ฎ์—ฌ ์“ฐ์ด์ง€ ์•Š๋„๋ก *.auto.tfvars ํ˜•ํƒœ์˜ ํŒŒ์ผ์„ ์ง€์›ํ•œ๋‹ค.

 

 

Chapter 3 - (5) local (์ง€์—ญ ๊ฐ’)

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

 

 

Chapter 3 - (6) ์ถœ๋ ฅ (output)

  • ๋ฃจํŠธ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ํ™•์ธํ•˜๊ณ ์ž ํ•˜๋Š” ํŠน์ • ์†์„ฑ ์ถœ๋ ฅ
  • ์ž์‹ ๋ชจ๋“ˆ์˜ ํŠน์ • ๊ฐ’์„ ์ •์˜ํ•˜๊ณ  ๋ฃจํŠธ ๋ชจ๋“ˆ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐ
  • ์„œ๋กœ ๋‹ค๋ฅธ ๋ฃจํŠธ ๋ชจ๋“ˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์›๊ฒฉ์œผ๋กœ ์ฝ๊ธฐ ์œ„ํ•œ ์ ‘๊ทผ ์š”์†Œ (ex: ์ž๋ฐ”์˜ getter)

sensitive์˜ ๊ฒฝ์šฐ ๊ฐ’์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋””๋ฒ„๊น… ๋ชฉ์ ๋ณด๋‹ค๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์—์„œ ํ™œ์šฉ๋œ๋‹ค.