studying...
  • 노트의목적
  • 웹전반
    • HTTP
      • 1. HTTP
      • 2. HTTP_Client
      • 3. HTTP_Server
      • 4. JAVA_HTTP_Server
      • 5. Spring_Web_MVC
    • REST_API
      • 1. REST_API
      • 2. URI&MIME_type
      • 3. COLLECTION_Pattern
      • 4. COLLECTION_Pattern_adjustment
      • 5. Spring_Web_MVC
    • DTO_JSON_CORS
      • 1. DTO
      • 2. 직렬화
      • 3. Jackson
      • 4. CORS
    • Layered_Architecture
      • 1. Layered_Architecure
      • 2. Data_Access
      • 3. Domain_Model
    • DI&Spring_Test
      • 1. Dependency_Injection
      • 2. Unit_Test
      • 3. Spring_Test
      • 4. TDD
    • Database
      • 1. Database
      • 2. Relational_Model
      • 3. JDBC
    • JPA
      • 1. ORM
      • 2. Hibernate
      • 3. Embeddable
      • 4. Relationship Mapping
      • 5. Spring Data JPA
    • 도메인_주도_설계
      • 1. DDD
      • 2. Strategic Design
      • 3. Entity, Value Object
      • 4. Aggregate
      • 5. Repository
    • Hexagonal_Architecture
      • 1. SOLID
      • 2. Hexagonal_Architecture
      • 3. 도메인 주도 설계 핵심
    • Spring_Security
      • 1. 애플리케이션 보안
      • 2. 인증
      • 3. 로그인 & 로그아웃
      • 4. 회원가입
      • 5. JWT&Authority
    • File_Upload
      • 1. Multipart_FormData
      • 2. Separation_of_Concerns
      • 3. Cloudinary
    • CQRS
      • 1. CQRS
      • 2. Redis
  • 면접대비
  • book
    • RealMySQL8.0
      • 4장
      • 5장
      • 8장
      • 9장
    • Object
      • 1장
      • 2장
      • 3장
      • 4장
      • 5장
      • 6장
      • 7장
      • 8장
      • 9장
    • ModernJava
      • ch1
      • ch2
    • 클라우드네이티브를위한 쿠버네티스 실전 프로젝트
      • 1장
      • 2장
      • 3장
      • 4장
    • 테라폼 쿡북
      • 2장
      • 3장
      • 4장
      • 5장
      • 6장
  • lecture
    • 외워서끝내는네트워크기초
    • 외워서끝내는네트워크심화
    • aws
      • Architecting_on_AWS
      • Architecrting-advanced
      • Developing_on_AWS
      • migration_essentials
      • Resilience
      • Running_Containers_on_EKS
    • Ansible
    • k8s
      • section2
      • section3
    • Terraform
  • experiences
    • workshops
      • EKS
Powered by GitBook
On this page
  • 6.2 테라폼 구성을 깔끔하게 유지하기
  • 6.3 코드 문법 검증하기
  • 6.4 인프라 리소스 삭제하기
  • 6.5 테라폼 구성에서 사용하는 프로바이더 나열하기
  • 6.6 윈도우와 리눅스에 호환성을 갖춘 테라폼 의존성 파일 만들기
  • 6.7 테라폼 모듈 복사하기
  1. book
  2. 테라폼 쿡북

6장

Previous5장Nextlecture

Last updated 2 months ago

테라폼은 테라폼 구성과 테라폼 구성을 분석하고 실행하는 테라폼 CLI, 테라폼 상태가 서로 연결된 요소들로 구성된 코드형 인프라 도구다.

이번 장에서는 테라폼 CLI 명령과 옵션들에 대해 중점적으로 배운다.

6.2 테라폼 구성을 깔끔하게 유지하기

IaC는 코드로 만들어지기 때문에 코드를 깔끔하게 유지하는 것이 중요하다. 테라폼 명령을 이용한 코드 형식 유지 방법과 자동화하는 팁들에 대해 학습한다.

# 코드의 들여쓰기 정돈, 수정된 파일의 목록이 표시된다.
terraform fmt

# 하위 폴더도 적용
terraform fmt -recursive

vscode, intellij등에는 커밋 전 자동 fmt 명령어 적용 기능도 존재하니 참고하면 좋다.

6.3 코드 문법 검증하기

테라폼 명령을 사용해 테라폼 구성의 문법을 검증하는 방법

# 코드 문법의 유효성을 검증하고, 에러 목록을 보여준다
terraform validate

CI 파이프라인에서도 terraform validate 명령이 에러를 반환할 경우 plan 명령을 실행하지 않도록 자동화 하는 것에도 유용하게 사용된다.

다만, validate 명령어는 정적 검사만 시행하기 떄문에 리소스 이름 충돌 등의 인프라 상태와 관련된 문제는 확인이 불가능하다.

6.4 인프라 리소스 삭제하기

테라폼으로 프로비저닝된 인프라 삭제 방법에 대해 보면

# 특정 리소스 한 개만 삭제하고자 할 때
terraform destroy -target azurerm_application_insights. appinsight-app

-var-file 옵션으로 특정 변수의 값을 지정해줬다면 destroy시에도 지정해줘야 한다.

6.5 테라폼 구성에서 사용하는 프로바이더 나열하기

테라폼 구성 내에 여러개의 프로바이더를 사용하는 경우 업그레이드 작업을 위해 프로바이더의 목록을 관리하는 것이 중요하다.

terraform {
  required_version = ">= 1.0"
  required_providers {
    random = {
      source  = "hashicorp/random"
      version = "3.4.3"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "3.29.1"
    }
    http = {
      source  = "hashicorp/http"
      version = "3.2.1"
    }
    null = {
      source  = "hashicorp/null"
      version = "3.2.1"
    }
  }
}

다음같이 네 개의 프로바이더가 있고, 사용하는 프로바이더들을 나열하려면

terraform providers

명령어를 사용하면 테라폼 구성에서 사용하는 모든 프로바이더들의 목록을 나열한다.

6.6 윈도우와 리눅스에 호환성을 갖춘 테라폼 의존성 파일 만들기

테라폼 의존성 파일이 포함하고 있는 프로바이더 정보에는 이름, 버전, 무결성검사를 위한 패키지의 해시값들이 포함된다.

따라서 같은 프로바이더라 하더라도 서로 다른 해시값을 갖게 된다. 이를 해결하기 위해 다양한 OS에서 사용되는 프로바이더의 해시값이 포함된 .terraform.lock.hcl 파일을 생성하는 방법이 있다.

terraform providers lock -platform=windows_amd64 -platform=linux_amd64 -platform=windows_amd64

이런식으로 random 등의 프로바이더 OS를 고정해주면 동일한 버전을 사용하기 때문에 윈도우, 리눅스에서 모두 사용할 수 있게 된다.

6.7 테라폼 모듈 복사하기

공유 폴더를 통해 테라폼 구성을 공유하는 다른 방법

terraform init -from-module="../../CHAP05/import"
6장 기본적인 테라폼 워크플러우 적용하기
6.2 테라폼 구성을 깔끔하게 유지하기
6.3 코드 문법 검증하기
6.4 인프라 리소스 삭제하기
6.5 테라폼 구성에서 사용하는 프로바이더 나열하기
6.6 윈도우와 리눅스에 호환성을 갖춘 테라폼 의존성 파일 만들기
6.7 테라폼 모듈 복사하기