Google Cloud에서 Terraform을 남들보다 더 잘 이용하는 방법
Terraform으로 GCP Infrastructure를 운영하는 방법에 대한 두 번째 Topic입니다.
이전 글에서 Terraform으로 어떻게 IaaC(Infrastructure as a Code)방식의 접근으로 DevOps 환경을 구성할 수 있었는지 알아보았습니다.
이번 포스트에서는 GCP official document인 "Google Cloud에서 Terraform 사용" 을 바탕으로 GCP와 Terraform을 어떻게 더 효율적으로 운용할 수 있는지 알아보겠습니다.
Reverse Terraforming Tool "Terraformer"
제가 GCP에서 Terraform을 사용하면서 가장 먼저 느낀 불편점은 "기존의 Infrastructure들을 Terraform config으로 가져오기 힘들었다는 것이었습니다.
Terraform이 공식적으로 제공하는 import command로 Infra의 state를 가져올 수는 있었지만 결국 configuration은 가져오지 못했기 때문에 선언적 코드를 작성해야 하는 불편함이 있었습니다.
기존의 Infrastructure를 Terraform의 State와 Config 파일로 가져올 수 있다면 참 편할텐데.. 라는 생각을 하며Googling을 하다가 처음 찾아낸 것이 "Terraforming"이라는 Opensource Tool이었습니다.
하지만 Terraforming은 AWS만 지원했기 때문에 다른 방법을 찾는 수 밖에 없었습니다.
그러다가 찾아낸 것이 "Terraformer"라는 Tool입니다.
Terraformer는 GCP를 지원하는 유일한 Reverse Terraforming Tool입니다.
Terraformer를 설치했다면 간단한 Command만으로도 기존의 Infra를 .tf, .tfstate 파일로 변환할 수 있습니다.
그 전에 미리 Environment variables를 Service account key file로 지정해 Import하고자 하는 Project에 접근할 수 있도록 해두어야 합니다.
set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH
Service account key를 저장했다면 terraformer를 통해 Infra를 가져올 수 있습니다.
간단한 예시로 Project에 존재하는 Google Cloud Storage를 가져오는 커맨드입니다.
terraformer import google --resources=gcs --projects=PROJECT_NAME --regions=REGION --path-pattern=.
커맨드를 실행하면 현재 Directory에 GCS 관련 .tf 파일과 state파일이 생성된 것을 확인할 수 있습니다.
--resource Flag에 원하는 리소스명을 적으면 해당 리소스와 함께, 리소스와 관련된 IAM, ACL와 같은 권한도 같이 넘어오게 됩니다.
--path-pattern Flag에 Directory를 적지 않으면 Config 파일들이 폴더별로 흩어지므로 저는 가시성을 위해 항상 선언하는 것을 권장합니다.
원하는 리소스들을 모두 가져왔다면 이제 Terraform의 state와 기존 Project의 Infrastructure가 동일해져 코드로서 인프라 관리를 가능케 합니다.
이처럼 Terraformer를 이용해서 기존 Infrastructure를 쉽게 Terraforming할 수 있습니다.
Terraformer로 생성된 tf파일들을 이용해서 이전까지 Terraform을 통해 리소스를 관리하는 방법과 동일하게 기존 Infrastructure에서 리소스를 추가하거나 빼는 작업을 할 수 있습니다.
위의 Code를 생성된 compute_instance.tf 파일에 추가하면 기존의 Infrastructure에 간단하게 VM을 추가할 수 있습니다.
주의해야 할 점은, Terraformer는 Open source project이기 때문에 Bug reporting나 feature request 반영이 늦는다는 것을 염두해 두셔야 합니다.
Terraformer의 더 자세한 내용은 여기서 확인할 수 있습니다.