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

概要

BigQuery へのエクスポートでは、組織に対する推奨事項の日次スナップショットを表示できます。これは、BigQuery Data Transfer Service を使用して行います。エクスポートできるインサイトと推奨事項は次のとおりです。

名前 Recommender ID
IAM recommender google.iam.policy.Recommender
VM マシンタイプ Recommender google.compute.instance.MachineTypeRecommender
マネージド インスタンス グループのマシンタイプ Recommender google.compute.instanceGroupManager.MachineTypeRecommender
アイドル状態の PD Recommender google.compute.disk.IdleResourceRecommender
アイドル状態の VM Recommender google.compute.instance.IdleResourceRecommender
アイドル状態のイメージ Recommender google.compute.image.IdleResourceRecommender
アイドル状態の IP アドレス Recommender google.compute.address.IdleResourceRecommender
Cloud SQL オーバープロビジョニングされたインスタンス Recommender google.cloudsql.instance.OverprovisionedRecommender
Cloud SQL アイドル状態のインスタンス Recommender google.cloudsql.instance.IdleRecommender

Cloud SQL パフォーマンス Recommender

  • MySQL: 多数のテーブルを管理する
  • MySQL: テーブルのオープン キャッシュ サイズを増やす
  • PostgreSQL: トランザクション ID のラップアラウンドを防ぐ
  • google.cloudsql.instance.PerformanceRecommender
    Cloud SQL のアンダープロビジョニング Recommender google.cloudsql.instance.UnderprovisionedRecommender
    放置されたプロジェクト Recommender google.resourcemanager.projectUtilization.Recommender
    サービス上限(割り当て)Recommender google.resourcemanager.serviceLimit.Recommender
    Cloud Run サービス ID Recommender google.run.service.IdentityRecommender
    GKE 診断 Recommender google.container.DiagnosisRecommender
    Cloud Billing の費用に関する分析情報 google.billing.CostInsight
    ファイアウォール インサイト google.compute.firewall.Insight
    ネットワーク アナライザの分析情報
    • google.networkanalyzer.vpcnetwork.ipAddressInsight
    • google.networkanalyzer.vpcnetwork.connectivityInsight
    • google.networkanalyzer.networkservices.loadBalancerInsight
    • google.networkanalyzer.container.ipAddressInsight
    • google.networkanalyzer.container.connectivityInsight
    • google.networkanalyzer.hybridconnectivity.dynamicRouteInsight
    • google.networkanalyzer.managedservices.cloudSqlInsight

    始める前に

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

    • データ転送を管理するために 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)のエクスポート ジョブは、前日(D-1)のデータを BigQuery データセットにエクスポートします。ただし、これは PST(太平洋標準時)タイムゾーンの場合で、他のタイムゾーンではこれより時間がかかる場合があります。

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

    • また、エクスポート データがまだ利用可能でないために転送が保留中であることを示す、次のステータス メッセージが表示されることもあります。エクスポート ジョブは、ソースデータが使用可能になった後に実行されます。

      Transfer deferred due to source data not being available

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

    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 の権限のチェックは、エクスポートが実行されるたびにサービス アカウントに対して行われます。