Terraform과 함께 사용하는 Cloud Spanner

1. 개요

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

Cloud Spanner란 무엇인가요?

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

주요 기능

  • 확장성을 고려하여 설계된 관계형 데이터베이스: 고객이 관계형 데이터베이스에서 기대하는 모든 기능(스키마, SQL 쿼리, ACID 트랜잭션)에 대해 철저한 테스트를 거쳤으며 글로벌 단위로 확장할 준비가 되었습니다.
  • 99.999% 가용성: Cloud Spanner는 멀티 리전 인스턴스에 업계 최고의 99.999% 가용성을 제공하며(99.99% 가용성에 비해 다운타임 발생이 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 제공업체는 다음과 같은 네 가지 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 리소스를 삭제합니다.

자세히 알아보기