1. 概要
最終更新日: 2020 年 7 月 23 日
Cloud Spanner とは
Google Cloud Spanner は、レプリカ、シャーディング、トランザクション処理を自動的に処理する、グローバルに分散された ACID 準拠のデータベースです。あらゆる使用パターンに応じて迅速にスケールしてサービスを成功に導きます。
主な機能
- スケーリングの実現に向けて設計されたリレーショナル データベース: スキーマ、SQL クエリ、ACID トランザクションなど、リレーショナル データベースに求められる機能はすべて実証済みであり、グローバルなスケーリングが可能です。
- 99.999% の可用性: Cloud Spanner はマルチリージョン インスタンスで業界トップクラスの 99.999% の可用性を実現します。これはダウンタイムに換算すると、99.99% の場合の 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)にログインし、新しいプロジェクトを作成します。


プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、この Codelab では PROJECT_ID と呼びます。
次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。
この Codelab の操作をすべて行っても、費用は数ドル程度です。ただし、その他のリソースを使いたい場合や、実行したままにしておきたいステップがある場合は、追加コストがかかる可能性があります(このドキュメントの最後にある「クリーンアップ」セクションをご覧ください)。
Google Cloud Platform の新規ユーザーは、$300 の無料トライアルをご利用いただけます。
認証
まだインストールしていない場合は、gcloud コマンドライン ツールをインストールしてください。gcloud をインストールしたら、ターミナルで次のコマンドを実行して、アプリケーションのデフォルト認証情報を有効にします。
$ gcloud auth application-default login
Terraform
Terraform をインストールしていない場合は、Terraform をインストールします。
3. Google Cloud Terraform プロバイダ
Google Cloud Terraform Provider は、次の 4 つの Cloud Spanner リソースを提供します。
- google_spanner_instance
- google_spanner_database
- google_spanner_instance_iam
- google_spanner_database_iam
この 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 コンソールでインスタンスを確認できます。インスタンスの作成後にリージョン構成を変更することはできません。

インスタンスを作成したら、次のステップでデータベースを作成します。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 がインスタンスで使用可能になります。

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 リソースを削除する。
詳細
- Google Cloud Spanner のドキュメントをご覧ください。
- Google Cloud Spanner Terraform リソースについて確認する。
- インスタンスとデータベースの IAM ルールの設定について確認する。