[ํ…Œ๋ผํผ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” IaC] ๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด์‹, ํ•จ์ˆ˜ ๋“ฑ HCL ๋ฌธ๋ฒ•

2023. 11. 12. 23:23ใ†ETC

 

 

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

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

hyeon-joo.tistory.com

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

 

Chapter 3 - (7) ๋ฐ˜๋ณต๋ฌธ

count

count๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฆฌ์†Œ์Šค์™€ ๋ชจ๋“ˆ์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฐธ์กฐํ•œ๋‹ค.

<๋ฆฌ์†Œ์Šค ํƒ€์ž…>.<์ด๋ฆ„>[<์ธ๋ฑ์Šค๋ฒˆํ˜ธ>]
module.<๋ชจ๋“ˆ ์ด๋ฆ„>[<์ธ๋ฑ์Šค ๋ฒˆํ˜ธ>]

 

์ฃผ์˜ํ•  ์ 

  • ๋ชจ๋“ˆ ๋‚ด count ์ ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์„ ์–ธ์ด ์žˆ๋‹ค. (ex: provider ๋ธ”๋ก ์„ ์–ธ๋ถ€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ)
  • ์™ธ๋ถ€ ๋ณ€์ˆ˜๊ฐ€ list ํƒ€์ž…์ธ ๊ฒฝ์šฐ ์ค‘๊ฐ„ ๊ฐ’์ด ์‚ญ์ œ๋˜๋ฉด ์ดํ›„์— ์ •์˜๋œ ๋ฆฌ์†Œ์Šค๋“ค๋„ ์‚ญ์ œ๋˜๊ณ  ์žฌ์ƒ์„ฑ๋œ๋‹ค.

for_each

for_each์— ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๊ฐ€ map ๋˜๋Š” set์ด๋ฉด, ์„ ์–ธ๋œ key๊ฐ’ ๊ฐœ์ˆ˜๋งŒํผ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

  • each.key : ์ธ์Šคํ„ด์Šค์— ํ•ด๋‹นํ•˜๋Š” map ํƒ€์ž…์˜ key ๊ฐ’
  • each.value : ์ธ์Šคํ„ด์Šค์— ํ•ด๋‹นํ•˜๋Š” map์˜ value ๊ฐ’

for_each๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฆฌ์†Œ์Šค์™€ ๋ชจ๋“ˆ์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฐธ์กฐํ•œ๋‹ค.

<๋ฆฌ์†Œ์Šค ํƒ€์ž…>.<์ด๋ฆ„>[<key>]
module.<๋ชจ๋“ˆ ์ด๋ฆ„>[<key>]

for

for๋ฌธ์€ ๋ณตํ•ฉ ํ˜•์‹ ๊ฐ’์˜ ํ˜•ํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

  • list ํƒ€์ž…์˜ ๊ฒฝ์šฐ, ๊ฐ’ ๋˜๋Š” ์ธ๋ฑ์Šค์™€ ๊ฐ’์„ ๋ฐ˜ํ™˜
  • map ํƒ€์ž…์˜ ๊ฒฝ์šฐ, ํ‚ค ๋˜๋Š” ํ‚ค์™€ ๊ฐ’์— ๋Œ€ํ•ด ๋ฐ˜ํ™˜
  • set ํƒ€์ž…์˜ ๊ฒฝ์šฐ ํ‚ค ๊ฐ’์— ๋Œ€ํ•ด ๋ฐ˜ํ™˜

๊ทœ์น™

  • list: ๋ฐ˜ํ™˜๋ฐ›๋Š” ๊ฐ’์ด ํ•˜๋‚˜๋กœ ๋˜์–ด ์žˆ์œผ๋ฉด ๊ฐ’, ๋‘ ๊ฐœ์ธ ๊ฒฝ์šฐ ์•ž์˜ ์ธ์ˆ˜๊ฐ€ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋’ค์˜ ์ธ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ (๊ด€์šฉ์ ์œผ๋กœ ์ธ๋ฑ์Šค๋Š” i, ๊ฐ’์€ v๋กœ ํ‘œํ˜„)
  • map: ๋ฐ˜ํ™˜ ๋ฐ›๋Š” ๊ฐ’์ด ํ•˜๋‚˜๋กœ ๋˜์–ด ์žˆ์œผ๋ฉด ํ‚ค๋ฅผ, ๋‘ ๊ฐœ์ธ ๊ฒฝ์šฐ ์•ž์˜ ์ธ์ˆ˜๊ฐ€ ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋’ค์˜ ์ธ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ (๊ด€์šฉ์ ์œผ๋กœ ํ‚ค๋Š” k, ๊ฐ’์€ v๋กœ ํ‘œํ˜„)
  • ๊ฒฐ๊ณผ ๊ฐ’์€ for ๋ฌธ์„ ๋ฌถ๋Š” ๊ธฐํ˜ธ๊ฐ€ [ ]์ธ ๊ฒฝ์šฐ tuple๋กœ ๋ฐ˜ํ™˜๋˜๊ณ  { }์ธ ๊ฒฝ์šฐ object ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜
  • object ํ˜•ํƒœ์˜ ๊ฒฝ์šฐ ํ‚ค์™€ ๊ฐ’์— ๋Œ€ํ•œ ์Œ์€ ⇒ ๊ธฐํ˜ธ๋กœ ๊ตฌ๋ถ„
  • { } ํ˜•์‹์„ ์‚ฌ์šฉํ•ด object ํ˜•ํƒœ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ํ‚ค ๊ฐ’์€ ๊ณ ์œ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐ’ ๋’ค์— ๊ทธ๋ฃนํ™” ๋ชจ๋“œ ์‹ฌ๋ณผ(…)๋ฅผ ๋ถ™์—ฌ์„œ ํ‚ค์˜ ์ค‘๋ณต ๋ฐฉ์ง€ (ex: SQL์˜ group by, Java์˜ MultiValueMap)
  • if ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•ด ์กฐ๊ฑด ๋ถ€์—ฌ ๊ฐ€๋Šฅ

dynamic

๋ฆฌ์†Œ์Šค ๋‚ด์— ์„ ์–ธ๋˜๋Š” ๊ตฌ์„ฑ ๋ธ”๋ก์„ ๋‹ค์ค‘์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. dynamic ๋ธ”๋ก์—์„œ๋Š” ๊ธฐ์กด ์†์„ฑ ์ด๋ฆ„์„ dynamic ๋ธ”๋ก์˜ ์ด๋ฆ„์œผ๋กœ ์„ ์–ธํ•˜๊ณ  ๊ธฐ์กด ๋ธ”๋ก ์„ฑ์„ฑ์— ์ •์˜๋˜๋Š” ๋‚ด์šฉ์„ content ๋ธ”๋ก์— ์ž‘์„ฑํ•œ๋‹ค.

resource "provider_resource" "name" {
	name = "some_resource"
	
	dynamic "some_setting" {
		for each = {
			a_key = a_value
			b_key = b_value
			c_key = d_value
			d_key = d_value
		}

		content {
			key = some_setting.value
		}
	}
}

 

 

 

Chapter 3 - (8) ์กฐ๊ฑด์‹

ํ…Œ๋ผํผ์—์„œ์˜ ์กฐ๊ฑด์‹์€ 3ํ•ญ ์—ฐ์‚ฐ์ž ํ˜•ํƒœ๋ฅผ ๊ฐ–๋Š”๋‹ค.

# <์กฐ๊ฑด ์ •์˜> ? <์˜ณ์€ ๊ฒฝ์šฐ> : <ํ‹€๋ฆฐ ๊ฒฝ์šฐ>
var.a != "" ? var.a : "default-a"

์กฐ๊ฑด์‹์˜ ๊ฐ ์กฐ๊ฑด์€ ๋น„๊ต ๋Œ€์ƒ์˜ ํ˜•ํƒœ๊ฐ€ ๋‹ค๋ฅด๋ฉด ํ…Œ๋ผํผ ์‹คํ–‰ ์‹œ ์กฐ๊ฑด ๋น„๊ต๋ฅผ ์œ„ํ•ด ํ˜•ํƒœ๋ฅผ ์ถ”๋ก ํ•˜์—ฌ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฏ€๋กœ ํ˜‘์—… ์‹œ์— ๋ช…์‹œ์ ์ธ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

var.example ? 12 : "hello".             # ๋น„๊ถŒ์žฅ
var.example ? "12" : "hello"            # ๊ถŒ์žฅ
var.example ? tostring(12) : "hello"    # ๊ถŒ์žฅ

 

 

Chapter 3 - (9) ํ•จ์ˆ˜

ํ…Œ๋ผํผ์˜ ๋‚ด์žฅ ํ•จ์ˆ˜ ์™ธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” ๋ณ„๋„์˜ ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

terraform console ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ…Œ๋ผํผ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ–ˆ์„ ๋•Œ ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. terraform.tfstate ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ ์ƒํƒœ์—์„œ ํ•ด๋‹น ์ƒํƒœ ํŒŒ์ผ์˜ ๊ฐ’์„ ์ด์šฉํ•ด ์ฐธ์กฐ ๊ฐ’์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

Chapter 3 - (10) provisioner

ํ”„๋กœ๋ฐ”์ด๋”๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์ปค๋งจ๋“œ์™€ ํŒŒ์ผ ๋ณต์‚ฌ ๊ฐ™์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํ”„๋กœ๋น„์ €๋„ˆ๋กœ ์‹คํ–‰๋œ ๊ฒฐ๊ณผ๋Š” ํ…Œ๋ผํผ์˜ ์ƒํƒœ ํŒŒ์ผ๊ณผ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ”„๋กœ๋น„์ €๋‹์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ๊ฐ™๋‹ค๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๋น„์ €๋„ˆ ์‚ฌ์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํ”„๋กœ๋น„์ €๋„ˆ๋Š” ์„ ์–ธ๋œ ๋ฆฌ์†Œ์Šค ๋ธ”๋ก์˜ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ณ  ๋‚˜์„œ ์ง€์ •ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํ”„๋กœ๋น„์ €๋„ˆ์—์„œ๋Š” ๋ฆฌ์†Œ์Šค ์†์„ฑ์— ๋Œ€ํ•ด์„œ self ๊ฐ’์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

on_failure = continue

๊ธฐ๋ณธ๊ฐ’์€ on_failure = fail ๋กœ continue๋กœ ์„ค์ • ์‹œ์— ํ•ด๋‹น ์ปค๋งจ๋“œ ์ˆ˜ํ–‰ ์‹คํŒจ ์‹œ์—๋„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

when = destroy

terraform destroy๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ์—๋งŒ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

local_exec ํ”„๋กœ๋น„์ €๋„ˆ

ํ…Œ๋ผํผ์ด ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ˆ˜ํ–‰ํ•  ์ปค๋งจ๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค.

  • command(ํ•„์ˆ˜): ์‹คํ–‰ํ•  ๋ช…๋ น์ค„์„ ์ž…๋ ฅํ•˜๋ฉฐ << ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์ค„์˜ ์ปค๋งจ๋“œ ์ž…๋ ฅ ๊ฐ€๋Šฅ
  • working_dir(์„ ํƒ) : command์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•˜๊ณ  ์ƒ๋Œ€/์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์„ค์ •
  • interpreter(์„ ํƒ) : ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋ฉฐ, ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ด๋ฆ„์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋ถ€ํ„ฐ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ธ์ˆ˜ ๊ฐ’
  • environment(์„ ํƒ) : ์‹คํ–‰ ์‹œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ์˜ ๊ฐ’์„ ์ƒ์†๋ฐ›์œผ๋ฉฐ, ์ถ”๊ฐ€ ๋˜๋Š” ์žฌํ• ๋‹นํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ธ์ˆ˜์— key = value ํ˜•ํƒœ๋กœ ์„ค์ •

remote_exec์™€ file ํ”„๋กœ๋น„์ €๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์›๊ฒฉ์ง€์— ์—ฐ๊ฒฐํ•  SSH, WinRM ์—ฐ๊ฒฐ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. connection ๋ธ”๋ก ์„ ์–ธ์ด ํ•„์š”ํ•˜๋‹ค. ์›Œ๊ฒฉ ์—ฐ๊ฒฐ์ด ์š”๊ตฌ๋˜๋Š” ํ”„๋กœ๋น„์ €๋„ˆ์˜ ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์›๊ฒฉ ์‹œ์Šคํ…œ์— ์—…๋กœ๋“œํ•ด ํ•ด๋‹น ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ ์‰˜์—์„œ ์‹คํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.

file ํ”„๋กœ๋น„์ €๋„ˆ

ํ…Œ๋ผํผ์„ ์‹คํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ์—ฐ๊ฒฐ ๋Œ€์ƒ์œผ๋กœ ํŒŒ์ผ ๋˜๋Š” ๋””๋ ˆ๊ฑฐ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

  • source: ์†Œ์Šค ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ, ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋Œ€ํ•œ ์ƒ๋Œ€ ๊ฒฝ๋กœ ๋˜๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. content์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • content: ์—ฐ๊ฒฐ ๋Œ€์ƒ์— ๋ณต์‚ฌํ•  ๋‚ด์šฉ์„ ์ •์˜ํ•˜๋ฉฐ ๋Œ€์ƒ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์ธ ๊ฒฝ์šฐ tf-file-content ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , ํŒŒ์ผ์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ํŒŒ์ผ์— ๋‚ด์šฉ์ด ๊ธฐ๋ก๋œ๋‹ค. source์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • destination : ํ•„์ˆ˜ ํ•ญ๋ชฉ์œผ๋กœ ํ•ญ์ƒ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์ง€์ •๋˜์–ด์•ผ ํ•˜๋ฉฐ, ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋‹ค.

remote_exec ํ”„๋กœ๋น„์ €๋„ˆ

์›๊ฒฉ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ปค๋งจ๋“œ์™€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ•œ๋‹ค. ex: AWS EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น VM์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜.

  • inline: ๋ช…๋ น์— ๋Œ€ํ•œ ๋ชฉ๋ก์œผ๋กœ [ ] ๋ธ”๋ก ๋‚ด์— “ “๋กœ ๋ฌถ์ธ ๋‹ค์ˆ˜์˜ ๋ช…๋ น์„ , ๋กœ ๊ตฌ๋ถ„ํ•ด ๊ตฌ์„ฑํ•œ๋‹ค.
  • script: ๋กœ์ปฌ์˜ ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ๋ฅผ ๋„ฃ๊ณ  ์›๊ฒฉ์— ๋ณต์‚ฌํ•ด ์‹คํ–‰ํ•œ๋‹ค.
  • scripts: ๋กœ์ปฌ์˜ ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ์˜ ๋ชฉ๋ก์œผ๋กœ [ ] ๋ธ”๋ก ๋‚ด์— “ “๋กœ ๋ฌถ์ธ ๋‹ค์ˆ˜์˜ ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ๋ฅผ ,๋กœ ๊ตฌ๋ถ„ํ•ด ๊ตฌ์„ฑํ•œ๋‹ค.

 

Chapter 3 - (11) null_resource์™€ terraform_data

1. null_resource

์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค. ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ ํ•˜๋Š” ๋™์ž‘์„ ์กฐ์œจํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ ๋ฐ ํ”„๋กœ๋ฐ”์ด๋”๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ˆ˜๋ช…์ฃผ๊ธฐ๋กœ๋Š” ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— null_resource๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • trigger: null_resource์— ์ •์˜๋œ ๋‚ด์šฉ์„ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค. string ํ˜•ํƒœ์˜ map ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ •์˜๋œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด null_resource์— ์ •์˜๋œ ํ–‰์œ„๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.

2. terraform_data (ํ…Œ๋ผํผ 1.4 ๋ฒ„์ „ ์ด์ƒ)

null_resource์™€ ๋‹ฌ๋ฆฌ ์ถ”๊ฐ€ ํ”„๋กœ๋ฐ”์ด๋” ์—†์ด ํ…Œ๋ผํผ ์ž์ฒด์— ํฌํ•จ๋œ ๊ธฐ๋ณธ ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ์ž๊ฐ€ ์ œ๊ณต๋œ๋‹ค. ๊ฐ•์ œ ์žฌ์‹คํ–‰์„ ์œ„ํ•ด triggers_replace, ์ƒํƒœ ์ €์žฅ์„ ์œ„ํ•ด input ์ธ์ˆ˜, ์ €์žฅ๋œ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” output ์†์„ฑ์ด ์ œ๊ณต๋œ๋‹ค.

 

Chapter 3 - (12) moved ๋ธ”๋ก

ํ…Œ๋ผํผ์˜ state์— ๊ธฐ๋ก๋˜๋Š” ๋ฆฌ์†Œ์Šค ์ฃผ์†Œ์˜ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๋Š” ์‚ญ์ œ๋˜๊ณ  ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜, count๋กœ ์ฒ˜๋ฆฌํ•˜๋˜ ๋ฐ˜๋ณต๋ฌธ์„ for_each๋กœ ๋ณ€๊ฒฝ ๋˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ชจ๋“ˆ๋กœ ์ด๋™ํ•˜์—ฌ ์ฐธ์กฐ๋˜๋Š” ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋์„ ๋•Œ moved ๋ธ”๋ก์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ…Œ๋ผํผ state์—์„œ ์˜ฎ๊ฒจ์ง„ ๋Œ€์ƒ์˜ ์ด์ „ ์ฃผ์†Œ์™€ ์ƒˆ ์ฃผ์†Œ๋ฅผ ์•Œ๋ฆฌ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋ณ€๊ฒฝ๋˜๋Š” ์ฃผ์†Œ๋ฅผ ๋ฆฌ์†Œ์Šค ์˜ํ–ฅ ์—†์ด ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Chapter 3 - (13) CLI๋ฅผ ์œ„ํ•œ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

1. TF_LOG

ํ…Œ๋ผํผ์˜ stderr ๋กœ๊ทธ์— ๋Œ€ํ•œ ๋ ˆ๋ฒจ์„ ์ •์˜ํ•œ๋‹ค. trace, debug, info, warn, error, off๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ด€๋ จ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ off์™€ ๋™์ผํ•˜๋‹ค.

2. TF_INPUT

๊ฐ’์„ false ๋˜๋Š” 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ํ…Œ๋ผํผ ์‹คํ–‰ ์‹œ์— ์ธ์Šค๋ฃฐ -input=false๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค. ์ž…๋ ฅ๋ฐ›๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

3. TF_VAR_name

์ž…๋ ฅ ์‹œ ๋˜๋Š” default๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋Œ€์ฒดํ•œ๋‹ค.

4. TF_CLI_ARGS

ํ…Œ๋ผํผ ์‹คํ–‰ ์‹œ ์ถ”๊ฐ€ํ•  ์ธ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค. TF_CLI_ARGS_apply๋กœ ์ธ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด terraform apply ์ปค๋งจ๋“œ ์ˆ˜ํ–‰ ์‹œ์—๋งŒ ๋™์ž‘ํ•œ๋‹ค.

5. TF_DATA_DIR

state ์ €์žฅ ๋ฐฑ์—”๋“œ ์„ค์ •๊ณผ ๊ฐ™์€ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. .terraform ๋””๋ ‰ํ„ฐ๋ฆฌ ์œ„์น˜์— ๊ธฐ๋ก๋˜์ง€๋งŒ TF_DATA_DIR์— ๊ฒฝ๋กœ๊ฐ€ ์ •์˜๋˜๋ฉด ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉ๋œ๋‹ค. ์‹คํ–‰ ์‹œ๋งˆ๋‹ค ์ผ๊ด€๋˜๊ฒŒ ์„ค์ •๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.