[Terraform] 테라폼 정리 - 1

박원균·2021년 10월 22일
0

Terraform

목록 보기
7/11
post-thumbnail

Terraform

특징

  1. 테라폼은 IaC 소프트웨어이며 상업적 이용에 제한이 없는 오픈소스

    오픈소스

    장점 : 소프트웨어의 비용절감이 가능
    단점 : 문제 해결에 어려움이 있음

  2. infrastructure의 형상 관리와 수명주기 관리에 유리
    - 애플리케이션처럼 형상 관리할 수 있습니다.
    - 동일한 구성의 인프라 세트를 각각의 개발 환경의 계층에 만들고 변경하는 작업이 빈번하게 발생합니다.
    - 수명주기 관리
    리소스를 생성하고 삭제하는것을 관리

    개발환경

    계층의 규모는 비지니스에 따라 다릅니다.

    Environment환경Description
    Production운영계,운영서버사용자에게 제공하는 환경
    Staging검증계,검증서버운영서버와 비슷한 환경에서에 올리기 전 검증을 위한 단계
    Development개발계,개발서버비용생각,형상은 같지만 규모는 작음.
    QA품질계,품질서버성능에 관한 검증
    Local로컬개발자의 컴퓨터 및 작업환경
  3. Cloud API를 선언적 구성 파일로 코드화하고 이를 CLI 워크플로루로 사용

버저닝

테라폼의 버전은 0.12로 부터 크게 구분됩니다.
0.12버전의 릴리즈에서 Terraform SDK의 메이저 버전이 올라가고 Terraform Language의 문법에도 대격변이 일어났습니다.
0.12부터는 0.11이하의 버전과 호환되지 않습니다. 또한, 0.11 버전은 AWS Provider를 2.70.0까지만 사용할 수 있는 제약이 있습니다.

0.11 버전 이하의 특징

  1. Interpolation
    0.11.x 이전에는 인수를 참조할 때 "${}"로 감싸주었습니다. 하지만 0.12.x 이후에는 더 이상 "${}"를 사용하지 않습니다.
resource "aws_???" "example" {
	name = "${var.examplename}" # <-- 0.11.x 버전의 특징
    name = var.examplename # <-- 0.11.x 버전의 위 특징
}

모듈 버전의 모범사례

terraform.tfstate 파일에 version이 저장됩니다. 버전이 같거나 상위 버전만 실행할 수 있습니다.

required_version으로 version범위를 제한하여 방지할 수 있습니다.

terraform{

	required_version = ">=0.12.26, <0.13.0" # version = 0.12
    required_providers {
    	aws = {
        	version = "~> 3.56.0" # version >= 0.13
        }
    }
}

윈도우와의 호환

테라폼은 유닉스베이로 개발되었으며 윈도우로 사용시 몇 가지의 오류가 발생할 수 있습니다.

  • 260 문자의 경로 제한
  • 스냅샷의 개행 문자
  • VT(Virtual Terminal)/ANSI 이스케이프 코드 미지원
 	←[33m~←[1m←[0mid←[0m←[0m 같은 문자들
    해결법 PS C:\> Set-ItemProperty HKCU:\Console VirtualTerminalLevel -Type DWORD 1

유용한 명령어 옵션

  • terraform apply -auto-approve
    apply에서 yes 명령어 입력 생략
  • terraform plan -no-color
    실행 플로우의 컬러링을 비활성화
  • terraform plan -lock=false
    Remote State의 Locking이 예상치 못한 에러로 활성화가 되는 경우가 있는데 잠김으로 실행이 막힌 상테에서 옵션을 포함한 명령에 한해 임시로 해제하는 명령어 입니다.
  • terraform plan --terragrunt-source c:\deploy\temp
    모듈에서 선언한 source를 이용하지 않고 --terragrunt-source로 지정한 경로에서 다운로드 받아 Terraform을 실행합니다. 개발 단계에서 코드를 Repository에 업로드하지 않고 로컬에서 검증 및 테스팅에 유용합니다.

Terragrunt

Terraform에서 필연적으로 발생하는 중복 코드를 줄여주는 랩퍼 툴입니다.

Terragrunt의 명령어는 내부적으로 Terraform 명령어로 변환되어 실행되며,모든 Terraform 명령어를 사용할 수 있습니다.

  • Don't repeat yoursel(DRY)
    반복 패턴을 줄이는 것을 목표로 하는 소프트웨어의 기본 개발 원칙 중 하나
  • Terraform Best Practices
    • 멀티 환경과 모듈은 Terragrunt로 관리
    • '.tfstate' 파일은 Remote state로 저장
    • 파일 레이아웃을 통해 모듈들을 분리
    • 공유 모듈의 활용
    • 하드 코딩을 지양
    • Pre-installed 플러그인을 설정

이 게시글의 저작권은 베스핀글로벌 SRE 1팀 최창석님에게 있음을 밝힙니다.

profile
함바라기

0개의 댓글