コンテンツに移動
データ分析

BigQuery Reservations の効果的な活用

2020年6月5日
Google Cloud Japan Team

※この投稿は米国時間 2020 年 5 月 27 日に、Google Cloud blog に投稿されたものの抄訳です。

編集者注: これは BigQuery の費用の効果的な管理に関するシリーズの一部です。BigQuery の料金モデルの選択スロットサイズの適切な設定方法に関するシリーズの他の投稿もご覧ください。

BigQuery には、費用を抑え支出を管理して、データ ウェアハウス リソースを最大限に活用できるさまざまな機能が組み込まれています。このブログ投稿では、費用とワークロードを管理するための BigQuery のプラットフォーム、BigQuery Reservations について詳しく説明します。

BigQuery Reservations では次のことが可能です。

  • BigQuery スロットを素早く購入してデプロイする

  • 組織のさまざまな部署にスロットを割り当てる

  • 組織の料金モデルを処理バイト数から定額料金に切り替える

定額料金モデルのお客様は、スロット単位で測定されたコンピューティング容量を購入し、この容量を使用して任意の数のクエリを実行できます。定額料金モデルは、処理バイト数に基づく料金モデルの優れた代替手段で、費用の予測可能性と管理性が改善されます。スロットはコンピューティング ノードと考えてください。スロットが多いほど、クエリに対する処理能力が高くなります。

Reservations を使ってみる

BigQuery Reservations は低リスクで非常に簡単に使用できます。1 秒ごとの課金で、わずか 60 秒後にキャンセルできる Flex Slots を導入しました。コーヒー 1 杯分の料金でお試しいただけます。ご利用方法は以下のとおりです。

1. BigQuery UI に移動して、[予約] をクリックします。そこから [スロットの購入] を選択します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_BQ_buy_slots.max-800x800.jpg

2. 購入フローで、コミットメントのタイプとして [Flex Slots] を選択し、サイズで [500] を選択します。

これまでにスロットを購入したことがない場合は、組織のデフォルトを定額に設定するよう求められます。すべてのプロジェクトで、購入したスロットの使用を自動的に開始する場合は、これを有効にしてください。

3. 購入を確定します。数秒後に、容量が確定されデプロイされます。

4. [Assignments] タブに移動し、プロジェクトのいずれか、または組織全体を「デフォルト」の予約に割り当てます。これにより、BigQuery は、プロジェクトが処理バイト数ではなくスロット料金モデルに基づいていることを認識します。必要な操作は以上です。

テストが完了したら、すべての割り当てとコミットメントを削除します。15 分のテストでかかる費用はわずか $5 です。

BigQuery Reservations を使用する

Reservations を設定すると、BigQuery によって自動的に使用が効率化されます。

組織でアイドル状態になっているプロビジョニング済みのスロットはいずれも、その組織内のどこででも使用できます。アイドル状態の容量や余裕のある容量は、すべていつでも使用できるのです。つまり、組織の規模にかかわらず、無駄なコンピューティング サイロを作成することなく、費用のスケール メリットが得られます。

スロットを追加購入するだけで、容量を増やすことができます。購入が確認されてスロットがデプロイされると、BigQuery は処理中のすべてのクエリに対してこの追加容量を自動的に使用し始めます。作業を一時停止したり新しいクエリの開始を待ったりする必要はありません。すべてすばやくシームレスに行われます。

同様に、既存のスロット契約をキャンセルするだけで、容量を減らすことができます。そのとき容量を使用していた場合、BigQuery はその作業を一時停止します。これによりクエリの失敗を回避でき、最悪でも速度が低下するだけで済みます。

BigQuery スロットとは何か、スロットがどのように分散され機能するかについて詳しくは、スロットに関するドキュメントをご覧ください。  

ワークロード管理に Reservations を使用する

BigQuery Reservations は、何よりもまずシンプルにすることを目的に構築されています。シンプルでありながら、複雑な組織が BigQuery オペレーション全体を 1 か所で管理する、高度な構成が可能なプラットフォームです。

組織管理者が部門やワークロードを分離して区分化したがるのは一般的なことです。たとえば、「事業」部門、「IT」部門、「マーケティング」部門があり、各部門に次のような独自の BigQuery リソースセットを用意するとします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_Using_Reservations.max-1000x1000.jpg

上記の例では、Reservations を次のように設定できます。

  • 1,000 スロットのコミットメントを購入します。これは、組織の処理容量の合計です。

  • それぞれの部門用に予約を作成し、「事業」用に 500 スロット、「IT」用に 300 スロット、「マーケティング」用に 200 スロットを割り当てます。

  • Google Cloud フォルダ「business_folder」を「事業」の予約と、事業部門が使用している他のすべての Google Cloud プロジェクトに割り当てます。

  • Google Cloud フォルダ「IT」を「IT」の予約と、プロジェクト「it_project」に割り当てます。

  • マーケティング チームが Looker ダッシュボードに使用する Google Cloud プロジェクトを「dashboard_proj」に割り当てます。

前述したように、アイドル状態の容量は組織全体でシームレスに共有できます。上記の例では、現時点で「事業」用の予約に 20 のアイドル スロットがある場合、このスロットを「IT」と「マーケティング」で自動的に利用できます。「事業」用の予約でスロットの返却が必要になるとすぐ、「IT」と「マーケティング」からプリエンプティブされます。プリエンプションではエラーを発生させることなく、クエリをシームレスに減速、加速します。

また、Reservations を使用すると組織全体を一元管理できるため、「シャドー IT」や支出が無制限になるなどのリスクを軽減できます。組織レベルで bigquery.resourceAdmin、bigquery.admin、または owner のロールが設定されているユーザーのみ、どのプロジェクトとフォルダをどの予約に割り当てるかを指示できます。

各部門への費用の帰属が重要になることもあるでしょう。その場合は、INFORMATION_SCHEMA ジョブテーブルで reservation_id 項目をクエリして消費されたスロットを集計し、合計請求額のうちの各チームに帰属する分をレポートできます。これをさらに簡単にするため、今後数週間のうちに、プロジェクトレベルの費用帰属は Google Cloud Billing コンソールに表示されるようになります。

Reservations の用途

特定のユースケースで Reservations を設定する方法の例をいくつか見てみましょう。

開発、テスト、QA ワークロードには、少量のリソースへのアクセスのみを許可し、アイドル状態の容量を使わせたくない場合があるとします。このようなケースでは、50 スロットの予約「dev」を作成し、ignore_idle_slots を true に設定します。こうすると、この予約は、必要な 50 スロットを超えてもシステム内のアイドル容量を使用しません。

バッチ処理のワークロードを、システム全体に余裕があるときにのみ実行する場合は、スロットが 0 の予約「batch」を作成できます。この予約のクエリはすべて、余裕容量を待機するキューに入れられ、容量に余裕ができた場合にのみ実行されます。

Looker ダッシュボードの生成に使用する予約があり、毎週月曜日の午前 9 時から 11 時の間、このダッシュボードの需要が通常より高まることがわかっているとします。この予約のサイズを午前 9 時に増やして午前 11 時に元に戻すには、cron またはその他のスケジューリング ツールを介してジョブのスケジュールを設定します。

Google Cloud フォルダを使った高度な構成

Google Cloud は組織とフォルダをサポートします。これは、組織を Google Cloud Identity and Access Management(Cloud IAM)にマッピングする高度な方法です。明示的に指定されていない限り、子フォルダは親フォルダのプロパティを取得し、親フォルダへのアクセス権を持つユーザーはすべての子フォルダとそのリソースへのアクセス権を自動的に取得します。

BigQuery Reservations はフォルダと組み合わせて使用することで、複雑な組織を管理できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_Using_Google_Cloud_folders.max-1100x1100.jpg

上記のシナリオを考えてみましょう。

  • フォルダ C は組織内の特定の部門用に設定されています。

  • 組織管理者は組織全体に対する IAM 認証情報を持っています。

  • フォルダ管理者はフォルダ Cに対する(したがってフォルダ E に対しても)IAM 認証情報を持っています。

  • フォルダ管理者は自分の部門の BigQuery の費用とリソースを自律的に管理したいと考えています。

  • 組織管理者は、セキュリティと予算への準拠を監督する中央 IT 部門です。

  • フォルダ D は、組織管理者が管理する、組織内の別の部門を表しています。

この組織向けに BigQuery を構成する方法は次のとおりです。

  • フォルダ管理者はフォルダ C に BigQuery Reservations を設定します

  • フォルダ管理者はフォルダ C と、自身が所有するすべてのプロジェクトを予約に割り当てます

  • 組織管理者は、フォルダ D のプロジェクトと、組織に関連付けられているプロジェクトに BigQuery Reservations を設定します

  • 組織管理者はフォルダ D と、自身が所有するすべてのプロジェクトをフォルダ D の予約に割り当てます

  • 組織管理者は組織全体を組織レベルで予約に割り当てます

https://storage.googleapis.com/gweb-cloudblog-publish/images/4_configure_BigQuery.max-1100x1100.jpg

上記の設定により、フォルダ管理者はフォルダ C とフォルダ E の BigQuery を自己管理でき、組織管理者はフォルダ C とフォルダ D を含む組織内のすべてのフォルダの BigQuery を管理できるようになります。この構成での唯一の注意点は、アイドル スロットがフォルダ C、フォルダ D、組織ノードの予約間で共有されないことです。

BigQuery Reservations を使用すると、BigQuery の費用とワークロードを簡単に管理できます。BigQuery Reservations は、効率を最大限に高め、無駄を最小限に抑えながら、特に複雑な組織の目標を達成するための機能と柔軟性を提供します。BigQuery Reservations について詳しくは、こちらのドキュメントをご覧ください。

- By Google BigQuery プロダクト マネージャー Tino Tereshko

投稿先