Terraform의 발견
기존에 클라우드 상에서 인프라 리소스를 관리하는 방법은 상당히 제한적이었다.
대부분의 클라우드 벤더에서 내가 어떤 리소스를 보유하고 있고 어떻게 인프라가 구성되어 있는지
한 눈에 관리하기 쉽게 보여주는 서비스가 존재하지 않았다.
그래서 등장하게 된 것이 Infrastructure as a Code, Iaac이다.
Terraform은 현존하는 대부분 클라우드 서비스의 IaaC를 가능하게 해주는 오픈소스 툴이다.
Terraform의 기능을 통해 우리는 존재하는 클라우드 리소스를 코드로 관리해 쉽고 빠른 리소스 변경과 배포가 가능하게 되었다.
본 글에서는 Google Cloud Platform과 Terraform으로 클라우드 인프라를 어떻게 관리할 수 있는지 본인이 시도하고 삽질했던 경험을 나누고자 한다.
Terraform 구동 과정
GCP에서 Terraform을 사용하기 전에 Terraform을 어떻게 사용하는지부터 알아보자.
Terraform은 간단한 커맨드를 통해 기존에 존재하는 리소스를 Import하고 추가하고 삭제할 수 있다.
이 모든 과정은 .tf파일과 .tfstate파일의 비교를 통해 이루어진다.
.tf파일은 Configuration을 맡는 파일로 내가 적용하고자 하는 리소스를 명시해 놓은 것이다.
.tfstate파일은 State를 맡는 파일로 현재 존재하는 리소스를 명시해 놓은 것이다.
Terraform은 Configuration을 적용하기 전에 현재 상태를 명시한 State파일과의 비교를 통해 인프라에서 어떤 변화가 일어나야 할지 미리 계산한다.
실제 적용은 이 과정이 끝난 뒤에 사용자의 커맨드 입력으로 이루어지게 된다.
Terraform의 구현 과정을 알았으니 시나리오를 통해 실제로 어떻게 인프라를 코드로 관리할 수 있는지 알아보자.
Terraform 사용
기존에 존재하던 GCP Project Infrastructure를 관리하고자 하는 상황
보유한 Resource는 1 Managed Instance Group, 1 health check, 1 Machine Image, 1 GCS 가 존재한다.
기존에는 보유한 리소스들을 보고 관리하려면 GCP Console이나 List 커맨드를 통해 제한적으로 가능했지만.
Terraform을 이용하면 보기 쉬운 Code 형식로 인프라를 손쉽게 구성하고 관리할 수 있다.
본 장에서는 사용자가 이미 Terraform과 gcloud 등 필요한 구성을 이미 보유하고 있고 window10 환경에서 실행 중임을 가정하고 진행한다.
1. Service account key credential 추가
GCP는 외부자가 GCP 내부의 리소스에 접근하기 위해서 필요한 인증 방법 중의 하나로 Service account key를 보유하고 있다.
그래서 Terraform이 GCP 인프라에 접근할수 있게 하기 위해서는 GCP에서 발급한 Service account key Credential을 등록해야 한다.
GCP에서 Project Owner Permission으로 발급한 Service account key를 Json format으로 저장한다.
이후 set GOOGLE_APPLICATION_CREDENTIALS=[PATH] 커맨드를 통해 미리 Service account key 사용을 준비해 놓는다.
2. Terraform init으로 Provider Module 설치
Terraform은 여러가지 클라우드 서비스를 지원하고 있기 때문에, 사전에 어떤 서비스를 이용하고 있는지를 명시해줘야 한다.
Provider를 지정한다고 표현하는 이 과정을 통해서 Terraform이 GCP의 리소스를 사용할 것임을 명시할 수 있다.
Terraform에서 GCP Provider를 사용하기 위한 Module을 설치해야 한다.
원하는 디렉토리 안에 provider "google" {}를 내용으로 init.tf 파일을 생성한다.
그 후 Terraform init 커맨드를 실행하면 Google 모듈이 설치된다.
3. Terraformer를 통해 기존 인프라 가져오기
Terraform에서 기존의 리소스를 가져오는 방법으로 import라는 기능을 지원하고 있다.
하지만 이 기능은 한 번에 하나의 리소스만 가져올 수 있으므로 많은 리소스로 구성된 인프라를 가져오기에는 상당히 불편하다는 단점이 있다.
그래서 이 단점을 극복하기 위해 등장한 오픈소스 툴로 Terraformer가 있다.
Terraformer를 사용하면 기존에 내가 구성했던 클라우드 인프라를 한 번의 명령으로 전부 가져올 수 있다.
본 글에서는 Terraform을 통한 인프라 관리를 중점적으로 다룰 것이므로 Terraformer에 대한 내용은 짧게 다루도록 한다.
Terraformer에 대해 더 자세히 알고 싶다면 여기서 확인할 수 있다.
지금의 상황에서는 Managed Instance Group, Machine Image와 GCS 리소스를 가져오고 싶으므로
terraformer import google --resources=regionInstanceGroupManagers,instanceTemplates,firewall,gcs,disks,healthChecks,httpHealthChecks --projects=[Proejct-Name] --regions=asia-northeast3 --path-pattern=test
커맨드를 실행한다.
커맨드를 성공적으로 실행했다면 아래의 사진과 같이 폴더에 .tf파일(Configuration)과 .tfstate파일(State)이 생성된 것을 확인할 수 있다.
이렇게 Terraform을 사용했다면 번거로울 수 있는 작업을 Terraformer의 Import기능을 통해 한 번의 커맨드로 시행할 수 있다.
Terraformer는 앞으로 리소스명.tf로 명명된 Configuration 파일의 명세와 terraform.tfstate로 명명된 State파일을 비교함으로서 리소스를 추가,제거,변경할 것이다.
즉 Terraform은 실제 GCP 상에 존재하는 리소스를 보고 작업하는 것이 아니라 순전히 State파일 내에 존재하는 리소스만을 보고 작업하기 때문에 Import과정은 꼭 성공적으로 이루어져야 한다.
존재하는 리소스를 전부 성공적으로 가져와야 실제 인프라와 Terraform으로 관리하는 인프라가 동일해질 수 있기 때문이다.
성공적으로 기존 인프라를 가져왔으니 다음은 Terraform으로 리소스를 변경하는 작업을 해보자.
다음 장에 계속
'GCP' 카테고리의 다른 글
코딩 한 줄 필요 없는 Machine Learning - GCP AutoML Tables로 쉽게 ML 하기 (2) | 2020.08.21 |
---|---|
GCP + Terraform으로 클라우드 인프라 관리하기(2) (0) | 2020.08.10 |
GCP Load Balancer + Instance Group 을 운영하며 발생한 오류 트러블슈팅 (0) | 2020.07.29 |
GCP Professional Cloud Architect Certificate 취득기(2) (0) | 2020.07.12 |
GCP Professional Cloud Architect Certificate 취득기(1) (0) | 2020.07.12 |