arrow_back

Cloud Spanner 向けのオートスケーラー ツールを活用してワークロードの弾力性を実現する

ログイン 参加
700 以上のラボとコースにアクセス

Cloud Spanner 向けのオートスケーラー ツールを活用してワークロードの弾力性を実現する

ラボ 1時間 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

SCBL069

概要

Cloud Spanner のオートスケーラー ツールは、1 つ以上の Spanner インスタンスのコンピューティング容量を、その使用状況に応じて自動的に増減できるオープンソース ツールです。

Cloud Spanner は、無制限のスケール、強整合性、最大 99.999% の可用性を備えたフルマネージド リレーショナル データベースです。

Cloud Spanner インスタンスを作成するときに、インスタンスのコンピューティング リソースを提供するノードの数または処理ユニットの数を選択します。インスタンスのワークロードが変化しても、Cloud Spanner ではインスタンス内のノード数と処理ユニット数が自動的に調整されません

オートスケーラーはインスタンスをモニタリングし、CPU 使用率の推奨最大値ノードあたりのストレージの推奨上限内に収まるようにコンピューティング容量を自動的に追加または削除します。

このラボでは、プロジェクト単位の構成でオートスケーラーをデプロイします。このデプロイ構成では、オートスケーラーは自動スケーリングされる Cloud Spanner インスタンスと同じプロジェクトに配置されます。

アーキテクチャ

Cloud Spanner オートスケーラーのインタラクションの流れ

上の図は、Cloud Spanner オートスケーラーのコンポーネントとそのインタラクションの流れを示しています。

  1. Cloud Scheduler、Cloud Pub/Sub、Cloud Run functions の Poller 関数で構成される Poller コンポーネントは、Cloud Monitoring API にクエリを実行して、各 Spanner インスタンスの使用率指標を取得します。インスタンスごとに、Poller 関数は 1 つのメッセージをスケーリング Pub/Sub トピックに push し、特定の Spanner インスタンスの使用率指標と、対応する構成パラメータの一部を格納します。

  2. Scaler コンポーネントは、Cloud Pub/Sub、Cloud Run functions の Scaler 関数、Cloud Firestore で構成されています。各メッセージについて、Scaler 関数は Spanner インスタンスの指標を推奨されるしきい値と比較し、許容されるマージンを増減します。選択したスケーリング方式を使用して、インスタンスをスケールする必要があるかどうか、またスケールする必要があるノード数や処理ユニット数を決定します。

フロー全体で、Spanner Autoscaler は推奨事項やアクションの詳細を Cloud Logging に記録し、追跡や監査を可能にします。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ご自身でラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントに追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Google Cloud Shell の有効化

Google Cloud Shell は、デベロッパー ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Google Cloud Shell では、コマンドラインで GCP リソースにアクセスできます。

GCP Console の右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

Cloud Shell アイコン

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

cloudshell_continue

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

Cloud Shell 端末

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
	
注: 自分のマシンで gcloud を実行する場合はセッション間で config 設定が維持されますが、Cloud Shell で実行する場合はセッションごと、または再接続するたびに設定する必要があります。

タスク 1. オートスケーラーと環境を構成する

  1. Cloud Shell で、ラボに必要なファイルのクローンを作成します。
git clone https://github.com/cloudspannerecosystem/autoscaler
  1. プロジェクトとフォルダの環境変数を設定します。
gcloud config set project {{{project_0.project_id|Project ID}}} export WORKING_DIR=`pwd` export AUTOSCALER_DIR=${WORKING_DIR}/autoscaler/terraform/cloud-functions/per-project export AUTOSCALER_MODS=${WORKING_DIR}/autoscaler/terraform/modules export PROJECT_ID={{{project_0.project_id|Project ID}}}
  1. オートスケーラー インフラストラクチャを配置するリージョンとゾーン、および App Engine のロケーションを設定します。
export REGION={{{project_0.default_region|Lab Region}}} export ZONE={{{project_0.default_zone|Lab Zone}}} export APP_ENGINE_LOCATION={{{project_0.default_region|Lab Region}}}
  1. 必要な Cloud API を有効にします。
gcloud services enable iam.googleapis.com \ cloudresourcemanager.googleapis.com \ appengine.googleapis.com \ firestore.googleapis.com \ spanner.googleapis.com \ pubsub.googleapis.com \ cloudfunctions.googleapis.com \ cloudbuild.googleapis.com \ cloudscheduler.googleapis.com \ run.googleapis.com \ eventarc.googleapis.com
  1. オートスケーラーをデプロイするリージョンに新しい App Engine アプリケーションを作成します。これにより、プロジェクト用の新しい Cloud Firestore インスタンスが作成されます。
gcloud app create --region=${APP_ENGINE_LOCATION}
  1. terraform 変数ファイル(variables.tf)の値を Qwiklabs プロジェクトに合わせて更新します。
sed -i "s/us-central1-c/$ZONE/g; s/us-central1/$REGION/g" ${AUTOSCALER_DIR}/variables.tf sed -i "s/us-central1/$REGION/g" ${AUTOSCALER_MODS}/autoscaler-functions/variables.tf sed -i "s/us-central/$REGION/g" ${AUTOSCALER_MODS}/scheduler/variables.tf

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Firestore データベースを作成する

タスク 2. オートスケーラーをデプロイする

  1. 対応する Terraform 環境変数にプロジェクト ID、リージョン、ゾーンを設定します。
export TF_VAR_project_id=${PROJECT_ID} export TF_VAR_region=${REGION} export TF_VAR_zone=${ZONE}
  1. TF_VAR_spanner_nameautoscale-test に設定します。これは、ラボのセットアップ時に作成された Spanner インスタンスの名前です。
export TF_VAR_spanner_name=autoscale-test

これにより、Terraform は autoscale-test という名前の Cloud Spanner のオートスケーラーを構成し、Cloud Spanner インスタンスの IAM を更新します。この Cloud Spanner インスタンスは、ラボのセットアップ時に作成されています。

既存のインスタンスの名前を指定する場合は、通常、Cloud Spanner のデプロイメントがすでに存在する本番環境のデプロイで行うことになります。

  1. Terraform のプロジェクト別のディレクトリに移動して初期化します。
cd ${AUTOSCALER_DIR} terraform init
  1. 既存の App Engine アプリケーションを Terraform の状態にインポートします。
terraform import module.scheduler.google_app_engine_application.app ${PROJECT_ID}
  1. オートスケーラー インフラストラクチャを作成します。
terraform apply -parallelism=2
  1. Terraform が作成しようとしているリソースを確認した後、プロンプトに応答して「yes」と入力します。
: 権限に関する問題が発生した場合は、1 分待ってから、Cloud Shell で terraform apply -parallelism=2 コマンドを再実行します。 注: Cloud Shell で「443: connect: cannot assign requested address」というエラーが発生した場合は、並列処理パラメータを減らしてみてください。
  1. ナビゲーション メニュー > [Firestore] に移動し、データベース ID(default)をクリックします。

  2. 次に、[ネイティブ モードに切り替える] ボタンをクリックし、[モードを切り替え] をクリックします。

: Collections failed to load などのエラーが表示された場合は、数分待ってからページを更新してください。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 オートスケーラーをデプロイする

タスク 3. 自動スケーリングを確認する

  1. 左上の 3 本の線のアイコンをクリックしてナビゲーション メニューを開き、[すべてのプロダクトを表示] をクリックしてから、[データベース] をクリックし、最後に [Spanner] をクリックします。Spanner のメインページが読み込まれます。

  2. インスタンス名 autoscale-test をクリックし、左側の [システム分析情報] をクリックすると、さまざまな Spanner 指標が表示されます。

注: グラフにデータが入力され、自動スケーリングが観測されるまで数分待つ必要がある場合があります。オートスケーラーは 2 分ごとにインスタンスをチェックします。
  1. 下にスクロールして、CPU 使用率を確認します。負荷生成により、優先度の高い CPU 使用率に急増が発生し、次のグラフのようになります。

高優先度の CPU 使用率のグラフ

グラフには、CPU 使用率の推奨しきい値である 65% を超える 2 つの急増が示されています。

  1. 下にスクロールして、コンピューティング容量のグラフを確認します。[コンピューティング単位数] で [処理ユニット] を選択します。

コンピューティング容量のグラフ

オートスケーラーは Spanner インスタンスをモニタリングし、CPU 使用率が 65% を超えるとコンピューティング容量を追加します。この例では、毎回処理ユニットを追加しています。オートスケーラーが追加する処理ユニットまたはノードの数は、オートスケーラーが使用するスケーリング方法によって決まります。

オートスケーラーのログを確認する

  1. オートスケーラーの Cloud Run functions、Poller 関数と Scaler 関数のログを表示するには、ナビゲーション メニュー > [ロギング] に移動します。
  2. [クエリビルダー] テキスト ボックスに次のフィルタを入力します。
resource.labels.configuration_name=~"tf-.*-function"
  1. 右端にある [クエリを実行] をクリックします。

[クエリ結果] で、Autoscaler 関数からのすべてのメッセージを確認できます。Poller は 2 分間隔でのみ実行されるため、ログメッセージを受信するためにクエリの再実行が必要になる場合があります。

  1. Poller 関数からのメッセージのみを表示するには、[クエリビルダー] テキスト ボックスに次のフィルタを入力します。
resource.labels.configuration_name="tf-poller-function"
  1. 右端にある [クエリを実行] をクリックします。

[クエリ結果] には、Poller 関数からのメッセージのみが表示されます。Poller は 2 分間隔でのみ実行されるため、ログメッセージを受信するためにクエリの再実行が必要になる場合があります。

  1. 自動スケーリングがトリガーされた頃のログを確認します。

Poller 関数は、Spanner インスタンスを継続的にモニタリングします。

Poller 関数のログのリスト

この例では、Poller 関数が優先度の高い CPU、24 時間の CPU の変化、ストレージ指標を取得し、Scaler 関数にメッセージをパブリッシュします。この時点で、優先度の高い CPU は 78.32% であることに注意してください。

  1. Scaler 関数からのメッセージのみを表示するには、クエリビルダー テキスト ボックスに次のフィルタを入力します。
resource.labels.configuration_name="tf-scaler-function"
  1. 右端にある [クエリを実行] をクリックします。
  2. [クエリ結果] には、「ノード」の候補とスケーリングの決定に関連する Scaler 関数からのメッセージのみが表示されます。
: これらのフィルタや同様のフィルタを使用して、便利なログベースの指標を作成できます。たとえば、自動スケーリング イベントの頻度を追跡したり、Cloud Monitoring のグラフやアラート ポリシーで使用したりできます。

Scaler 関数は、そのメッセージを受信し、Spanner インスタンスをスケールする必要があるかどうかを判断します。

Scaler 関数のログ

この例では、線形スケーリング方法が、優先度の高い CPU の値に基づいて 300 から 400 の処理ユニットにスケールすることを提案しています。前回のスケーリング操作が 5 分以上前に行われたため、スケーラーは 400 個の処理ユニットにスケールすることを決定します。

お疲れさまでした

これで、ワークロードのニーズに応じてノードの数を自動的に増減できる Cloud Spanner 用のオートスケーラー ツールを実装できました。Cloud Run functions、Spanner、Scheduler、Cloud Monitoring の使用方法を練習しました。

マニュアルの最終更新日: 2024 年 11 月 19 日

ラボの最終テスト日: 2024 年 11 月 19 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。