Terraform

Terraform - terraform_remote_state

본 포스트는, Terraform Up & Running 테라폼 - OREILLY를 참고했습니다.

저번 포스트에서, 원격저장소 및 격리방법을 알아봤습니다.

한번에 모든 테라폼 파일을 사용하는 것보다, 쓰임에 따라 나눠서 격리하는 것이 적절하다는 것을 느꼈습니다.

하지만 이렇게 격리하게 되면 리소스들이 연결이 되지않아서, 변수로 사용하기 어려워 지는데, 이를 사용하는 법을 알아보고자 합니다.


리소스 생성

먼저 원격 저장소를 생성해줍니다.

원격 저장소의 경우 저번과 동일하게 S3와 DynamoDB를 이용해서 생성합니다.

원격 저장소에서 사용할 파일 위치는 다음과 같습니다

stage
├── data-store
│   └── mysql
│       └── terraform.tfstate
└── services
    └── webserver
        └── terraform.tfstate


RDS 생성

rds의 경우 terraform에서 제공하는 예제코드를 사용했습니다.

여기서 output을 통해서 tfstate에 값을 입력해야함을 기억해주세요.

backend의 경우 위에서 선언한 원격 저장소를 이용해서 진행합니다.

terraform init 이후 terraform apply를 통해서 rds를 생성합니다.

rds의 경우 생성시간이 오래 걸릴 수 있으니 참고해주세요.


EC2 생성

이제 위에서 생성한 rds의 데이터를 ec2로 가져와야합니다.

가져올 때, terraform_remote_state를 사용하여 가져옵니다.

다른 tfstate파일에 있는 내용을 통해서 데이터를 가져오는 방식입니다.

위에서 output을 통해 tfstate에 저장되어있는 내용을 terraform_remote_state를 통해서 가져옵니다.

config를 rds에 사용했던 bucket 및 key를 지정하면 이후 data처럼 사용할 수 있습니다.

단, 읽기 전용이므로 해당 데이터를 수정할 수 없습니다. ( 이러한 장점으로 안정적으로 운영 할 수 있습니다. )

이제 data를 통해서 ec2를 생성합니다.

ec2의 경우, backend를 통해서 원격 저장소에 저장해도 되고, 로컬에서 진행해도 상관없습니다.

Security_group등 설정은 생략합니다. ( 이전 포스트를 참고해주세요. )

User_data에서 terraform_remote_state를 통해 얻은 db의 outputs 값들을 사용합니다.

이제 rds생성과 동일하게 terraform initterraform apply 를 통해 리소스를 생성해줍니다.

정상적으로 생성되었다면 위와 같이 ec2에서 rds에 대한 정보를 얻을 수 있습니다.