Terraform を使用した Cloud Spanner

1. 概要

最終更新日: 2020 年 7 月 23 日

Cloud Spanner とは

Google Cloud Spanner は、グローバルに分散された ACID 準拠のデータベースであり、レプリカ、シャーディング、トランザクション処理を自動的に処理するため、使用パターンに合わせて迅速にスケールでき、プロダクトを成功に導くことができます。

主な機能

  • スケーリングを念頭に置いたリレーショナル データベース: スキーマ、SQL クエリ、ACID トランザクションなど、リレーショナル データベースに期待される機能がすべて実証され、グローバルにスケーリングできます。
  • 99.999% の可用性: Cloud Spanner は、マルチリージョン インスタンスで業界トップクラスの 99.999% の可用性を提供します。ダウンタイムは 99.999% の 10 分の 1 です。リージョンとマルチリージョンの構成間で透過的な同期レプリケーションを提供します。
  • 自動シャーディング: Cloud Spanner は、リクエストの負荷とデータのサイズに基づいてデータを自動的にシャーディングすることで、パフォーマンスを最適化します。その結果、データベースのスケーリング方法について心配する時間を減らし、ビジネスのスケーリングに集中できます。

すべての機能を表示

学習内容

  • Google Cloud Terraform プロバイダの使用方法
  • Terraform を使用して Cloud Spanner のインスタンスとデータベースを作成する。
  • Terraform を使用した Cloud Spanner リソースの変更。
  • Terraform を使用した Cloud Spanner リソースの削除。

2. 設定と要件

セルフペース型の環境設定

Google アカウント(Gmail または Google Apps)をお持ちでない場合は、1 つ作成する必要があります。Google Cloud Platform コンソール(console.cloud.google.com)にログインし、新しいプロジェクトを作成します。

50983ac3fdbbf8d0.png

ea581205026ca8e3.png

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、この 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 リソースの削除。

詳細