본문 바로가기

Devops 솔루션/Terraform

[Terraform] terraform_remote_state 이란

반응형

요약

  • Tfstate 관리는 로컬에서 뿐만 아닌 리모트에서 가능하다
    • S3+Dynamodb 조합
    • Gitlab
    • Terraform Cloud .. 등등
  • remote state를 사용할 경우 아래와 같은 장점이 있다.
    • 여러 사용자에 대한 tfstate locking 관리가 가능하다
    • 버전 관리 기능이 있다면 Backup 등의 추가적인 효과가 있다.
    • tfstate를 안전하게 보관할 수 있기 때문에, 지속적으로 인프라를 관리할 수 있다.
    • tfstate에 대한 접근 제어와 보안을 추가할 수 있다.

내용

  • Terraform State 관리
    • Local 에서는 여러 사람들에 대한 State파일에 대한 관리가 어려움
    • 따라서 tfstate를 별도의 공유 가능한 스토리지 또는 Backend에 저장하고 처리한다.
  • 그냥 Github 같은 곳에 tfstate를 저장하고 사용하면 안되나요?
    • 가능하다. 다만 아래와 같은 문제가 있다.
      • 매번 불편하게 Git pull을 받아야한다.
      • 유저간에 tfstate 접근에 대한 락킹이 어렵다.
      • 민감한 상태 정보들이 그대로 보이기 때문에 보안적으로도 문제가 있다.
  • 추천하는 대안 → S3, Dynamo db 연동을 통한 Backend 구성
    • S3를 통해 대부분의 정보를 저장한다. 우선 SLA가 99.999999999%이기 때문에 데이터 유실이 없다.
    • DynamoDB를 통해 사용자간 락킹을 지원한다.
    • 해당 조합은 비용적으로도 효율적이고 락킹이 발생하는 경우가 드물기 때문에, Dynamo db도 프리티어 비용 정도로도 처리가 가능하다.
  • S3 대상 추천하는 설정
    • 버전 관리 및 객체 잠금 설정 → 삭제 방지 및 문제 발생 시 롤백이 가능
    • 데이터 암호화 → tfstate에 대한 보안 문제를 해결 할 수 있다.
  • S3,Dynamo db를 백엔드로 놓으면 추가로 고려해야할 점은?
    • tfstate를 분류하지 않고 함께 사용하다보면, 특정 환경의 플랜이 다른 환경에 영향을 주는 경우가 생긴다
      • terraform의 Workspace 기능을 통해 분류한다 (간편하지만 약한 격리)
      • 파일 레이아웃으로 환경 별로 아예 분리한다 (좀 불편하지만 강한 격리)
        • 개인적으로는 환경 별 분리가 나중에도 편하다..
    • 다른 곳에서도 S3에 올라가 있는 tfstate 값을 불러서 사용할 수 있다.
      • data : terraform_remote_state 리소스를 사용해서 타 s3 버켓에 존재하는 정보를 불러와서 사용할 수 있다.

 

추후 해야할 것

  • Gitlab runner, atlantis, inframap 조합으로 사용 가능한지 좀 보고 싶다.

 


참고자료

Terraform: Up and Running, 3rd Edition
Terraform has become a key player in the DevOps world for defining, launching, and managing infrastructure as code (IaC) across a variety of cloud and virtualization platforms, including AWS, Google … - Selection from Terraform: Up and Running, 3rd Edition [Book]
https://www.oreilly.com/library/view/terraform-up-and/9781098116736/
State: Remote Storage | Terraform | HashiCorp Developer
Terraform can store the state remotely, making it easier to version and work with in a team.
https://developer.hashicorp.com/terraform/language/state/remote
Terraform Registry
https://registry.terraform.io/providers/hashicorp/terraform/latest/docs/data-sources/remote_state
728x90
반응형

'Devops 솔루션 > Terraform' 카테고리의 다른 글

[Terraform] for_each, for loop 란  (0) 2023.03.05
Terraform+CSV로 SecurityGroup 관리  (0) 2022.04.14