SCBL002
概要
このラボでは、Google Cloud SDK、コマンドライン インターフェース(CLI)、Terraform を使用して、Spanner インスタンスとデータベースの作成を自動化します。
目標
このラボでは、次の方法について学びます。
- gcloud CLI を使用してインスタンスとデータベースを作成する。
- Terraform を使用して Spanner インフラストラクチャを自動化する。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ご自身でラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
- ラボを完了するための時間(開始後は一時停止できません)
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントに追加料金が発生する可能性があります。
Google Cloud Shell の有効化
Google Cloud Shell は、デベロッパー ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Google Cloud Shell では、コマンドラインで GCP リソースにアクセスできます。
GCP Console の右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

[続行] をクリックします。

環境のプロビジョニングと接続には少し時間がかかります。接続すると、すでに認証されており、プロジェクトは PROJECT_ID に設定されています。例えば:

gcloud
は Google Cloud Platform のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = <project_ID>
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
タスク 1. gcloud CLI を使用してインスタンスとデータベースを作成する
-
Google Cloud コンソールのタイトルバーで、[Cloud Shell をアクティブにする](
)をクリックします。プロンプトが表示されたら、[続行] をクリックします。
-
次のコマンドを実行して、プロジェクト ID を設定します。
gcloud config set project {{{project_0.project_id|placeholder_project_id}}}
- Cloud Shell プロンプトで次のコマンドを実行して、test-spanner-instance という名前の Spanner インスタンスを作成します。
Spanner の構成と容量のパラメータに注意してください。コマンドを承認するよう求められたら、承認します。
gcloud spanner instances create test-spanner-instance --config=regional-{{{project_0.default_region|place_holder_text}}} --description="test-spanner-instance" --processing-units=100
- コマンドはすぐに完了します。コンソールで Spanner サービスに移動し、インスタンスが作成されたことを確認します。
インスタンスを確認するために、以下のコマンドも実行できます。試してみましょう。
gcloud spanner instances list
- Pets データベースを作成する前に、DDL コードを含むファイルが必要です。次のコマンドを入力してファイルを作成し、nano コードエディタで開きます。
nano pets-db-schema.sql
- Nano に次のコードを貼り付けます。
Ctrl+X
キー、Y
キー、Enter キーの順に押してファイルを保存します。
CREATE TABLE Owners (
OwnerID STRING(36) NOT NULL,
OwnerName STRING(MAX) NOT NULL
) PRIMARY KEY (OwnerID);
CREATE TABLE Pets (
PetID STRING(36) NOT NULL,
OwnerID STRING(36) NOT NULL,
PetType STRING(MAX) NOT NULL,
PetName STRING(MAX) NOT NULL,
Breed STRING(MAX) NOT NULL,
) PRIMARY KEY (PetID);
- スキーマ ファイルが作成されたら、次のコマンドを実行してデータベースを作成します。
gcloud spanner databases create pets-db --instance=test-spanner-instance --database-dialect=GOOGLE_STANDARD_SQL --ddl-file=./pets-db-schema.sql
- 飼い主と飼っている犬をすべて挿入します。Owners と Pets の主キーには UUID が使用されています。次のコマンドを入力して、飼い主の UUID を作成し、変数に保存します。
owner_uuid=$(cat /proc/sys/kernel/random/uuid)
echo $owner_uuid
- 飼い主の名前として Doug を挿入します。
注: --data
パラメータを使用すると、フィールドを名前と値のペアで渡すことができます。
gcloud spanner rows insert --table=Owners --database=pets-db --instance=test-spanner-instance --data=OwnerID=$owner_uuid,OwnerName=Doug
- 次のコマンドで Doug の犬をすべて挿入します。
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Rusty',PetType='Dog',Breed='Poodle'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Duchess',PetType='Dog',Breed='Terrier'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Gretyl',PetType='Dog',Breed='Shepherd'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Gigi',PetType='Dog',Breed='Retriever'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Noir',PetType='Dog',Breed='Schnoodle'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Bree',PetType='Dog',Breed='Mutt'
- 正常に機能するか確認してみましょう。次のクエリを実行します。
gcloud spanner databases execute-sql pets-db --instance=test-spanner-instance --sql='SELECT o.OwnerName, p.PetName, p.PetType, p.Breed FROM Owners as o JOIN Pets AS p ON o.OwnerID = p.OwnerID'
-
コンソールに移動してデータを表示することもできます。プロダクト リストから [Spanner] を選択します。左側のメニューで、[test-spanner-instance] > [pets-db]([データベース] の下)> [Pets]([テーブル] の下)> [データ] を選択します。
-
次のコマンドでデータベースを削除します。
gcloud spanner databases delete pets-db --instance=test-spanner-instance
-
コンソールで、データベースが削除されたことを確認します。
-
最後に、次のコマンドでインスタンスを削除します。
gcloud spanner instances delete test-spanner-instance --quiet
注: --quiet
パラメータは、ユーザーにプロンプトを表示せずにコマンドを実行します。このパラメータは、前のコマンドにも追加できます。これは、自動化パイプラインを作成していて、ユーザーに質問することがない場合に便利です。
- コンソールで、インスタンスが削除されたことを確認します。
タスク 2. Terraform を使用して Spanner インフラストラクチャを自動化する
- 次のコマンドを使用して、Terraform ファイル用のフォルダを作成し、そのフォルダに移動します。
mkdir terraform-spanner
cd terraform-spanner
- Terraform モジュールには、いくつかのファイルが必要です。次のコマンドを実行して、空のファイルを作成します。
touch main.tf provider.tf terraform.tfvars variables.tf
- [エディタを開く] ボタンをクリックしてコードエディタを開きます。左側の [エクスプローラ] ペインで、先ほど作成した
terraform-spanner
フォルダを見つけて展開します。provider.tf
ファイルを選択してエディタで開き、次のコードを追加します。
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 4.0"
}
}
}
provider "google" {
project = var.project_id
region = var.region
}
注: terraform ブロックのコードは、Google プロバイダを Hashicorp のウェブサイトからダウンロードします。provider ブロックのコードは、後で変数として設定する正しいプロジェクト ID とリージョンを使用するようにプロバイダを構成します。
-
main.tf
ファイルを開き、次のリソース ブロックを追加します。このコードは Spanner インスタンスを作成します。
resource "google_spanner_instance" "db-instance" {
name = "terraform-spanner-instance"
config = "regional-${var.region}"
display_name = "TF Spanner Instance"
processing_units = var.processing_units
force_destroy = var.force_destroy
}
- 同じファイルで、前のコードの下に、Pets データベースを作成する次のコードを追加します。テーブルを定義する DDL コードに注目してください。
resource "google_spanner_database" "test-database" {
instance = google_spanner_instance.db-instance.name
name = "pets-db"
# Can't run destroy unless set to false
deletion_protection = var.deletion_protection
ddl = [
"CREATE TABLE Owners (OwnerID STRING(36) NOT NULL, OwnerName STRING(MAX) NOT NULL) PRIMARY KEY (OwnerID)",
"CREATE TABLE Pets (PetID STRING(36) NOT NULL, OwnerID STRING(36) NOT NULL, PetType STRING(MAX) NOT NULL, PetName STRING(MAX) NOT NULL, Breed STRING(MAX) NOT NULL) PRIMARY KEY (PetID)",
]
}
-
variables.tf
ファイルを開きます。このファイルでは、Terraform モジュールで使用される変数を宣言します。以下のコードを追加します。
variable "deletion_protection" {
description = "true に設定すると、データベースが作成されている場合、terraform destroy を実行できなくなります。"
type = bool
default = false
}
variable "force_destroy" {
description = "true に設定した場合、terraform destroy を実行するとすべてのバックアップが削除されます。"
type = bool
default = true
}
variable "processing_units" {
type = number
default = 100
}
variable "project_id" {
description = "GCP プロジェクト ID。"
type = string
}
variable "region" {
type = string
}
-
project_id
と region
を除くすべての変数にはデフォルト値があります。それらの変数の値は terraform.tfvars
ファイルを使用して設定します。このファイルを開き、次のコードを追加します。
project_id = "{{{project_0.project_id|placeholder_project_id}}}"
region = "{{{project_0.default_region|place_holder_text}}}"
- 正常に機能するか確認してみましょう。[ターミナルを開く] ボタンをクリックします。エディタで新しいタブまたはウィンドウを開いた場合は、最初に元のタブに戻る必要がある場合があります。コマンド プロンプトで、次のコマンドを入力します。
terraform init
- 前のコマンドでエラーがなかったと仮定して、次のコマンドを入力し、出力を分析します。2 つのリソースが追加される旨が表示されます。
terraform plan
- 最後に、次のコマンドを入力して、Spanner インスタンスと Pets データベースを作成します。メッセージが表示されたら、「
yes
」と入力する必要があります。
terraform apply
-
Terraform コマンドが完了するまで待ちます。コンソールで Spanner サービスに移動し、インスタンスとデータベースが作成されていることを確認します。更新ボタンはないため、別のプロダクトをクリックしてから Spanner に戻ってインスタンス リストを更新する必要があります。
-
ターミナルに戻り、次のコマンドを入力して Spanner インスタンスを削除します。
terraform destroy -auto-approve
これで完了です。Google Cloud SDK、コマンドライン インターフェース(CLI)、Terraform を使用して、Spanner インスタンスとデータベースの作成を自動化しました。
ラボを終了する
ラボでの学習が完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Qwiklabs から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバック、ご提案、修正事項がございましたら、[サポート] タブからお知らせください。
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。