BigQuery への推奨事項のエクスポート

概要

BigQuery へのエクスポートでは、組織に対する推奨事項の日次スナップショットを表示できます。これは、BigQuery Data Transfer Service を使用して行います。現在 BigQuery Export に含まれている Recommender を確認するには、こちらのドキュメントをご覧ください。

始める前に

推奨事項用のデータ転送を作成する前に、次の手順を実施します。

  • データ転送を管理するために BigQuery Data Transfer Service 権限を付与します。BigQuery ウェブ UI を使用して転送を作成する場合は、ブラウザで console.cloud.google.com からのポップアップを許可して権限を表示できるようにする必要があります。詳細については、BigQuery Data Transfer Service の有効化をご覧ください。
  • データを保存する BigQuery データセットを作成します。
    • データ転送では、データセットを作成するリージョンと同じリージョンが使用されます。データセットと転送が作成された後は、このロケーションは変更できません。
    • データセットには、世界中のあらゆるリージョンからの分析情報と推奨事項が含まれます。したがって、このオペレーションでは、処理中にそれらすべてのデータをグローバル リージョンに集約することになります。データ レジデンシーに関する懸念がある場合は、Google Cloud カスタマーケアをご覧ください。
    • データセットのロケーションが新しく開始された場合、最初のエクスポート データが利用可能になるまでに時間がかかることがあります。

料金

BigQuery への推奨事項のエクスポートは、Recommender をご利用のすべてのお客様が Recommender の料金階層に基づいて行うことができます。

必要な権限

データ転送を設定する際は、データ転送を作成するプロジェクト レベルで次の権限が必要です。

  • bigquery.transfers.update - 転送を作成できます。
  • bigquery.datasets.update - ターゲット データセットに対するアクションを更新できます。
  • resourcemanager.projects.update - エクスポート データを保存するプロジェクトを選択できます
  • pubsub.topics.list - エクスポートに関する通知を受け取るために Pub/Sub トピックを選択できます。

組織レベルで次の権限が必要です。この組織は、エクスポートが設定されている組織に対応しています。

  • recommender.resources.export - 推奨事項を BigQuery にエクスポートできます。

費用削減の推奨事項で交渉価格をエクスポートするには、次の権限が必要です。

  • billing.resourceCosts.get at project level - プロジェクト レベルの推奨事項で交渉価格をエクスポートできます。
  • billing.accounts.getSpendingInformation at billing account level - 請求先アカウント レベルの推奨事項で交渉価格をエクスポートできます。

これらの権限がない場合、費用削減の推奨事項は交渉価格ではなく標準価格でエクスポートされます。

権限を付与する

次のロールは、データ転送を作成するプロジェクトに付与する必要があります。

    ターゲット データセットに対して転送と更新のアクションを作成するには、次のロールを付与する必要があります。

  • BigQuery 管理者ロール - roles/bigquery.admin
  • エクスポート データの保存と、通知を受け取る Pub/Sub トピックの選択のためのプロジェクトを選択する権限を含むロールは複数あります。これらの権限をどちらも使用できるようにするには、次のロールを付与します。

  • プロジェクト オーナーロール - roles/owner
  • 費用削減のプロジェクト レベルの推奨事項で交渉価格をエクスポートするには、billing.resourceCosts.get 権限を含むロールが複数あり、次のいずれかを付与できます。

  • プロジェクト オーナーロール - roles/owner
  • プロジェクト閲覧者ロール - roles/viewer
  • プロジェクト編集者ロール - roles/editor
  • 費用削減の請求先アカウント レベルの推奨事項で交渉価格をエクスポートするには、billing.accounts.getSpendingInformation 権限を含むロールが複数あり、次のいずれかを付与できます。

  • 請求先アカウント管理者ロール - roles/billing.admin
  • 請求先アカウント費用管理者ロール - roles/billing.costsManager
  • 請求先アカウント閲覧者ロール - roles/billing.viewer

組織レベルで次のロールを付与する必要があります。

  • Google Cloud Console での推奨事項エクスポータroles/recommender.exporter)ロール。

必要な権限を含むカスタムロールを作成することもできます。

推奨事項用のデータ転送を作成する

  1. Google Cloud コンソールにログインします。

    Google Cloud コンソールにログイン

  2. ホーム画面で、[推奨] タブをクリックします。

  3. [エクスポート] をクリックして BigQuery エクスポート フォームを表示します。

  4. 推奨事項データを保存する宛先プロジェクトを選択し、[次へ] をクリックします。

  5. [API を有効にする] をクリックして、エクスポート用の BigQuery API を有効にします。完了には、数秒かかることがあります。設定が完了したら、[続行] をクリックします。

  6. [Configure Transfer] フォームに以下の詳細情報を入力します。

    • [転送構成名] セクションの [表示名] に、転送名を入力します。転送名には、後で修正が必要になった場合に簡単に識別できる任意の名前を使用できます。

    • [スケジュール オプション] セクションで、スケジュールはデフォルト値([すぐに開始可能])のままにするか、[設定した時間に開始] をクリックします。

      • [繰り返しの頻度] で、転送を実行する頻度のオプションを選択します。

        • 毎日(デフォルト)
        • 毎週
        • 毎月
        • カスタム
        • オンデマンド
      • [開始日と実行時間] に、転送を開始する日付と時刻を入力します。[すぐに開始可能] を選択した場合、このオプションは無効になります。

    • [転送先の設定] セクションで、宛先データセットには、データを保存するために作成した [データセット ID] を選択します。

    • [データソースの詳細] セクションで、次の操作を行います。

      • organization_id のデフォルト値は、現在推奨事項を表示している組織です。推奨事項を別の組織にエクスポートする場合は、組織ビューアのコンソールの上部で変更できます。

    • (省略可)[通知オプション] セクションで、次の操作を行います。

      • 切り替えボタンをクリックしてメール通知を有効にします。このオプションを有効にすると、転送の実行が失敗した場合、転送管理者にメール通知が送信されます。
      • [Pub/Sub トピックを選択してください] で、トピック名を選択するか、[トピックを作成する] をクリックします。このオプションで、Pub/Sub の転送実行通知を構成します。

  7. [作成] をクリックして転送を作成します。

  8. 同意のポップアップで [Allow] をクリックします。

  9. 転送が作成されると、おすすめハブにリダイレクトされます。リンクをクリックして転送構成の詳細を表示できます。また、次の手順でも転送にアクセスできます。

    • Google Cloud コンソールの [BigQuery] ページに移動します。

      [BigQuery] ページに移動

    • [データ転送] をクリックします。利用可能なすべてのデータ転送を表示できます。

転送の実行履歴を表示する

転送の実行履歴を表示するには、次の手順に沿って操作します。

  1. Google Cloud コンソールの [BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [データ転送] をクリックします。利用可能なすべてのデータ転送を表示できます。

  3. リスト内の該当する転送をクリックします。

  4. [実行履歴] タブに表示されている転送実行のリストで、詳細を表示する転送を選択します。

  5. 選択した個別の転送実行に対する [実行の詳細] パネルが表示されます。実行の詳細に表示される可能性がある情報の一部を次に示します。

    • ソースデータが利用できないため、転送を延期しました。
    • テーブルにエクスポートされた行数を示すジョブ。
    • データソースに対する権限がありません。権限を付与し、後でバックフィルをスケジュール設定する必要があります。

データがエクスポートされるタイミング

データ転送を作成した場合は、最初のエクスポートが行われるまで 2 日かかります。最初のエクスポート後、設定時にリクエストした頻度でエクスポート ジョブが実行されます。次の条件が適用されます。

  • 特定の日(D)のエクスポート ジョブは、1 日の終わりのデータを BigQuery データセットにエクスポートします。このデータセットは通常、翌日の終わり(D+1)までに終了します。エクスポート ジョブは PST タイムゾーンで動作するため、他のタイムゾーンではさらに遅延が生じる可能性があります。

  • 毎日のエクスポート ジョブは、エクスポート対象のデータすべてが利用可能になるまで実行されません。その結果、データセットが更新される日時が変動したり、場合によっては遅延が発生したりする可能性があります。そのため、特定の日付のテーブルに対して強い制約や時間的制約などを設けるのではなく、利用可能な最新のデータ スナップショットを使用することをおすすめします。

書き出しに関する一般的なステータス メッセージ

BigQuery への推奨事項のエクスポートで表示される一般的なステータス メッセージについて説明します。

ユーザーに必要な権限がない

ユーザーに必要な権限 recommender.resources.export がない場合、次のメッセージが表示されます。次のメッセージが表示されます。

User does not have required permission "recommender.resources.export". Please, obtain the required permissions for the datasource and try again by triggering a backfill for this date

この問題を解決するには、エクスポートを設定した組織の組織レベルでエクスポートを設定する user/service account に IAM ロール roles/recommender.exporter を付与します。これは、以下の gcloud コマンドで指定できます。

  • ユーザーの場合:

    gcloud organizations add-iam-policy-binding *<organization_id>* --member='user:*<user_name>*' --role='roles/recommender.exporter'
    
  • サービス アカウントの場合:

    gcloud organizations add-iam-policy-binding *<organization_id>* --member='serviceAccount:*<service_acct_name>*' --role='roles/recommender.exporter'
    

ソースデータを利用できないため、転送が延期された

ソースデータが利用できないために転送スケジュールが再設定されると、次のメッセージが表示されます。これはエラーではありません。その日のエクスポート パイプラインがまだ完了していないことを意味します。転送は新しくスケジュールされた時刻に再実行され、エクスポート パイプラインが完了すると正常に終了します。次のメッセージが表示されます。

Transfer deferred due to source data not being available

ソースデータが見つからない

F1toPlacer パイプラインが完了し、エクスポートが設定された組織に関する推奨事項または分析情報が見つからなかった場合は、次のメッセージが表示されます。次のメッセージが表示されます。

Source data not found for 'recommendations_export$<date>'insights_export$<date>

このメッセージは次の理由で表示されます。

  • ユーザーが書き出しを設定してから 2 日以内である。カスタマー ガイドに、エクスポートが利用可能になるまでに 1 日程度時間がかかることが記載されています。
  • 特定の日に関して利用できる推奨事項や分析情報はありません。実際にない場合もありますが、その日に推奨事項や分析情報が利用可能になる前にパイプラインが実行されていた可能性もあります。

転送のテーブルを表示する

BigQuery に推奨事項をエクスポートした場合、データセットには、日付でパーティション分割された 2 つのテーブルが格納されています。

  • recommendations_export
  • insight_export

テーブルとスキーマの詳細については、テーブルの作成と使用および、スキーマの指定をご覧ください。

データ転送のテーブルを表示するには、次のようにします。

  1. Google Cloud コンソールの [BigQuery] ページに移動します。[BigQuery] ページに移動

  2. [データ転送] をクリックします。利用可能なすべてのデータ転送を表示できます。

  3. リスト内の該当する転送をクリックします。

  4. [構成] タブをクリックして、データセットをクリックします。

  5. [エクスプローラ] パネルでプロジェクトを展開し、データセットを選択します。[詳細] パネルに説明と詳細が表示されます。データセットのテーブルは、[エクスプローラ] パネルにデータセット名とともに表示されます。

バックフィルのスケジュールを設定する

過去の日付の推奨事項(組織がエクスポートを有効にした日付より後の日付)は、バックフィルをスケジュールすることでエクスポートできます。バックフィルをスケジュールするには、次のようにします。

  1. Google Cloud コンソールの [BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [データ転送] をクリックします。

  3. [転送] ページで、リストから該当する転送をクリックします。

    1. [バックフィルのスケジュール構成] をクリックします。

    2. [バックフィルのスケジュール構成] ダイアログで、[開始日] と [終了日] を選択します。

転送の操作の詳細については、転送の操作をご覧ください。

クエリの例

次のサンプルクエリを使用すると、エクスポートしたデータを分析できます。

推奨事項の費用削減額を表示する(推奨期間は日数で表示)

SELECT name, recommender, target_resources,
  case primary_impact.cost_projection.cost.units is null
       when true then round(primary_impact.cost_projection.cost.nanos * power(10,-9),2)
       else
       round( primary_impact.cost_projection.cost.units +
       (primary_impact.cost_projection.cost.nanos * power(10,-9)), 2)
   end
   as dollar_amt,
   primary_impact.cost_projection.duration.seconds/(60*60*24) as duration_in_days
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and primary_impact.category = "COST"

未使用の IAM ロールの一覧を表示する

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and recommender = "google.iam.policy.Recommender"
and recommender_subtype = "REMOVE_ROLE"

より小さいロールに置き換える必要がある、付与済みロールのリストを表示する

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and recommender = "google.iam.policy.Recommender"
and recommender_subtype = "REPLACE_ROLE"

推奨事項のインサイトを表示する

SELECT recommendations.name as recommendation_name,
insights.name as insight_name,
recommendations.cloud_entity_id,
recommendations.cloud_entity_type,
recommendations.recommender,
recommendations.recommender_subtype,
recommendations.description,
recommendations.target_resources,
recommendations.recommendation_details,
recommendations.state,
recommendations.last_refresh_time as recommendation_last_refresh_time,
insights.insight_type,
insights.insight_subtype,
insights.category,
insights.description,
insights.insight_details,
insights.state,
insights.last_refresh_time as insight_last_refresh_time
FROM `<project>.<dataset>.recommendations_export` as recommendations,
   `<project>.<dataset>.insights_export` as insights
WHERE DATE(recommendations._PARTITIONTIME) = "<date>"
and DATE(insights._PARTITIONTIME) = "<date>"
and insights.name in unnest(recommendations.associated_insights)

特定のフォルダに属するプロジェクトの推奨事項を表示する

このクエリは、プロジェクトから最大 5 つのレベルの親フォルダを返します。

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and "<folder_id>" in unnest(ancestors.folder_ids)

これまでにエクスポートした最新の利用可能日に関する推奨事項を表示する

DECLARE max_date TIMESTAMP;

SET max_date = (
  SELECT MAX(_PARTITIONTIME) FROM
  `<project>.<dataset>.recommendations_export`
  );

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE _PARTITIONTIME = max_date

スプレッドシートを使用して BigQuery データを調査する

BigQuery でクエリを実行する代わりに、新しい BigQuery データコネクタであるコネクテッド シートを使用して、スプレッドシートの数十億行にのぼる BigQuery データにアクセスし、分析、可視化、共有できます。詳しくは、Google スプレッドシートで BigQuery データを使ってみるをご覧ください。

BigQuery コマンドラインと REST API を使用したエクスポートの設定

  • 必要な権限を取得します

    必要な Identity and Access Management 権限は、Google Cloud Console またはコマンドラインで取得できます。

    たとえば、コマンドラインを使用してサービス アカウントの組織レベルの recommender.resources.export 権限を取得するには、次のようにします。

    gcloud organizations add-iam-policy-binding *<organization_id>* --member=serviceAccount:*<service_acct_name>*' --role='roles/recommender.exporter'

  • データセットを作成して BigQuery API を有効にする

  • BigQuery データソースにプロジェクトを登録する

    Datasource to use: 6063d10f-0000-2c12-a706-f403045e6250

  • エクスポートを作成します。

    • (REST API)を使用する

    • BigQuery コマンドラインを使用する:

    bq mk \
    --transfer_config \
    --project_id=project_id \
    --target_dataset=dataset_id \
    --display_name=name \
    --params='parameters' \
    --data_source=data_source \
    --service_account_name=service_account_name
    

    ここで

    • project_id はプロジェクト ID です。
    • dataset は、転送構成のターゲット データセット ID です。
    • name は、転送構成の表示名です。転送名には、後で修正が必要になった場合に簡単に識別できる任意の名前を使用できます。
    • parameters には、作成される転送構成のパラメータを JSON 形式で指定します。推奨事項と分析情報の BigQuery Export では、推奨事項と分析情報をエクスポートする organization_id を指定する必要があります。パラメータの形式: '{"organization_id":"<org id>"}'
    • data_source 使用するデータソース: '6063d10f-0000-2c12-a706-f403045e6250'
    • service_account_name は、エクスポートの認証に使用されるサービス アカウント名です。サービス アカウントは、転送の作成に使用した project_id が所有している必要があります。また、上記の必要な権限がすべて付与されている必要があります。
  • UI または BigQuery コマンドラインを使用して既存のエクスポートを管理する:

  • 注 - 今後エクスポートの構成を更新するかどうかに関係なく、書き出しはアカウントを設定したユーザーとして実行されます。たとえば、サービス アカウントを使用してエクスポートが設定され、その後ユーザーが BigQuery Data Transfer Service UI を介してエクスポート構成を更新した場合、エクスポートは引き続きサービス アカウントとして実行されます。この場合の recommender.resources.export の権限のチェックは、エクスポートが実行されるたびにサービス アカウントに対して行われます。