[ν…ŒλΌνΌμœΌλ‘œ μ‹œμž‘ν•˜λŠ” IaC] IaC와 ν…ŒλΌνΌ κ°œμš”, ν…ŒλΌνΌ κΈ°λ³Έ λͺ…λ Ήμ–΄

2023. 10. 22. 22:04ㆍETC

좜처: ν•œλΉ›λ―Έλ””μ–΄

μ½”λ“œλ‘œ 인프라λ₯Ό ν”„λ‘œλΉ„μ €λ‹ν•œλ‹€λŠ” 것에 ν₯λ―Έλ₯Ό 느꼈고 μœ„ 책을 μΆ”μ²œλ°›μ•„ 읽게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν¬μŠ€νŒ… λ‚΄μš©μ€ "ν…ŒλΌνΌμœΌλ‘œ μ‹œμž‘ν•˜λŠ” IaC" λ„μ„œλ₯Ό 읽고 μš”μ•½ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.

 

Chapter 1. IaC와 ν…ŒλΌνΌ

IaC 도ꡬ인 ν…ŒλΌνΌμ΄ μΆœν˜„ν•œ λ°°κ²½κ³Ό μ‚¬μš© λͺ©μ 

IaC(μ½”λ“œν˜• 인프라)λŠ” 인프라λ₯Ό μžλ™ν™”ν•˜λŠ” 것과 κ°™λ‹€.

μžλ™ν™”λž€ 각 ‘ν”„λ‘œμ„ΈμŠ€’ μž‘μ—…μ„ ν†΅ν•©ν•˜κ³  μž¬ν™œμš©μ„±μ„ λ†’μ΄λŠ” 것이 μ€‘μš”ν•˜λ‹€. κ·ΈλŸ¬λ‚˜ λ•Œλ•Œλ‘œ μžλ™ν™”λŠ” 무수히 λ§Žμ€ 반볡과 검증 μž‘μ—…μ„ ν•„μš”λ‘œ ν•˜κ³ , 이전보닀 더 λ§Žμ€ μ‹œκ°„κ³Ό λ…Έλ ₯을 μš”κ΅¬ν•˜κΈ°λ„ ν•œλ‹€.

IaCλŠ” μ»΄ν“¨ν„°μ—μ„œ 읽을 수 μžˆλŠ” μ •μ˜ νŒŒμΌμ„ μ‚¬μš©ν•΄ μΈν”„λΌλ‚˜ μ„œλΉ„μŠ€λ₯Ό κ΄€λ¦¬ν•˜κ³  ν”„λ‘œλΉ„μ €λ‹ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ΄λ‹€.

μ½”λ“œλ‘œ 인프라λ₯Ό κ΄€λ¦¬ν•˜λŠ” 효과

  • 자유둭게 λ³€κ²½ κ°€λŠ₯
  • ν™˜κ²½ 이해가 쉬움
  • 반볡적으둜 λ™μΌν•œ μƒνƒœλ₯Ό λ§Œλ“€ 수 있음
  • 인프라가 λͺ…ν™•ν•˜κ²Œ μ •μ˜λ˜μ–΄ λ³„λ„μ˜ λ¬Έμ„œλ‘œ μ •λ¦¬ν•˜μ§€ μ•Šμ•„λ„ λͺ…μ„Έκ°€ λ‚¨λŠ”λ‹€.

Terraform은 HashiCorpμ‚¬μ˜ ν”„λ‘œλΉ„μ €λ‹μ„ μœ„ν•œ IaC 도ꡬ이닀.

ν…ŒλΌνΌμ€ νŠΉμ • ν΄λΌμš°λ“œλ‚˜ 인프라에 쒅속적이지 μ•Šκ³ , λ™μΌν•œ μ›Œν¬λ‘œλ“œλ₯Ό 섀계할 수 μžˆλ‹€.

ν…ŒλΌνΌμ˜ 3가지 μ² ν•™

  1. μ›Œν¬ν”Œλ‘œμ— 집쀑
  2. μ½”λ“œν˜• 인프라 (IaC)
  3. μ‹€μš©μ£Όμ˜

Terraform ꡬ성 방식 : immutable

μΈν”„λΌμŠ€νŠΈλŸ­μ²˜μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•  λ•Œ, 기쑴의 μΈν”„λΌμŠ€νŠΈλŸ­μ²˜λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜λŠ” 것이 μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ μΈν”„λΌμŠ€νŠΈλŸ­μ²˜λ₯Ό μƒμ„±ν•˜μ—¬ 이전 μƒνƒœμ˜ μΈν”„λΌμŠ€νŠΈλŸ­μ²˜λ₯Ό κ΅μ²΄ν•˜λŠ” 방식.

  • AWS CloudFormation 및 Azure ARM Template도 λ§ˆμ°¬κ°€μ§€λ‘œ immutable이닀.
  • Ansible : mutable

 

Chapter 2. μ‹€ν–‰ ν™˜κ²½ ꡬ성

ν…ŒλΌνΌ 둜컬 μž‘μ—… ν™˜κ²½ ꡬ성

ν…ŒλΌνΌ μ„€μΉ˜ : Install Terraform

CLI ꡬ성 파일 : CLI Configuration File (.terraformrc or terraform.rc)

 

 

Chapter 3 - (1) κΈ°λ³Έ μ‚¬μš©λ²• 

ν…ŒλΌνΌ κΈ°λ³Έ λͺ…λ Ήμ–΄

terraform init

ν…ŒλΌνΌ ꡬ성 파일이 μžˆλŠ” μž‘μ—… 디렉터리(root module)을 μ΄ˆκΈ°ν™”ν•œλ‹€. ν…ŒλΌνΌ μ½”λ“œμ— μ‚¬μš©λœ ꡬ문을 기반으둜 ν•„μš”ν•œ ν”„λ‘œλ°”μ΄λ” ν”ŒλŸ¬κ·ΈμΈμ„ μ°Ύκ³  μ„€μΉ˜ν•˜λŠ” 과정이 μ‹€ν–‰λœλ‹€. init μˆ˜ν–‰ μ‹œ ν”„λ‘œλ°”μ΄λ” 쒅속성을 κ³ μ •μ‹œν‚€λŠ” .terraform.lock.hcl 파일이 μƒμ„±λœλ‹€. μž‘μ—…μžκ°€ μ˜λ„μ μœΌλ‘œ ν”„λ‘œλ°”μ΄λ” λ˜λŠ” λͺ¨λ“ˆ 버전을 λ³€κ²½ν•˜κΈ° μœ„ν•΄μ„œλŠ” terraform init -upgradeλ₯Ό μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€.

 

terraform validate

원격 μž‘μ—…μ΄λ‚˜ API μž‘μ—…μ€ λ°œμƒν•˜μ§€ μ•Šκ³ , ν…ŒλΌνΌ ꡬ성 파일의 μ½”λ“œμ μΈ μœ νš¨μ„±μ„ ν™•μΈν•œλ‹€. 문법 쒅속성, 속성 μ΄λ¦„μ΄λ‚˜ μ—°κ²°λœ κ°’μ˜ μ •ν™•μ„± 확인을 μˆ˜ν–‰ν•œλ‹€.

 

terraform plan

μΈν”„λΌμ˜ λ³€κ²½ 사항에 κ΄€ν•œ μ‹€ν–‰ κ³„νšμ„ μƒμ„±ν•œλ‹€. μ»€λ§¨λ“œ 결과둜 λ¦¬μ†ŒμŠ€μ— μ •μ˜ κ°€λŠ₯ν•œ λ‹€λ₯Έ μ˜΅μ…˜μ˜ λ‚΄μš©κ³Ό 기본값이 μžλ™ μž…λ ₯λ˜μ–΄ μ μš©λ˜λŠ” 것을 확인할 수 μžˆλ‹€. 이λ₯Ό 톡해 ν•΄λ‹Ή ꡬ성이 νŠΉμ • λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ 생성될 λ•Œ μ–΄λ–€ 값이 κΈ°λ³Έκ°’μœΌλ‘œ μ„€μ •λ˜λŠ”μ§€ 확인할 수 μžˆλ‹€.

 

terraform apply

κ³„νšμ„ 기반으둜 μž‘μ—…μ„ μ‹€ν–‰ν•œλ‹€. ν…ŒλΌνΌμ€ 선언적 ꡬ성 관리λ₯Ό μ œκ³΅ν•˜λŠ” μ–Έμ–΄λ‘œ λ©±λ“±μ„±(idempotence)λ₯Ό κ°–κ³ , 이후에 μΆ”κ°€λ‘œ μ„€λͺ…될 μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— λ™μΌν•œ ꡬ성에 λŒ€ν•΄μ„œλŠ” λ‹€μ‹œ μ‹€ν–‰ν•˜κ±°λ‚˜ λ³€κ²½ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€.

ν…ŒλΌνΌμ€ μ„ μ–Έμ μœΌλ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— ν˜„μž¬μ˜ μ½”λ“œ μƒνƒœμ™€ μ μš©ν•  μƒνƒœλ₯Ό 비ꡐ해 μΌμΉ˜μ‹œν‚€λŠ” λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€.

πŸ’‘ terraform validate와 terraform plan을 λ¨Όμ € μ‹€ν–‰ν•΄ λ³€κ²½ 사항 적용 전에 κ²€μ¦ν•˜κ³  μŠΉμΈν•˜λŠ” 단계λ₯Ό μΆ”κ°€ν•  수 μžˆμœΌλ―€λ‘œ 두 λ™μž‘μ„ 뢄리해 μ‚¬μš©ν•˜κΈΈ ꢌμž₯.

 

-replace

ν”„λ‘œλΉ„μ €λ‹μ΄ μ™„λ£Œλœ 이후 μ‹€ν–‰ κ³„νšμ— ν”„λ‘œλΉ„μ €λ‹ν•  λŒ€μƒμ΄ μ—†μ§€λ§Œ, μ‚¬μš©μžκ°€ ν•„μš”μ— μ˜ν•΄ νŠΉμ • λ¦¬μ†ŒμŠ€λ₯Ό λ‹€μ‹œ μƒμ„±ν•΄μ•Όν•˜λŠ” 경우, -replace μ˜΅μ…˜μœΌλ‘œ λŒ€μƒ λ¦¬μ†ŒμŠ€ μ£Όμ†Œλ₯Ό μ§€μ •ν•˜λ©΄ λŒ€μƒμ„ μ‚­μ œ ν›„ μƒμ„±ν•˜λŠ” μ‹€ν–‰ κ³„νšμ΄ λ°œμƒν•œλ‹€. terraform planκ³Ό terraform apply λͺ¨λ‘ 적용 κ°€λŠ₯ν•˜κ³ , μ—¬λŸ¬ 번 적용 κ°€λŠ₯ν•œ μ˜΅μ…˜.

terraform apply -replace=local_file.abc

 

terraform destroy

ν…ŒνΌ κ΅¬μ„±μ—μ„œ κ΄€λ¦¬ν•˜λŠ” λͺ¨λ“  개쳬λ₯Ό μ œκ±°ν•œλ‹€. μΌλΆ€λ§Œ μ œκ±°ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‚­μ œν•˜λ €λŠ” ν•­λͺ©μ„ μ½”λ“œμ—μ„œ μ œκ±°ν•˜κ³  λ‹€μ‹œ terrafom applyλ₯Ό μ‹€ν–‰ν•œλ‹€. terraform destroy와 terraform apply -destroyλŠ” λ™μΌν•œ λͺ…령이닀. terrafrom plan -destroyλ₯Ό 톡해 terraform destroyλ₯Ό μœ„ν•œ μ‹€ν–‰ κ³„νšμ„ 생성할 수 μžˆλ‹€.

 

-auto-approve

terraform apply와 destroy μž‘μ—…μ—μ„œ μžλ™ 승인 κΈ°λŠ₯을 λΆ€μ—¬ν•œλ‹€.

 

terraform fmt

가독성을 높이기 μœ„ν•΄ ν…ŒλΌνΌ ꡬ성 νŒŒμΌμ„ ν‘œμ€€ ν˜•μ‹κ³Ό ν‘œμ€€ μŠ€νƒ€μΌλ‘œ μ μš©ν•œλ‹€.

 

terraform graph

λ¦¬μ†ŒμŠ€ μ—°κ΄€ 관계λ₯Ό ν™•μΈν•œλ‹€.

Visual Studio Codeμ—μ„œ κ·Έλž˜ν”„λ₯Ό μ‹œκ°ν™”ν•˜λŠ” 방법 ?

1. Graphviz (dot) language support for Visual Studio Code ν™•μž₯ μΆ”κ°€

2. terraform graph μ‹€ν–‰ κ²°κ³Ό μ €μž₯

terraform graph > graph.dot

3. κ·Έλž˜ν”„ μ‹œκ°ν™”

VS Codeμ—μ„œ 우츑 μƒλ‹¨μ˜ […] λ²„νŠΌ > Enable preview editorλ₯Ό 톡해 μ‹œκ°ν™”ν•  수 μžˆλ‹€.