요약
- 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 버켓에 존재하는 정보를 불러와서 사용할 수 있다.
- tfstate를 분류하지 않고 함께 사용하다보면, 특정 환경의 플랜이 다른 환경에 영향을 주는 경우가 생긴다
추후 해야할 것
- 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]

State: Remote Storage | Terraform | HashiCorp Developer
Terraform can store the state remotely, making it easier to version and work with in a team.

Terraform Registry

728x90
반응형
'Devops 솔루션 > Terraform' 카테고리의 다른 글
[Terraform] for_each, for loop 란 (0) | 2023.03.05 |
---|---|
Terraform+CSV로 SecurityGroup 관리 (0) | 2022.04.14 |