[t1013] Terraform State & ๋ชจ๋“ˆ

xgroยท2023๋…„ 9์›” 18์ผ
0

Terraform

๋ชฉ๋ก ๋ณด๊ธฐ
9/10
post-thumbnail

๐Ÿ“Œ Notice

๋ณธ ๋ธ”๋กœ๊น…์€ ์•„๋ž˜์˜ 24๋‹จ๊ณ„ ์‹ค์Šต์œผ๋กœ ์ •๋ณตํ•˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ฑ…์„ ๊ธฐ์ค€ํ•˜์—ฌ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ - ํ•œ๋น›์ถœํŒ๋„คํŠธ์›Œํฌ

CloudNetaStudy ๊ทธ๋ฃน์—์„œ ์Šคํ„ฐ๋””ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
Hashicorp korea ์œ ํ˜•์šฑ๋‹˜๊ณผ ํ•จ๊ป˜ ์Šคํ„ฐ๋”” ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™
์œ ํ˜•์šฑ๋‹˜๊ณผ ์œค์„œ์œจ๋‹˜๊ป˜ ๋‹ค์‹œํ•œ๋ฒˆ ๐Ÿ™‡ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


๐Ÿ“Œ Summary

  • IaC์™€ ํ…Œ๋ผํผ์„ ์ดํ•ดํ•˜๊ณ  ์Šคํ„ฐ๋””์— ํ•„์š”ํ•œ ์‹ค์Šต ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ํ…Œ๋ผํผ ๊ธฐ๋ณธ ๋ช…๋ น ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

  • HCL์„ ์ดํ•ดํ•˜๊ณ  ๊ธฐ๋ณธ ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

  • ์ƒ˜ํ”Œ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค.



๐Ÿ“Œ Study

๐Ÿ‘‰ Step 01. 5์žฅ State

โœ… 5.1 State์˜ ๋ชฉ์ ๊ณผ ์˜๋ฏธ

ํ…Œ๋ผํผ์€ Stateful ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜. ํ”„๋กœ๋น„์ €๋‹ ๊ฒฐ๊ณผ State๋ฅผ ์ €์žฅํ•˜๊ณ  ์ถ”์ ์— ํ™œ์šฉ

๊ฐœ์ธ 1์ธ : ๋กœ์ปฌ ํ™˜๊ฒฝ์œผ๋กœ terraform.tfstate ํŒŒ์ผ์— JSON ํ˜•ํƒœ๋กœ ์ €์žฅ

ํŒ€์ด๋‚˜ ์กฐ์ง : ๊ณต๋™ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์›๊ฒฉ ์ €์žฅ์†Œ์— ์ €์žฅํ•ด ๊ณต์œ  - ๋งํฌ

State์—๋Š” ์ž‘์—…์ž๊ฐ€ ์ •์˜ํ•œ ์ฝ”๋“œ์™€ ์‹ค์ œ ๋ฐ˜์˜๋œ ํ”„๋กœ๋น„์ €๋‹ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ด ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ ์ดํ›„์˜ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ์— ๋Œ€ํ•œ ๋™์ž‘ ํŒ๋‹จ ์ž‘์—…์„ ์ˆ˜ํ–‰

State ์—ญํ• 

  • State์—๋Š” ํ…Œ๋ผํผ ๊ตฌ์„ฑ๊ณผ ์‹ค์ œ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ๊ฐ ๋ฆฌ์†Œ์Šค์— ๊ณ ์œ ํ•œ ์•„์ด๋””(๋ฆฌ์†Œ์Šค ์ฃผ์†Œ)๋กœ ๋งตํ•‘
  • ๋ฆฌ์†Œ์Šค ์ข…์†์„ฑ๊ณผ ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ถ”์ 
  • ํ…Œ๋ผํผ ๊ตฌ์„ฑ์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰

ํ…Œ๋ผํผ์—์„œ๋Š” JSON ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋œ State๋ฅผ ํ†ตํ•ด ์†์„ฑ๊ณผ ์ธ์ˆ˜๋ฅผ ์ฝ๊ณ  ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ…Œ๋ผํผ์—์„œ๋Š” type๊ณผ name์œผ๋กœ ๊ณ ์œ ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋ฉฐ, ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์˜ ์†์„ฑ๊ณผ ์ธ์ˆ˜๋ฅผ ๊ตฌ์„ฑ๊ณผ ๋น„๊ตํ•ด ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œํ•œ๋‹ค.

State๋Š” ํ…Œ๋ผํผ๋งŒ์„ ์œ„ํ•œ API๋กœ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. Plan์„ ์‹คํ–‰ํ•˜๋ฉด ์•”๋ฌต์ ์œผ๋กœ refresh ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ์˜ ๋Œ€์ƒ(ํด๋ผ์šฐ๋“œ ๋“ฑ)๊ณผ State๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

์ด ์ž‘์—…์€ ํ”„๋กœ๋น„์ €๋‹ ๋Œ€์ƒ์˜ ์‘๋‹ต ์†๋„์™€ ๊ธฐ์กด ์ž‘์„ฑ๋œ State์˜ ๋ฆฌ์†Œ์Šค ์–‘์— ๋”ฐ๋ผ ์†๋„ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋Œ€๋Ÿ‰์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ Plan ๋ช…๋ น์—์„œ -refresh=false ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด State๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹คํ–‰ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์‹คํ–‰์— ํ™œ์šฉํ•ด ๋Œ€์ƒ ํ™˜๊ฒฝ๊ณผ์˜ ๋™๊ธฐํ™” ๊ณผ์ •์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

# ์‹คํ–‰ ๊ณ„ํš ์ƒ์„ฑ ์‹œ ์ €์žฅ๋˜์–ด ์žˆ๋Š” State์™€ ์‹ค์ œ ํ˜•์ƒ์„ ๋น„๊ตํ•˜๋Š” ๊ธฐ๋ณธ ์‹คํ–‰
time terraform plan

# ์‹คํ–‰ ๊ณ„ํš ์ƒ์„ฑ ์‹œ ์‹ค์ œ ํ˜•์ƒ๊ณผ ๋น„๊ตํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜๋Š” -refresh=false ์˜ต์…˜
time terraform plan -refresh=false

โœ… 5.2 State ๋™๊ธฐํ™”

ํ…Œ๋ผํผ ๊ตฌ์„ฑ ํŒŒ์ผ์€ ๊ธฐ์กด State์™€ ๊ตฌ์„ฑ์„ ๋น„๊ตํ•ด ์‹คํ–‰ ๊ณ„ํš์—์„œ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

ํ…Œ๋ผํผ ๊ตฌ์„ฑ๊ณผ State ํ๋ฆ„ : Plan ๊ณผ Apply ์ค‘ ๊ฐ ๋ฆฌ์†Œ์Šค์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋„ค ๊ฐ€์ง€ ์‚ฌํ•ญ, ์•„๋ž˜ ์‹คํ–‰ ๊ณ„ํš ์ถœ๋ ฅ ๊ธฐํ˜ธ์™€ ์˜๋ฏธ

๊ธฐํ˜ธ์˜๋ฏธ
+Create
-Destroy
-/+Replace
~Updated in-place

Replace ๋™์ž‘์€ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ญ์ œ ํ›„ ์ƒ์„ฑํ•˜์ง€๋งŒ lifecycle์˜ create_before_destroy ์˜ต์…˜์„ ํ†ตํ•ด ์ƒ์„ฑ ํ›„ ์‚ญ์ œ ์„ค์ • ๊ฐ€๋Šฅ

โœ… 5.3 ์›Œํฌ์ŠคํŽ˜์ด์Šค

State๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐ€์ƒ ๊ณต๊ฐ„์„ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ผ๊ณ  ํ•œ๋‹ค.

ํ…Œ๋ผํผ ๊ตฌ์„ฑ ํŒŒ์ผ์€ ๋™์ผํ•˜์ง€๋งŒ ์ž‘์—…์ž๋Š” ์„œ๋กœ ๋‹ค๋ฅธ State๋ฅผ ๊ฐ–๋Š” ์‹ค์ œ ๋Œ€์ƒ์„ ํ”„๋กœ๋น„์ €๋‹ํ•  ์ˆ˜ ์žˆ๋‹ค.

์›Œํฌ์ŠคํŽ˜์ด์Šค๋Š” ๊ธฐ๋ณธ default๋กœ ์ •์˜๋œ๋‹ค.

๋กœ์ปฌ ์ž‘์—… ํ™˜๊ฒฝ์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ CLI ๋ช…๋ น์–ด๋กœ workspace๊ฐ€ ์žˆ๋‹ค.

terraform workspace list
* default

์žฅ์ 

  • ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋™์ผํ•œ ํ…Œ๋ผํผ ๊ตฌ์„ฑ์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ  ๊ด€๋ฆฌ
  • ๊ธฐ์กด ํ”„๋กœ๋น„์ €๋‹๋œ ํ™˜๊ฒฝ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์‹คํ—˜ ๊ฐ€๋Šฅ
  • ๊นƒ์˜ ๋ธŒ๋žœ์น˜ ์ „๋žต์ฒ˜๋Ÿผ ๋™์ผํ•œ ๊ตฌ์„ฑ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค ๊ฒฐ๊ณผ ๊ด€๋ฆฌ - [์ฐธ๊ณ  : ํ™”ํ•ด - Git ๋ธŒ๋žœ์น˜ ์ „๋žต ์ˆ˜๋ฆฝ์„ ์œ„ํ•œ ์ „๋ฌธ๊ฐ€์˜ ์กฐ์–ธ๋“ค]

๋‹จ์ 

  • State๊ฐ€ ๋™์ผํ•œ ์ €์žฅ์†Œ(๋กœ์ปฌ ๋˜๋Š” ๋ฐฑ์—”๋“œ)์— ์ €์žฅ๋˜์–ด State ์ ‘๊ทผ ๊ถŒํ•œ ๊ด€๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ(์–ด๋ ค์›€)
  • ๋ชจ๋“  ํ™˜๊ฒฝ์ด ๋™์ผํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ…Œ๋ผํผ ๊ตฌ์„ฑ์— ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋‹ค์ˆ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ํ”„๋กœ๋น„์ €๋‹ ๋Œ€์ƒ์— ๋Œ€ํ•œ ์ธ์ฆ ์š”์†Œ๋ฅผ ์™„๋ฒฝํžˆ ๋ถ„๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์›€
    โ†’ ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ ์™„๋ฒฝํ•œ ๊ฒฉ๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ
    โ‡’ ํ•ด๊ฒฐ๋ฐฉ์•ˆ 1. ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฃจํŠธ ๋ชจ๋“ˆ์„ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    โ‡’ ํ•ด๊ฒฐ๋ฐฉ์•ˆ 2. Terraform Cloud ํ™˜๊ฒฝ์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉ


๐Ÿ‘‰ Step 02. 6์žฅ Module

ํ…Œ๋ผํผ์œผ๋กœ ์ธํ”„๋ผ์™€ ์„œ๋น„์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ๊ตฌ์„ฑ์ด ๋ณต์žกํ•ด์ง€๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

ํ…Œ๋ผํผ์˜ ๊ตฌ์„ฑ ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์„ฑ์—๋Š” ์ œ์•ฝ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ํŒŒ์ผ ๊ตฌ์กฐ์ƒ์—์„œ ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • ํ…Œ๋ผํผ ๊ตฌ์„ฑ์—์„œ ์›ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ฐพ๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ ์  ์–ด๋ ค์›Œ์ง
  • ๋ฆฌ์†Œ์Šค๋“ค ๊ฐ„์˜ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด ์งˆ์ˆ˜๋ก ๋ณ€๊ฒฝ ์ž‘์—…์˜ ์˜ํ–ฅ๋„๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ด ๋Š˜์–ด๋‚จ
  • ๊ฐœ๋ฐœ/์Šคํ…Œ์ด์ง•/ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๊ฒฝ์šฐ ๋น„์Šทํ•œ ํ˜•ํƒœ์˜ ๊ตฌ์„ฑ์ด ๋ฐ˜๋ณต๋˜์–ด ์—…๋ฌด ํšจ์œจ์ด ์ค„์–ด๋“ฆ
  • ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ๊ตฌ์„ฑ์—์„œ ์ทจํ•ด์•ผ ํ•  ๋ฆฌ์†Œ์Šค ๊ตฌ์„ฑ๊ณผ ์ข…์†์„ฑ ํŒŒ์•…์ด ์–ด๋ ค์›€

๋ชจ๋“ˆ์€ ๋ฃจํŠธ ๋ชจ๋“ˆ๊ณผ ์ž์‹ ๋ชจ๋“ˆ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

  • ๋ฃจํŠธ ๋ชจ๋“ˆ Root Module : ํ…Œ๋ผํผ์„ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ์ตœ์ƒ์œ„ ๋ชจ๋“ˆ
  • ์ž์‹ ๋ชจ๋“ˆ Child Module : ๋ฃจํŠธ ๋ชจ๋“ˆ์˜ ๊ตฌ์„ฑ์—์„œ ํ˜ธ์ถœ๋˜๋Š” ์™ธ๋ถ€ ๊ตฌ์„ฑ ์ง‘ํ•ฉ

๋ชจ๋“ˆ์€ ํ…Œ๋ผํผ ๊ตฌ์„ฑ์˜ ์ง‘ํ•ฉ์ด๋‹ค.

ํ…Œ๋ผํผ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€์ƒ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ๋ณต์žกํ•ด์ ธ ์ƒ๊ธด ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ณ  ๊ด€๋ฆฌ ์ž‘์—…์„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์•ˆ์œผ๋กœ ํ™œ์šฉ

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

โœ… 6.1 ๋ชจ๋“ˆ ์ž‘์„ฑ ๊ธฐ๋ณธ ์›์น™

๊ธฐ๋ณธ ์›์น™ : ๋ชจ๋“ˆ์€ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์“ฐ์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํŒจํ‚ค์ง€์™€ ์—ญํ• ์ด ๋น„์Šทํ•˜๋‹ค

์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ์ž‘์„ฑ ์›์น™์„ ์ œ์•ˆํ•จ

๋ชจ๋“ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ํ˜•์‹์„ terraform-<ํ”„๋กœ๋ฐ”์ด๋” ์ด๋ฆ„>-<๋ชจ๋“ˆ ์ด๋ฆ„> ํ˜•์‹์„ ์ œ์•ˆํ•œ๋‹ค.

์ด ํ˜•์‹์€ Terraform Cloud, Terraform Enterprise์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ

1) ๋””๋ ‰ํ„ฐ๋ฆฌ ๋˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ด๋ฆ„์ด ํ…Œ๋ผํผ์„ ์œ„ํ•œ ๊ฒƒ์ด๊ณ , 2) ์–ด๋–ค ํ”„๋กœ๋ฐ”์ด๋”์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, 3) ๋ถ€์—ฌ๋œ ์ด๋ฆ„์ด ๋ฌด์—‡์ธ์ง€ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

ํ…Œ๋ผํผ ๊ตฌ์„ฑ์€ ๊ถ๊ทน์ ์œผ๋กœ

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

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

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

์ž‘์„ฑ๋œ ๋ชจ๋“ˆ์€ ๊ณต๊ฐœ ๋˜๋Š” ๋น„๊ณต๊ฐœ๋กœ ๊ฒŒ์‹œํ•ด ํŒ€ ๋˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๊ณต์œ ํ•˜๊ธฐ๋ฅผ ์ œ์•ˆํ•œ๋‹ค.
๋ชจ๋“ˆ์˜ ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ๋” ๋ฐœ์ „๋œ ๋ชจ๋“ˆ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ž๊ทน์ด ๋œ๋‹ค.


โœ… 6.2 ๋ชจ๋“ˆํ™” ํ•ด๋ณด๊ธฐ

๋ชจ๋“ˆ์˜ ๊ธฐ๋ณธ์  ๊ตฌ์กฐ๋Š” ํ…Œ๋ผํผ ๊ตฌ์„ฑ์œผ๋กœ ์ž…๋ ฅ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

โ€˜๋ชจ๋“ˆํ™”โ€™๋ผ๋Š” ์šฉ์–ด๋Š” ์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ์žฌํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ ์ž‘์—…์„ ๋งํ•œ๋‹ค.

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

๊ธฐ์กด์— ์ž‘์„ฑ๋œ ๋ชจ๋“ˆ์€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ ๋ฐฉ์‹์€ ๋ฆฌ์†Œ์Šค(Resource)์™€ ๋น„์Šทํ•˜๋‹ค.

๋ชจ๋“ˆ์—์„œ ํ•„์š”ํ•œ ๊ฐ’์€ variable๋กœ ์„ ์–ธํ•ด ์„ค์ •ํ•˜๊ณ , ๋ชจ๋“ˆ์—์„œ ์ƒ์„ฑ๋œ ๊ฐ’ ์ค‘ ์™ธ๋ถ€ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐํ•˜๊ณ  ์‹ถ์€ ๊ฐ’์€ output์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ๋งˆ์น˜ ์ž๋ฐ” ๊ฐœ๋ฐœ ์‹œ getter, setter๋กœ ์บก์Šํ™”๋œ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค.


โœ… 6.3 ๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ฐฉ์‹

๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋Š” ๊ด€๋ จ ํ”„๋กœ๋ฐ”์ด๋”์˜ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ์ž๋Š” ํ”„๋กœ๋ฐ”์ด๋” ์ •์˜๋ฅผ ๋ชจ๋“ˆ ์•ˆ or ๋ฐ– ๊ณ ๋ฏผ

์œ ํ˜• 1. ์ž์‹ ๋ชจ๋“ˆ์—์„œ ํ”„๋กœ๋ฐ”์ด๋” ์ •์˜
๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๋ฐ”์ด๋” ๋ฒ„์ „๊ณผ ๊ตฌ์„ฑ ์ƒ์„ธ๋ฅผ ์ž์‹ ๋ชจ๋“ˆ์—์„œ ๊ณ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํ”„๋กœ๋ฐ”์ด๋” ๋ฒ„์ „๊ณผ ๊ตฌ์„ฑ์— ๋ฏผ๊ฐํ•˜๊ฑฐ๋‚˜, ๋ฃจํŠธ ๋ชจ๋“ˆ์—์„œ ํ”„๋กœ๋ฐ”์ด๋” ์ •์˜ ์—†์ด ์ž์‹ ๋ชจ๋“ˆ์ด ๋…๋ฆฝ์ ์ธ ๊ตฌ์กฐ์ผ ๋•Œ ๊ณ ๋ คํ•  ๋ฐฉ๋ฒ•์ด๋‹ค

ํ•˜์ง€๋งŒ ๋™์ผํ•œ ํ”„๋กœ๋ฐ”์ด๋”๊ฐ€ ๋ฃจํŠธ์™€ ์ž์‹ ์–‘์ชฝ์— ๋˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ž์‹ ๋ชจ๋“ˆ์— ๋ฒ„์ „ ์กฐ๊ฑด ํ•ฉ์˜๊ฐ€ ์•ˆ ๋˜๋ฉด, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋ชจ๋“ˆ์— ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์œผ๋ฏ€๋กœ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

์œ ํ˜• 2. ๋ฃจํŠธ ๋ชจ๋“ˆ์—์„œ ํ”„๋กœ๋ฐ”์ด๋” ์ •์˜(์‹ค์Šต)
์ž์‹ ๋ชจ๋“ˆ์€ ๋ฃจํŠธ ๋ชจ๋“ˆ์˜ ํ”„๋กœ๋ฐ”์ด๋” ๊ตฌ์„ฑ์— ์ข…์†๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋กœ๋Š” ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์ง€๋งŒ ํ…Œ๋ผํผ ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ๋™์ผ ๊ณ„์ธต์œผ๋กœ ํ•ด์„๋˜๋ฏ€๋กœ ํ”„๋กœ๋ฐ”์ด๋” ๋ฒ„์ „๊ณผ ๊ตฌ์„ฑ์€ ๋ฃจํŠธ ๋ชจ๋“ˆ์˜ ์„ค์ •์ด ์ ์šฉ๋œ๋‹ค.

ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ๋ชจ๋“ˆ ๋‚ด ๋ฆฌ์†Œ์Šค์™€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์ผ๊ด„ ์ ์šฉํ•˜๊ณ , ์ž์‹ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ์— ์ž์œ ๋กœ์šด ๊ฒƒ์ด ์žฅ์ ์ด๋‹ค.

์ž์‹ ๋ชจ๋“ˆ์— ํŠน์ • ํ”„๋กœ๋ฐ”์ด๋” ๊ตฌ์„ฑ์˜ ์ข…์†์„ฑ์€ ๋ฐ˜์˜ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ž์‹ ๋ชจ๋“ˆ์„ ํ”„๋กœ๋ฐ”์ด๋” ์กฐ๊ฑด์— ๋Œ€ํ•ด ๊ธฐ๋กํ•˜๊ณ , ์ž์‹ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฃจํŠธ ๋ชจ๋“ˆ์—์„œ ์ •์˜ํ•˜๋Š” ํ”„๋กœ๋ฐ”์ด๋”์— ๋งž๊ฒŒ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•œ๋‹ค.



๐Ÿงฉ Assignment

๐Ÿ‘‰ ๋„์ „๊ณผ์ œ 1

๋ชฉํ‘œ - T101 1๊ธฐ ๋…ธ์…˜ ๋‚ด์šฉ์— AWS DynamoDB/S3๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‹ค์Šต์„ ๋”ฐ๋ผํ•ด๋ณด์„ธ์š”!

Backend ๊ตฌ์„ฑ์„ ํ†ตํ•ด Terraform์ดย stateย ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ์œ„์น˜๋ฅผ ์ •์˜ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ๋ผํผ์€ tfstate๋ฅผ ์ด์šฉํ•˜์—ฌ ํ˜„์žฌ ์„ ์–ธํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

tfstate์—๋Š” ์ค‘์š”ํ•œ ์ •๋ณด๋„ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์—, Github ๋˜๋Š” ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์–ด์žˆ๋Š” ์ฝ”๋“œ ์ €์žฅ์†Œ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด aws ์„œ๋น„์Šค์ธ S3์™€ DynamoDB๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ฅย S3 ๋ฐ DynamoDB๋กœ ๋ฐฑ์—”๋“œ๋ฅผ ๊ด€๋ฆฌํ• ๋•Œ์˜ ์žฅ์ 

  • ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค์ด๋ฏ€๋กœ ์šด์˜ ๋ถ€๋‹ด์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ GitOps๋กœ ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ธํ”„๋ผ ์—ญ์‹œ AWS ๋ฆฌ์†Œ์Šค๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ ๋ณ„๋„์˜ ๊ด€๋ฆฌ ํฌ์ธํŠธ๊ฐ€ ์ถ”๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“•ย Backend

๋ณ„๋„์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ„๋กœ๋„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# backend.tf

provider "aws" {
  region = "ap-northeast-2" # Please use the default region ID
}

# S3 ๋ฒ„ํ‚ท์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
resource "aws_s3_bucket" "for_tfstate" {
  bucket = "xgro-tfstate"
}

# S3 ๋ฒ„ํ‚ท์˜ ๋ฒ„์ €๋‹ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์„ ์–ธํ•œ๋‹ค.
resource "aws_s3_bucket_versioning" "tfstate" {
  bucket = aws_s3_bucket.for_tfstate.bucket

  versioning_configuration {
    status = "Enabled"
  }
}

# DynamoDB for terraform state lock
resource "aws_dynamodb_table" "terraform_state_lock" {
  name         = "terraform-lock"
  hash_key     = "LockID"
  billing_mode = "PAY_PER_REQUEST"

  attribute {
    name = "LockID"
    type = "S"
  }
}

๐Ÿ“˜ย Workspace

์œ„์—์„œ ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ S3, DynamoDB๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด, ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํ…Œ๋ผํผ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# main.tf

# Required providers configuration
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.6.0"
    }
  }

  backend "s3" {
    bucket         = "xgro-tfstate"
    key            = "terraform.tfstate"
    region         = "ap-northeast-2"
    dynamodb_table = "terraform-lock"
    encrypt        = true
  }

  required_version = ">= 1.0.11"
}

data "aws_region" "current" {}
data "aws_caller_identity" "current" {}

ํ…Œ์ŠคํŠธ๋Š” vpc ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด์„œ ๋ฆฌ์†Œ์Šค์˜ ์ด๋ฆ„ ๋ฐ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ฉฐ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

# vpc.tf

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "final_mon1-vpc"
  cidr = "10.0.0.0/16"

  azs             = ["ap-northeast-2a", "ap-northeast-2b"]
  private_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
  public_subnets  = ["10.0.1.0/24"]

  enable_nat_gateway = false
  enable_vpn_gateway = false
  tags = {
    Terraform   = "true"
    Environment = "dev"
  }
}

terraform.tfstate ํŒŒ์ผ์ด s3์— ์ €์žฅ๋˜๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ๋ผํผ์œผ๋กœ ์ƒ์„ฑ๋œ vpc๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ‘‰ ๋„์ „๊ณผ์ œ 2

๋ชฉํ‘œ - ํ…Œ๋ผํผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ณต๊ฐœ๋œ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•ด๋ณด์„ธ์š”!

VPC ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "t1013-xgro-vpc"
  cidr = "10.0.0.0/16"

  azs             = ["ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway = false
  enable_vpn_gateway = false

  tags = {
    Terraform = "true"
    Environment = "dev"
  }
}

๊ฒฐ๊ณผ

๐Ÿ“Œ Reference

profile
์•ˆ๋…•ํ•˜์„ธ์š”! DevOps ์—”์ง€๋‹ˆ์–ด ์ด์žฌ์ฐฌ์ž…๋‹ˆ๋‹ค. ๋ธ”๋กœ๊ทธ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๊ธฐ์ˆ , ๊ฐœ๋ฐœ, ์šด์˜์— ๊ด€ํ•œ ๋‹ค์–‘ํ•œ ์ฃผ์ œ๋กœ ํ•จ๊ป˜ ๋‚˜๋ˆ„๋ฉฐ, ๋” ๋‚˜์€ ํ˜‘์—…๊ณผ ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ์ธ์‚ฌ์ดํŠธ๋ฅผ ๋‚˜๋ˆ„๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ•จ๊ป˜ ์—ฌํ–‰ํ•˜๋Š” ๊ธฐ๋ถ„์œผ๋กœ, ์ฆ๊ฒ๊ฒŒ ์ฝ์–ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ๐Ÿš€

0๊ฐœ์˜ ๋Œ“๊ธ€