Terragrunt란 ?

xgro·2022년 10월 21일
2

Terragrunt

목록 보기
1/1


Summary

테라폼으로 인프라를 관리하기 시작하며, 하나의 통합된 프로젝트 구조로는 관리의 한계성을 느끼게 되었습니다.

이 문제점을 개선하고자, 테라그런트를 도입하여 프로젝트를 보다 안전하고, 효율적으로 관리할 수 있도록 정리하고자 합니다.


Terragrunt 란?

Terragrunt는 Terraform 모듈을 조합하여 더 큰 인프라를 구성하고,
생성, 변경 및 삭제 작업을 위한 공통 논리를 제공하는 오픈 소스 도구입니다.

Terragrunt는 다음과 같은 기능을 제공합니다.

  • 코드 중복 제거:
    Terragrunt는 Terraform 모듈을 분할하여 중복 코드를 제거합니다.
    Terragrunt는 공통 논리를 한 곳에서 관리하여 모든 Terraform 모듈에서 재사용할 수 있습니다.

  • 계층 구조:
    Terragrunt를 사용하면 인프라를 계층 구조로 구성할 수 있습니다.
    예를 들어, VPC, 서브넷, 인스턴스 등을 별도의 Terraform 모듈로 구성할 수 있습니다.

  • 종속 관계:
    Terragrunt는 Terraform 모듈 간의 종속 관계를 정의하는 데 사용할 수 있습니다.
    예를 들어, 서브넷 모듈은 VPC 모듈에 종속되어 있습니다.

  • 입력 변수:
    Terragrunt는 Terraform 모듈에 대한 입력 변수를 설정하는 데 사용할 수 있습니다.
    이를 통해 동일한 Terraform 모듈을 여러 환경(dev, stg, prd)에 배포할 수 있습니다.

  • 팀에서의 협업:
    Terragrunt는 Terraform 구성을 여러 명의 개발자가 협업하여 관리하는 데 유용합니다.
    각자가 코드를 변경한 후 Pull Request를 통해 리뷰하고 병합할 수 있습니다.


DRY ?

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 모듈을 적용할 수 있습니다.


장점

1. 테라폼 코드를 한번만 정의하여, 환경변수를 관리할 수 있습니다.


2. 테라폼 Backend 파일을 한번만 선언하여 DRY하게 관리할 수 있습니다.


3. 여러 모듈에 대해 한번의 커맨드로 실행 할 수 있습니다.


4. 테라폼 명령어 실행 후 커스텀 코드 기능을 사용 할 수 있습니다.

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", "."]
  }
}

Conclusion

본 포스팅을 통해 테라그런트에 대한 장점 및 특징을 간단하게 정리하였습니다.

실제 Terragrunt 소스코드를 구성하여 어떤 방식으로 작동하는지에 대한 내용은 다음 블로그로 정리하겠습니다.


Reference

profile
안녕하세요! DevOps 엔지니어 이재찬입니다. 블로그에 대한 피드백은 언제나 환영합니다! 기술, 개발, 운영에 관한 다양한 주제로 함께 나누며, 더 나은 협업과 효율적인 개발 환경을 만드는 과정에 대해 인사이트를 나누고 싶습니다. 함께 여행하는 기분으로, 즐겁게 읽어주시면 감사하겠습니다! 🚀

0개의 댓글