1달 전부터 GCP 서비스를 이용해보고 있는중이다.
자금이 풍족하지 않기에 초기 가입때 받은 GCP 무료 크레딧 300$로 GCP 서비스를 아끼고..아끼며 사용하고 있다.
그러던 중 오랜만에 접속해본 콘솔에서 상당히 많은 크레딧이 소비가 된걸 확인하였다.
단지 gcloud로 쿠버네티스 엔진을 몇번 이용했었는데.. 이때 VM이 계속 실행중인 상태였던것 같다..
부주의했던 나의 잘못이리라...
그러던 중 회사 내부적으로 진행한 테크 세션에서 테라폼(Terraform)에 대해서 처음 알게 되었다.
사실 참여했던 테크세션은 Ansible에 대한 테크 세션이었지만, 나는 되려 테라폼(Terraform)에 무척 호기심이 생겼다.
테라폼(Terraform)은 HashCorp가 만든 IaC로 인프라 리소스를 코드로 관리할 수 있는 오픈소스 프로젝트이다.
즉, GCP, AWS, Azure 부터 다양한 가상화 클라우드 서비스에서 구축되는 복잡한 인프라 구조를 파일로 관리한다는 것이다.
아주 유용하지 않은가??
테라폼(Terraform)을 이용하면 테스트용 일회성 시스템 구축을 하고 구축했던 시스템 모두 일괄 삭제도 가능할 뿐더러 코드 몇 줄을 추가해 VM추가와 각종 네트웍 설정까지 가능하다.
테라폼(Terraform) 다운로드
Download Terraform - Terraform by HashiCorp
Download Terraform
www.terraform.io
운영체제에 맡게 Terraform을 다운로드 받고 압축을 풀자.
$ls
gcp/ terraform*
- gcp : 작업 폴더
- terraform : 테라폼 실행 exe 파일
이제 Terraform을 이용해 GCP를 제어하려면 credential이 필요하다.
credential은 GCP 프로젝트에서 IAM 및 관리자로 이동하여 서비스 계정에서 json 파일 형태로 받을 수 있다. json 파일을 gcp 폴더에 놓자.
이제 테라폼 코드를 작성해보자.
테라폼 언어를 통해 파일에 코드를 작성해야 하는데, 코드 실행에 필요한 Input값들을 다른 파일에 넣어두어 Main 코드에서 분리하자.
variable.tf
variable "project" {
type = string
default = [PROJECT_ID]
}
variable "credentials_file" {
default = [CREDENTAIL_JSON_PATH]
}
variable "region" {
type = string
default = "asia-northeast2"
}
variable "zone" {
type = string
default = "asia-northeast2-c"
}
먼저 위 문법에서 보면 알수 있듯이 변수선언은 variable로 코드 블럭을 지정하고 변수이름을 작성하면 된다.
그리고 변수의 Type도 지정할수 있고 초기값도 선언을 할 수 있다. (List, Map 다양한 자료구조 지원)
위에 처럼 따로 변수파일을 만들어서 사용할 변수들을 정의하여 사용하면 관리하기 더 편할 것이다.
Provider 정의
provider "google" {
version = "3.5.0"
credentials = file(var.credentials_file)
project = var.project
region = var.region
zone = var.zone
}
먼저 프로바이더를 정의 변수들을 위와 같이 작성한다.
각종 Resource 정의
resource "google_compute_network" "vpc_network" {
name = "terraform-network"
}
resource "google_compute_instance" "vm_instance" {
name = "terraform-instance"
machine_type = var.machine_types[var.environment]
tags = ["web", "dev"]
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
}
}
provisioner "local-exec" {
command = "echo ${google_compute_instance.vm_instance.name}"
}
network_interface {
network = google_compute_network.vpc_network.name
access_config {
nat_ip = google_compute_address.vm_static_ip.address
}
}
}
테스트
이제 코드들은 작성이 다 되었다.
테라폼 코드를 실행을 해보자.
1. terraform init 실행
2. terraform apply 실행
코드에 작성된 리소스들이 생성이 된다.
3 terraform destroy
생성했던 리소스들을 일괄 삭제한다.
참고 자료
'클라우드 & 인프라 > 개발 운영 환경' 카테고리의 다른 글
퍼블릭 클라우드 마이그레이션 OS 버전 지원 정보 (0) | 2020.08.05 |
---|---|
[Vagrant] Mac 로컬 Vagrant VM 외부 포트포워딩 설정 (0) | 2020.07.23 |
[Tomcat] CentOS 7.7 tomcat 서비스 등록하는 방법 (0) | 2020.07.15 |
[AWS] pem 파일 없이 password로 EC2 접속하는 법 (0) | 2020.07.13 |