Cloud Bigtable バックアップのスケジュール設定
Google Cloud Japan Team
※この投稿は米国時間 2021 年 5 月 6 日に、Google Cloud blog に投稿されたものの抄訳です。
Cloud Bigtable バックアップを使用すると、テーブルのスキーマとデータのコピーを保存しておき、後でバックアップから新しいテーブルに復元できます。このチュートリアルでは、サンプルの Cloud Bigtable スケジュール バックアップを使用して、定期的(毎日、毎週など)にバックアップを作成する方法を学習します。
このサンプルでは、Cloud Scheduler を使用して、バックアップ作成リクエストを Pub/Sub メッセージとして定期的に送信します。Pub/Sub メッセージによって Cloud Functions の関数がトリガーされ、その関数が Cloud Bigtable Java クライアント ライブラリを使用してバックアップを開始します。この関数は、Cloud Functions でサポートされているものであれば、どのようなクライアントにも適用できます。
このソリューションでは、次の Google Cloud サービスを使用します。
Cloud Scheduler。cron を用いたスケジュールでタスクをトリガーします。
Cloud Pub/Sub。Cloud Scheduler から Cloud Functions にメッセージ リクエストを渡します。
Cloud Functions。Cloud Bigtable のバックアップの作成操作を開始します。
Cloud Logging。ログベースの指標を作成します。
Cloud Monitoring。ログベースの指標の条件に基づいてアラートを作成します。


費用
このチュートリアルでは、以下に掲載したものをはじめとする Google Cloud の課金対象となるコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。
はじめに
チュートリアルを開始する前に、次のことを確認してください。
Cloud Bigtable テーブルが、同じ Google Cloud プロジェクトに存在している。必要に応じて、Cloud Bigtable のドキュメントを確認してください。
Google Cloud SDK がインストールされている。
API と IAM ロールの設定
下の図は、人のロールと API 間のアクション フローに焦点を当てています。


管理者の IAM ロール
ソリューションに必要なサービスをデプロイするための特定のロールが管理者に付与されている必要があります。
ロール | 目的 |
roles/bigtable.admin | Cloud Bigtable 管理者 |
roles/cloudfunctions.admin | Cloud Functions のデプロイと管理 |
roles/deploymentmanager.editor | モニタリング指標のデプロイ |
roles/pubsub.editor | Pub/Sub トピックの作成と管理 |
roles/cloudscheduler.admin | Cloud Scheduler でのスケジュールの設定 |
roles/appengine.appAdmin | cron サービスをデプロイするための Cloud Scheduler の使用 |
roles/monitoring.admin | 障害通知のアラート ポリシーの設定 |
roles/logging.admin | 障害をトラッキングするためのログベースのユーザー指標の追加 |
管理者には、以下の権限を持つカスタムロールも割り当てる必要があります。
appengine.applications.create - Cloud Scheduler での App Engine アプリの作成
serviceusage.services.use - Cloud Scheduler での App Engine アプリの使用
Cloud Functions のサービス アカウント
Cloud Functions が、バックアップを作成するための Cloud Bigtable API を呼び出し、Pub/Sub トピックにメッセージが届くと Cloud Functions の関数がトリガーされます。これが正常に機能するには、この関数が Pub/Sub トピックからメッセージを受信して処理できること、および Cloud Bigtable バックアップの作成権限を持っていることが必要です。これを実現するために、次の手順を踏みます。
サービス アカウント(cbt-scheduled-backups@iam.gserviceaccount.com など)を作成します。
以下の権限を持つカスタムロールを作成します。
bigtable.backups.create
bigtable.backups.delete
bigtable.backups.get
bigtable.backups.list
bigtable.backups.restore
bigtable.backups.update
bigtable.instances.get
bigtable.tables.create
bigtable.tables.readRows
3. 作成したカスタムロールと roles/pubsub.subscriber をサービス アカウントに割り当てます。これにより、Cloud Functions は、Pub/Sub トピックからのメッセージを読み取り、`create backup` リクエストを開始できるようになります。
4. ロール roles/iam.serviceAccountUser を持つサービス アカウントのメンバーとして管理者を追加します。これにより、管理者は Cloud Functions をデプロイできるようになります。
スケジュール バックアップの作成
Pub/Sub トピックを作成する
Cloud Scheduler ジョブのターゲットとして機能し、Cloud Functions の関数をトリガーする Cloud Pub/Sub トピック cloud-bigtable-scheduled-backups を作成します。たとえば次のようにします。
gcloud pubsub topics create cloud-bigtable-scheduled-backups --project <project-id>
次に、Pub/Sub UI に移動して、新規作成したトピックが表示されていることを確認します。


Cloud Functions に関数をデプロイする
Cloud Functions の関数 cbt-create-backup-function を作成してデプロイします。これは、Pub/Sub メッセージが cloud-bigtable-scheduled-backups トピックに届くと呼び出されます。スクリプト scheduled_backups.sh 内の関数 deploy-backup-function が、gcloud 関数をラップしてこれを行います。
./scripts/scheduled_backups.sh deploy-backup-function
Cloud Functions UI に移動して、この関数が表示されていることを確認します。この関数は、Pub/Sub トピック cloud-bigtable-scheduled-backups にサブスクライブします。


Cloud Scheduler を使用したスケジュール済みジョブのデプロイ
注: Cloud Scheduler を使用するには、App Engine アプリを作成する必要があります。これは、次のステップの前に明示的に行うことも、次のステップの実行中に間接的に行うこともできます。
ここでは、スケジュール バックアップ構成を Cloud Scheduler にデプロイします。この構成には、cron ジョブの時間スケジュール、Pub/Sub トピックの名前とメッセージが含まれます。これもスクリプト内の関数によってラップされます。構成設定はプロパティ ファイルで指定できます。
./scripts/scheduled_backups.sh create-schedule
Cloud Scheduler UI にこのジョブが表示されます。




2. Cloud Functions、Cloud Scheduler、Cloud Bigtable で生成されたログをフィルタするためのカスタム指標構成ファイルを作成してデプロイします。ここでは、Deployment Manager を使用してカスタム指標を作成します。サンプルのファイルは、./config/metrics.yaml にあります。カスタム指標を Cloud Logging にデプロイします。
./scripts/scheduled_backups.sh add-metrics
これを行った後、Cloud Logging の [ログベースの指標] に 2 つのユーザー定義の指標が表示されていることを確認してください。


3. そこから、ターゲット指標に対して sum や mean などの Aggregator を選択し、アラートをトリガーする条件を定義できます。たとえば以下のように選択可能です。
Condition triggers if: Any time series violates
Condition: is above
Threshold: 0
For: 1 minute


4. 先ほど作成した通知チャネルをアラート ポリシーに追加します。条件からの逸脱が起こるたびに、メール通知が送信されます。


考慮事項
Cloud Scheduler を使用するには、App Engine アプリを作成する必要があります。App Engine アプリのゾーンは、一度設定すると変更できません。Cloud Scheduler ジョブは、App Engine アプリと同じゾーンで実行する必要があります。
詳細
まずは Cloud Bigtable インスタンスを作成しましょう。Cloud Bigtable Qwiklab でお試しいただくこともできます。
こちらの GitHub のサンプルで、このスケジュール バックアップ ツールの詳細をご確認ください。
Cloud Bigtable のマネージド バックアップ機能の詳細をご覧ください。
-Cloud Bigtable 担当ソフトウェア エンジニア Tracy Cui
-Google Cloud クラウド データ エンジニア Jordan Hambleton