Terraform과 함께 사용하는 Cloud Spanner

1. 개요

최종 업데이트: 2020년 7월 23일

Cloud Spanner란 무엇인가요?

Google Cloud Spanner는 복제본, 샤딩, 트랜잭션 처리를 자동으로 처리하는, 전 세계에 분산된 ACID 규격 데이터베이스로, 사용 패턴에 맞게 신속하게 확장하여 제품의 성공을 보장할 수 있습니다.

주요 특징

  • 확장을 위해 설계된 관계형 데이터베이스: 고객이 관계형 데이터베이스에서 기대하는 모든 기능(스키마, SQL 쿼리, ACID 트랜잭션)에 대해 철저한 테스트를 거쳤으며 글로벌 단위로 확장할 준비가 되었습니다.
  • 99.999% 가용성: Cloud Spanner는 멀티 리전 인스턴스에 업계 최고의 99.999% 가용성을 제공하며(99.999%의 다운타임보다 다운타임이 10배 더 적음), 리전 및 멀티 리전 구성 전반에서 투명한 동기식 복제를 제공합니다.
  • 자동 샤딩: Cloud Spanner는 요청 부하 및 데이터 크기에 따라 데이터를 자동으로 샤딩하여 성능을 최적화합니다. 따라서 데이터베이스 확장 방법을 고민하는 시간을 줄이고 비즈니스 확장에 집중할 수 있습니다.

모든 기능 보기

학습할 내용

  • Google Cloud Terraform 제공업체를 사용하는 방법
  • Terraform을 사용하여 Cloud Spanner 인스턴스 및 데이터베이스 생성
  • Terraform을 사용하여 Cloud Spanner 리소스 수정
  • Terraform을 사용하여 Cloud Spanner 리소스 삭제

2. 설정 및 요구사항

자습형 환경 설정

아직 Google 계정(Gmail 또는 Google Apps)이 없으면 계정을 만들어야 합니다. Google Cloud Platform 콘솔 ( console.cloud.google.com)에 로그인하고 새 프로젝트를 만듭니다.

50983ac3fdbbf8d0.png

ea581205026ca8e3.png

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 이름은 나중에 Codelab에서 PROJECT_ID로 참조됩니다.

다음으로 Google Cloud 리소스를 사용할 수 있도록 Cloud 콘솔에서 결제를 사용 설정해야 합니다.

이 codelab을 실행하는 과정에는 많은 비용이 들지 않지만 더 많은 리소스를 사용하려고 하거나 실행 중일 경우 비용이 더 들 수 있습니다(이 문서 마지막의 '삭제' 섹션 참조).

Google Cloud Platform의 신규 사용자에게는 $300의 무료 체험판이 제공됩니다.

인증

아직 설치하지 않았다면 gcloud 명령줄 도구를 설치합니다. gcloud가 설치되면 터미널에서 다음 명령어를 실행하여 애플리케이션 기본 사용자 인증 정보를 활성화합니다.

$ gcloud auth application-default login

Terraform

이전에 Terraform을 설치하지 않았다면 Terraform을 설치합니다.

3. Google Cloud Terraform 제공업체

Google Cloud Terraform 제공업체는 4가지 Cloud Spanner 리소스를 제공합니다.

이 Codelab에서는 Cloud Spanner 인스턴스와 데이터베이스를 만들고 관리합니다.

환경

개발 환경에서 Terraform 구성 파일을 위한 새 디렉터리를 만듭니다.

$ mkdir ~/terraform-spanner
$ cd ~/terraform-spanner

그런 다음 'main.tf'라는 파일을 만듭니다. PROJECT_ID를 자신의 Google Cloud 프로젝트 ID로 바꿉니다.

$ cat >> main.tf <<'EOF'
provider "google" {
  project = "PROJECT_ID"
}
EOF

이 Codelab의 나머지 부분에서는 이 파일을 수정하고 변경사항을 적용합니다.

4. 인스턴스 및 데이터베이스 만들기

다음 콘텐츠로 main.tf를 수정하여 새 Cloud Spanner 인스턴스를 추가합니다.

provider "google" {
  project = "PROJECT_ID"
}

resource "google_spanner_instance" "main" {
  config       = "regional-us-central1"
  display_name = "first-terraform-instance"
  num_nodes    = 3
}

다음 명령어를 실행하여 변경사항을 적용합니다.

$ terraform apply
# ...
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes
# ...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

변경사항이 적용되면 Google Cloud 콘솔에서 인스턴스를 볼 수 있습니다. 인스턴스를 만든 후에는 리전 구성을 수정할 수 없습니다.

48b67416982fa152.png

인스턴스를 만든 후 다음 단계에서 데이터베이스를 만듭니다. 다음 내용으로 main.tf를 수정합니다.

provider "google" {
  project = "PROJECT_ID"
}

resource "google_spanner_instance" "main" {
  config       = "regional-us-central1"
  display_name = "first-terraform-instance"
  num_nodes    = 3
}

resource "google_spanner_database" "database" {
  instance = google_spanner_instance.main.name
  name     = "my-first-database"
}

다시 다음 명령어를 사용하여 변경사항을 적용합니다.

$ terraform apply
# ...
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

성공하면 인스턴스에서 my-first-database를 사용할 수 있습니다.

9962a71c6b2a3aff.png

5. 인스턴스 수정하기

이전 섹션에서 설명한 것처럼 모든 인스턴스 속성을 수정할 수 있는 것은 아닙니다. 하지만 노드 수를 늘리거나 줄여 인스턴스에서 사용하는 리소스를 조정할 수 있습니다. 생성된 인스턴스에는 3개의 노드가 있었습니다. main.tf 파일을 수정하여 노드 수를 5로 늘리겠습니다.

provider "google" {
  project = "PROJECT_ID"
}

resource "google_spanner_instance" "main" {
  config       = "regional-us-central1"
  display_name = "first-terraform-instance"
  num_nodes    = 5
}

resource "google_spanner_database" "database" {
  instance = google_spanner_instance.main.name
  name     = "my-first-database"
}

다음 단계는 변경사항을 적용하는 것입니다.

$ terraform apply
# ...
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

성공하면 인스턴스가 노드 5개를 사용합니다.

6. 데이터베이스 삭제

더 이상 필요하지 않은 데이터베이스는 영구적으로 삭제할 수 있습니다. main.tf에서 데이터베이스를 삭제하고 변경사항을 적용하기만 하면 됩니다.

provider "google" {
  project = "PROJECT_ID"
}

resource "google_spanner_instance" "main" {
  config       = "regional-us-central1"
  display_name = "first-terraform-instance"
  num_nodes    = 5
}
$ terraform apply
# ...
Apply complete! Resources: 0 added, 0 changed, 1 destroyed.

성공하면 데이터베이스가 영구적으로 삭제됩니다.

7. 인스턴스 삭제

더 이상 필요하지 않은 인스턴스는 영구적으로 삭제할 수 있습니다. main.tf에서 인스턴스를 삭제하고 변경사항을 적용하기만 하면 됩니다.

provider "google" {
  project = "PROJECT_ID"
}
$ terraform apply
# ...
Apply complete! Resources: 0 added, 0 changed, 1 destroyed.

성공하면 인스턴스가 영구적으로 삭제됩니다.

8. 축하합니다.

Terraform을 사용하여 Cloud Spanner 리소스를 생성, 수정, 삭제했습니다.

학습한 내용

  • Google Cloud Terraform 제공업체를 사용하는 방법
  • Terraform을 사용하여 Cloud Spanner 인스턴스 및 데이터베이스 생성
  • Terraform을 사용하여 Cloud Spanner 리소스 수정
  • Terraform을 사용하여 Cloud Spanner 리소스 삭제

자세히 알아보기