특정 리소스 별로 분리하여 관리 가능 workspace 는 모든 리소스의 tfstate 파일이 한 백엔드에 저장되어 있지만, File Layout 을 사용하면리소스 별로 tfstate 파일을 분리할 수 있다.
이를 활용하면 자주 변경되지 않는 VPC 리소스와 자주 변경되는 EC2 리소스 등을 별도의 tfstate 파일로 관리할 수 있게 되는 것이다.
workspace 를 사용할 때보다 유연한 환경 생성 가능 workspace 는 동일한 테라폼 코드를 변수만 다르게 하여 다른 환경에 배포하는 것에 유용하다. 하지만, 만약 환경별로 다른 보안 체계를 적용하거나 환경별로 다른 리소스를 생성하고 싶을 때는 고민이 생길 것이다.
물론 삼항연산자를 통해 workspace 명에 따른 리소스 배포도 가능하지만 그렇게 된다면 코드의 복잡도가 증가하여 협업하는 데 불리할 수도 있다.
때로는 함수를 많이 사용하여 코드를 짧게 짜는 것보다 코드의 중복이 있더라도 타인이 빠르게 이해할 수 있는 코드가 더 좋을 수도 있다.
File Layout 을 통해 각각의 환경 별 리소스를 배포한다면 보다 더 유연하고 가독성 높은 코드를 작성할 수 있을 것이다.
File Layout 을 사용하는 것의 단점
리소스 배포에 대한 번거로움이 증가 File 을 리소스 별로 분리시켰기 때문에, 해당 리소스를 배포하고 싶다면 손수 해당 위치에서 테라폼 명령어를 통해서 배포시켜줘야 한다는 번거로움이 존재한다. Terragrunt 를 이용한다면 이 과정을 자동화할 수 있긴 하다.
리소스 참조의 어려움 같은 폴더 내에 테라폼 파일들이 위치해 있다면 리소스 간 참조가 가능하지만, 다른 폴더 내에 파일이 위치한다면 리소스 간 참조가 어렵다.
다행히 'terrafrom_remote_state' 라는 데이터 소스를 사용해 해결할 수 있다. 해당 데이터 소스는 테스트 중에 사용할 예정이며, 그 때 다시 보도록 하자 !
workspace 와 file layout 중 어느 것이 정답이라고 할 수 없다. 본인의 환경을 고려하여 둘 중 하나를 사용하거나 둘 다 사용할 수도 있다.
그럼 File Layout 에 대해서 알아보도록 하자 !
이번 File Layout 에 대한 코드는 아래의 GitHub 주소에 저장되어 있다.
2. 테라폼 리소스 배포
2.1. S3 Backend 생성
위에서 받은 테라폼 코드를 실행해서 S3 Backend 를 생성하자. Bucket 명은 고유해야하기 때문에 별도로 변경해주자
cd 01_global/01_s3
terraform init && terraform plan && terraform apply -auto-approve
2.2. VPC & RDS 배포
웹 서버 생선 전, 웹 서버가 배포되고 바라보게 될 VPC 와 RDS 를 먼저 생성해야 한다.
rds 와 variables.tf 파일을 보면 DB username, password 가 변수처리 되어있다.
변수에 Default 값을 입력해서 처리할 수 있지만 이번에는 터미널에 변수를 입력해서 적용해보자
# Mac
export TF_VAR_db_username='terraform'
export TF_VAR_db_password='terraform!'
# Windows
set TF_VAR_db_username=terraform
set TF_VAR_db_password=terraform!
cd /02_stage/01_data-stores/01_mysql
terraform init && terraform plan && terraform apply -auto-approve
서브넷은 배포할 때 어떤 VPC 에 배포할 지 지정해줄 수 있다. 지금은 앞서 RDS 와 같이 배포한 VPC 에 서브넷을 배포하고 싶은 상황이다. 앞서 VPC 를 배포할 때, outputs.tf 파일 내용을 보면 해당 VPC ID 가 vpcid 라는 변수 안에 저장이 된 것을 확인할 수 있다.
때문에 vpc_id 에 data.terraform_remote_state.db.outputs.vpcid 를 사용함으로써 해당 VPC 정보를 참조할 수 있는 것이다.
해당 정보를 확인했다면 바로 배포하고 ALBDNS:8080 포트로 확인해보자
tfstate 파일은 어떻게 저장될까??
S3 를 확인해보면 각각 다른 디렉토리의 tfstate 파일로 저장이 되는 것을 확인할 수 있다.
실습 진행 후에는 반드시 리소스를 삭제하자!
이번에는 File Layout 을 통한 tfstate 파일 격리에 대해 알아보았다.
File Layout 을 잘 사용하기 위해서는 결국 2가지가 중요한 것 같다.
1. 리소스 배포 시, 이후에 어떤 값을 참조에 사용할 것인 지 결정하여 output 으로 출력