본문 바로가기
AWS/Part 4. Ch02 테라폼을 이용한 인프라 관리

CH02_16. 테라폼 terraform_remote_state 데이터소스 활용

by Engineer-Lee 2022. 6. 4.
반응형

테라폼의 remote state는 data 블록으로 열여서 데이터소스로 활용할 수 있다.

https://registry.terraform.io/providers/hashicorp/terraform/latest/docs/data-sources/remote_state

 

Terraform Registry

 

registry.terraform.io

 

인프라 규모가 커진다면 여러 워크스페이스로 인프라 관리를 하게 될 것이다.

그리고 여러 워크스페이스 간에 의존성이 생길 수 있는데

의존하는 워크스페이스의 attribute를 참조해야 할 때 remote state를 사용하면 좋다.

 

local backend를 사용할 때는 backend 속성을 local로 지정하고 config블록에서 path를 지정한다.

 

remote backend를 사용할 때는 data 블록에서 backend는 remote로 config에서 organization과 workspaces의 이름을 설정해야 한다.

 

s3 backend를 사용할 때는 data 블록에서 backend는 s3로 config에서 bucket, key, region을 설정해야 한다.

 

 

이제 실습코드를 보자

https://github.com/tedilabs/fastcampus-devops/tree/main/2-terraform/14-terraform-remote-state

 

GitHub - tedilabs/fastcampus-devops: 🚀 패스트캠퍼스 데브옵스 초격차 코스 자료

🚀 패스트캠퍼스 데브옵스 초격차 코스 자료. Contribute to tedilabs/fastcampus-devops development by creating an account on GitHub.

github.com

 

ec2-instance 워크스페이스는 network 워크스페이스에 의존하고 있다.

network 모듈로 가서 main.tf 파일은 remote-state prefix를 가지는 vpc, 서브넷, 라우트 테이블을 생성시킨다.

apply를 통해 리소스들을 생성하고 나면 terraform.tfstate 파일이 생성된다.

이를 데이터소스를 이용해서 terraform remote state 데이터소스로 참조해야 한다. 이 또한 모듈의 속성을 참조하는 것과 마찬가지로 해당 워크스페이스(network 워크스페이스)의 output이 제대로 지정되어야 한다.

 

ec2-instance 모듈의 main.tf 파일에서 확인해보면 우선 data블록과 local블록이 추가됐다.

data블록에는 terraform_remote_state 소스가 쓰였고 이름은 "network"라고 지었다. local backend를 사용했고 path는 해당 파일(terraform.tfstate 파일)의 디렉토리 위치이다.

 

밑으로 내려가서 resoure "aws_instance" 블록을 보면 subnet_id에서는 remote_state에서 가져온 subnet_groups에서 public 그룹을 찾고 첫 번째 subnet_id를 참조하도록 하였다.

tags의 Name 속성은 remote_state로 가져온 vpc_name을 prefix로 사용했다.

 

 

network 모듈의 main.tf 파일에서 output블록을 확인해보면 잘 참조된 걸 볼 수 있다.

반응형