[ν λΌνΌμΌλ‘ μμνλ IaC] IaCμ ν λΌνΌ κ°μ, ν λΌνΌ κΈ°λ³Έ λͺ λ Ήμ΄
μ½λλ‘ μΈνλΌλ₯Ό νλ‘λΉμ λνλ€λ κ²μ ν₯λ―Έλ₯Ό λκΌκ³ μ μ± μ μΆμ²λ°μ μ½κ² λμμ΅λλ€. ν¬μ€ν λ΄μ©μ "ν λΌνΌμΌλ‘ μμνλ IaC" λμλ₯Ό μ½κ³ μμ½ν λ΄μ©μ λλ€.
Chapter 1. IaCμ ν λΌνΌ
IaC λκ΅¬μΈ ν λΌνΌμ΄ μΆνν λ°°κ²½κ³Ό μ¬μ© λͺ©μ
IaC(μ½λν μΈνλΌ)λ μΈνλΌλ₯Ό μλννλ κ²κ³Ό κ°λ€.
μλνλ κ° ‘νλ‘μΈμ€’ μμ μ ν΅ν©νκ³ μ¬νμ©μ±μ λμ΄λ κ²μ΄ μ€μνλ€. κ·Έλ¬λ λλλ‘ μλνλ 무μν λ§μ λ°λ³΅κ³Ό κ²μ¦ μμ μ νμλ‘ νκ³ , μ΄μ λ³΄λ€ λ λ§μ μκ°κ³Ό λ Έλ ₯μ μꡬνκΈ°λ νλ€.
IaCλ μ»΄ν¨ν°μμ μ½μ μ μλ μ μ νμΌμ μ¬μ©ν΄ μΈνλΌλ μλΉμ€λ₯Ό κ΄λ¦¬νκ³ νλ‘λΉμ λνλ νλ‘μΈμ€μ΄λ€.
μ½λλ‘ μΈνλΌλ₯Ό κ΄λ¦¬νλ ν¨κ³Ό
- μμ λ‘κ² λ³κ²½ κ°λ₯
- νκ²½ μ΄ν΄κ° μ¬μ
- λ°λ³΅μ μΌλ‘ λμΌν μνλ₯Ό λ§λ€ μ μμ
- μΈνλΌκ° λͺ ννκ² μ μλμ΄ λ³λμ λ¬Έμλ‘ μ 리νμ§ μμλ λͺ μΈκ° λ¨λλ€.
Terraformμ HashiCorpμ¬μ νλ‘λΉμ λμ μν IaC λꡬμ΄λ€.
ν λΌνΌμ νΉμ ν΄λΌμ°λλ μΈνλΌμ μ’ μμ μ΄μ§ μκ³ , λμΌν μν¬λ‘λλ₯Ό μ€κ³ν μ μλ€.
ν λΌνΌμ 3κ°μ§ μ² ν
- μν¬νλ‘μ μ§μ€
- μ½λν μΈνλΌ (IaC)
- μ€μ©μ£Όμ
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λ₯Ό ν΅ν΄ μκ°νν μ μλ€.