베하!
문땅훈과 루피입니다.
오늘은 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가 무엇인지와 사용법에 대해서 알아보았습니다. 😊
유익하셨나요?!
다음에도 좋은 정보를 가지고 오겠습니다!
베빠!!
댓글