2023. 11. 12. 23:23ใETC
ํฌ์คํ ๋ด์ฉ์ "ํ ๋ผํผ์ผ๋ก ์์ํ๋ 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์ ๊ฒฝ๋ก๊ฐ ์ ์๋๋ฉด ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ฅผ ๋์ฒดํ์ฌ ์ฌ์ฉ๋๋ค. ์คํ ์๋ง๋ค ์ผ๊ด๋๊ฒ ์ค์ ๋ ์ ์๋๋ก ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.