본문 바로가기
카테고리 없음

Terragrunt란?

by BTC_루피 2023. 12. 7.

베하!

문땅훈과 루피입니다.

 

오늘은 Terragrunt에 대해서 알아보겠습니다!

레츠꼬!


 

 

개요

  • Terragrunt 란?
  • Terragrunt의 기능
  • Terragrunt 사용법

 

1. Terragrunt 란?

  • Terragrunt는 IaC 도구인 Terraform의 설정을 관리하고 향상시키기 위한 도구입니다. Terragrunt는 Terraform 모듈을 사용해 코드를 구성하고, 공유 구성을 관리하며, 코드를 재사용하기 쉽게 만들어줍니다. 또한, Terraform에서 반복되는 폴더와 작업들을 줄이며, 코드의 관리 및 배포를 단순화하는 데 도움을 줍니다.
  • 테라폼 코드를 DRY (Don't Repeat Yourself)  하고 유지보수를 편리하게 해줍니다.

 

2. Terragrunt 의 기능

  • 코드 재사용: Terragrunt는 Terraform 모듈을 사용하여 코드를 재사용할 수 있도록 지원합니다. 모듈을 작성하고 공유하여 다른 프로젝트에서 재사용할 수 있습니다.

  • 환경 관리: Terragrunt는 환경 변수를 사용하여 인프라스트럭처를 다른 환경에서 배포하는 데 도움을 줍니다. 예를 들어, 개발, 스테이징, 프로덕션 등의 환경에서 다른 변수 값을 사용하여 인프라스트럭처를 배포할 수 있습니다.

  • 코드 관리: Terragrunt는 Terraform 코드를 관리하기 위한 설정 파일인 terragrunt.hcl을 사용합니다. 이 파일에서 Terraform 코드의 경로, 변수, 환경 설정 등을 설정할 수 있습니다.

  • 인프라스트럭처 버전 관리: Terragrunt는 Git과 같은 버전 관리 시스템을 사용하여 인프라스트럭처 코드를 관리할 수 있습니다.

  • Terraform 명령어 간소화: Terragrunt는 Terraform 명령어를 간소화하고, 코드를 더 쉽게 관리할 수 있도록 지원합니다.

  • 병렬 실행: Terragrunt는 Terraform 코드를 병렬로 실행하여 배포 시간을 단축할 수 있습니다.

  • 로깅 및 오류 처리: Terragrunt는 로깅과 오류 처리를 지원하여 디버깅 및 오류 해결을 용이하게 합니다.

 

3. Terragrunt 사용법

  • 먼저 Terragrunt 설치 방법에 대해 알아보겠습니다.
choco install terragrunt

 

위 명령어를 통해 간단히 설치할 수 있습니다.

 

아래와 같은 파일 구조의 형식이 있다고 가정해보겠습니다.

└── live
    ├── prod
    │   ├── app
    │   │   └── main.tf
    │   ├── mysql
    │   │   └── main.tf
    │   └── vpc
    │       └── main.tf

 

위 예시에서 각각의 main.tf 안에 중복되는 값이 있을 경우, Terragrunt를 사용해 root 경로의 파일에 terragrunt.hcl 파일을 추가하고 각 모듈 폴더에 terragrunt.hcl 파일을 추가해줍니다.

live/prod/app/main.tf
terraform {
  backend "s3" {
    bucket         = "aws-terraform-state"
    key            = "live/prod/app/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "table"
  }
}

live/pord/mysql/main.tf
terraform {
  backend "s3" {
    bucket         = "aws-terraform-state"
    key            = "live/prod/app/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "table"
  }
}

 

 

 

부모의 폴더와 자식의 폴더에 terragrunt.hcl 을 생성해줍니다.

└── live
    │   terragrunt.hcl
    ├── prod
    │   ├── terragrunt.hcl
    │   ├── app
    │   │   └── terragrunt.hcl
    │   ├── mysql
    │   │   └── terragrunt.hcl
    │   └── vpc
    │       └── terragrunt.hcl

 

중복되는 값을 부모 폴더에 있는 terragrunt.hcl에 작성해줍니다.

remote_state {
  backend = "s3"
  generate = {
    path      = "backend.tf"
    if_exists = "overwrite_terragrunt"
  }
  config = {
    bucket = "aws-terraform-state"
    key = "${path_relative_to_include()}/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "table"
  }
}

generate "provider" {
  path = "provider.tf"
  if_exists = "overwrite_terragrunt"
  contents = <<EOF
provider "aws" {
  assume_role {
    role_arn = "arn:aws:iam::0123456789:role/terragrunt"
  }
}
EOF
}

 

변경 후, root 경로에서 모든 폴더를 init 하겠다는 명령어를 입력해줍니다.

terragrunt run-all init

 

 

참고 : https://minhan2.tistory.com/entry/Terragrunt-Quick-start-%EC%9A%94%EC%95%BD

https://terragrunt.gruntwork.io/


 

지금까지 Tarrgrunt가 무엇인지와 사용법에 대해서 알아보았습니다. 😊

유익하셨나요?!

 

다음에도 좋은 정보를 가지고 오겠습니다!

베빠!!

댓글