테라폼으로 인프라를 관리하기 시작하며, 하나의 통합된 프로젝트 구조로는 관리의 한계성을 느끼게 되었습니다.
이 문제점을 개선하고자, 테라그런트를 도입하여 프로젝트를 보다 안전하고, 효율적으로 관리할 수 있도록 정리하고자 합니다.
Terragrunt는 Terraform 모듈을 조합하여 더 큰 인프라를 구성하고,
생성, 변경 및 삭제 작업을 위한 공통 논리를 제공하는 오픈 소스 도구입니다.
Terragrunt는 다음과 같은 기능을 제공합니다.
코드 중복 제거:
Terragrunt는 Terraform 모듈을 분할하여 중복 코드를 제거합니다.
Terragrunt는 공통 논리를 한 곳에서 관리하여 모든 Terraform 모듈에서 재사용할 수 있습니다.
계층 구조:
Terragrunt를 사용하면 인프라를 계층 구조로 구성할 수 있습니다.
예를 들어, VPC, 서브넷, 인스턴스 등을 별도의 Terraform 모듈로 구성할 수 있습니다.
종속 관계:
Terragrunt는 Terraform 모듈 간의 종속 관계를 정의하는 데 사용할 수 있습니다.
예를 들어, 서브넷 모듈은 VPC 모듈에 종속되어 있습니다.
입력 변수:
Terragrunt는 Terraform 모듈에 대한 입력 변수를 설정하는 데 사용할 수 있습니다.
이를 통해 동일한 Terraform 모듈을 여러 환경(dev, stg, prd)에 배포할 수 있습니다.
팀에서의 협업:
Terragrunt는 Terraform 구성을 여러 명의 개발자가 협업하여 관리하는 데 유용합니다.
각자가 코드를 변경한 후 Pull Request를 통해 리뷰하고 병합할 수 있습니다.
DRY and maintainable Terraform code.
Terragrunt is a thin wrapper that provides extra tools for keeping your configurations DRY, working with multiple Terraform modules, and managing remote state.
DRY(Don't Repeat Yourself)
테라폼 코드를 반복 작업 하지 않도록 만들어 주는 도구입니다.
특히 DRY
를 강조하고 있는데, 이는 테라그런트가 테라폼과 차별화 되는 특징을 가지게 됩니다.
Terragrunt는 Terraform의 단점인 반복적인 작업을 줄여줍니다.
Terraform에서는 동일한 구성을 여러 환경에 적용하려면 모든 환경에 대해 별도의 Terraform 구성 파일을 작성해야 하는 반면,
Terragrunt는 inputs 파일만 변경하여 여러 환경에 동일한 Terraform 모듈을 적용할 수 있습니다.
terraform {
before_hook "before_hook_1" {
commands = ["apply", "plan"]
execute = ["echo", "Foo"]
run_on_error = true
}
after_hook "after_hook_1" {
commands = ["init-from-module"]
execute = ["cp", "{get_parent_terragrunt_dir()}/foo.tf", "."]
}
}
본 포스팅을 통해 테라그런트에 대한 장점 및 특징을 간단하게 정리하였습니다.
실제 Terragrunt 소스코드를 구성하여 어떤 방식으로 작동하는지에 대한 내용은 다음 블로그로 정리하겠습니다.