レポートを作成して読み取る

リソース費用の App Optimize API レポートを作成し、レポートの生成をモニタリングして、準備ができたときに結果のデータを読み取る方法について説明します。 Google Cloud このクイックスタート ガイドでは、REST API または Python クライアント ライブラリを使用できます。

始める前に

  • このガイドの例では、分析するアクティブな リソースを含む Google Cloud プロジェクトが必要です。App Optimize API で意味のある結果を生成するには、課金データと使用状況データが必要です。新しいプロジェクトまたは空のプロジェクトに対して実行されたレポートは空になります。

    このガイドでは、PROJECT_ID として識別されるプロジェクトがデータ スコープを提供し、 レポート リソースをホストします。

    App Optimize API では、1 つのプロジェクトでレポートを作成して 別のプロジェクトのデータや 単一プロジェクトまたはフォルダレベルの境界内のアプリケーションのデータを分析できます。 複数のプロジェクトで構成される App Hub アプリケーションのレポートを生成するには、レポートを作成するために、アプリケーションに関連付けられたすべてのプロジェクトに対する必要なモニタリング権限と課金権限が必要です。

  • レポート リソースの作成と管理に使用するプロジェクトで App Optimize API が有効になっている ことを確認します。

gcloud

  • Google Cloud CLI をインストールします。

  • フェデレーション ID(連携 ID)を使用するように gcloud CLI を構成します。

    詳細については、連携 ID を使用して gcloud CLI にログインするをご覧ください。

  • gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init
  • gcloud CLI を初期化した後に更新して、必要なコンポーネントをインストールします。

    gcloud components update
    gcloud components install beta
  • 本番環境での認証の設定については、 認証ドキュメントの Google Cloud で実行されるコードのアプリケーションのデフォルト認証情報を設定する Google Cloud をご覧ください。

    Python

    1. App Optimize API 用の Python クライアント ライブラリ をインストールします。
    2. ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして 初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

      1. Google Cloud CLI をインストールします。

      2. フェデレーション ID(連携 ID)を使用するように gcloud CLI を構成します。

        詳細については、連携 ID を使用して gcloud CLI にログインするをご覧ください。

      3. ユーザー アカウントのローカル認証情報を作成します。

        gcloud auth application-default login

        認証エラーが返され、外部 ID プロバイダ (IdP)を使用している場合は、 連携 ID を使用して gcloud CLI にログインしていることを確認します。

      詳細については、 認証ドキュメントのローカル開発環境の ADC の設定 Google Cloud をご覧ください。

      本番環境での認証の設定については、 認証ドキュメントの Google Cloud で実行されるコードのアプリケーションのデフォルト認証情報を設定する Google Cloud をご覧ください。

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、 gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし フェデレーション ID を使用して gcloud CLI にログインします

    詳細については、 REST を使用して認証する 認証ドキュメントの Google Cloud をご覧ください。

    本番環境での認証の設定については、 認証ドキュメントの Google Cloud で実行されるコードのアプリケーションのデフォルト認証情報を設定する Google Cloud をご覧ください。

    必要なロール

    このクイックスタートを使用してレポートを作成して読み取るために必要な権限を取得するには、アクティブなリソースを含むプロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

    • App Optimize 管理者 (roles/appoptimize.admin)
    • 閲覧者(roles/viewer)(または billing.resourceCosts.get を付与する別のロール)

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    必要な権限は、カスタム ロールや他の事前定義 ロールから取得することもできます。

    App Optimize API に必要な権限とロールの詳細については、 IAM を使用したアクセス制御をご覧ください。

    レポートを作成する

    この例では、選択した PROJECT_ID内の合計支出のレポートを作成します。レポートでは、Compute Engine や Cloud Storage などの使用した Google Cloud プロダクトごと、 特定の SKU とロケーションごとに費用が分類されます。レポートには、過去 3 日間のデータが含まれます。

    レポート リソースを作成するには、次の手順に沿って好きな方法で操作してください。

    gcloud

    gcloud beta app-optimize reports create コマンドを使用してレポートを作成します。

    gcloud beta app-optimize reports create REPORT_ID \
      --project=PROJECT_ID \
      --location=global \
      --dimensions=location,product_display_name,project,sku \
      --metrics=cost \
      --report-filter='hour >= now - duration("72h")' \
      --scopes=project=projects/PROJECT_ID
    

    次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • REPORT_ID: 新しいレポートの一意の ID(例: my-first-report

    このコマンドは、レポート作成オペレーションが完了するまで待機してから、作成されたレポート リソースを返します。

    Python

    次の Python コードでは、AppOptimizeClient.create_report() を使用してレポートを作成します。

    from google.cloud import appoptimize_v1beta
    
    project_id = "PROJECT_ID"
    report_id = "REPORT_ID"
    
    # Create the App Optimize client and prepare a request for a new report
    client = appoptimize_v1beta.AppOptimizeClient()
    report = appoptimize_v1beta.Report(
        dimensions=['location', 'product_display_name', 'project', 'sku'],
        metrics=['cost'],
        filter='hour >= now - duration("72h")',
        scopes=[
            appoptimize_v1beta.Scope(project=f"projects/{project_id}"),
        ],
    )
    request = appoptimize_v1beta.CreateReportRequest(
        parent=f"projects/{project_id}/locations/global",
        report=report,
        report_id=report_id,
    )
    
    # Request the creation of the report and wait until the process is done
    operation = client.create_report(request=request)
    print("Waiting for report creation operation to complete...")
    response = operation.result()
    print(response)
    

    次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • REPORT_ID: 新しいレポートの一意の ID(例: my-first-report)。

    operation.result() メソッドは、レポート作成オペレーションが完了するまで待機します。

    REST

    HTTP POST リクエストを REST API の projects.locations.reports リソースパスに送信します。

    1. リクエストを送信するには、次の curl コマンドを使用します。

      curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        -d '{
          "scopes": [
            {
              "project": "projects/PROJECT_ID"
            }
          ],
          "dimensions": [
            "location",
            "product_display_name",
            "project",
            "sku"
          ],
          "metrics": [
            "cost"
          ],
          "filter": "hour >= now - duration(\"72h\")"
        }' \
        "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports?report_id=REPORT_ID"
      

      次のように置き換えます。

      • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
      • REPORT_ID: 新しいレポートの一意の ID(例: my-first-report

      API は、レポート生成プロセスを表す長時間実行オペレーション(LRO)オブジェクトを返します。以下に示すのはレスポンスの例です。

      {
        "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID",
        "metadata": {
          "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.OperationMetadata"
        },
        "done": false
      }
      

      "done": false ステータスは、レポートがまだ 生成中であることを示します。次のステップで使用するため、OPERATION_ID をメモしておきます。

    2. レポートの生成には時間がかかる場合があるため、生成プロセスが完了し、レポートのデータをダウンロードできる状態になるまで、LRO をポーリングする必要があります。

      生成プロセスのステータスを確認するには、HTTP GET リクエストをオペレーションのリソース名に送信します。

      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/operations/OPERATION_ID"
      

      レスポンスを確認します。"done"false の場合は、5 ~ 15 秒待ってから このステップを繰り返します。"done"true の場合、レポートは準備完了です。

      オペレーションが完了した場合のレスポンスの例を次に示します。

      {
        "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID",
        "metadata": {
          "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.OperationMetadata"
        },
        "done": true,
        "response": {
          "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.Report",
          "name": "projects/PROJECT_ID/locations/global/reports/REPORT_ID",
          "scopes": [
            {
              "project": "projects/PROJECT_ID"
            }
          ],
          "dimensions": [
            "location",
            "product_display_name",
            "project",
            "sku"
          ],
          "metrics": [
            "cost"
          ],
          "filter": "hour >= now - duration(\"72h\")",
          "expireTime": "2026-02-04T22:05:05Z"
        }
      }
      

    レポートデータを読み取る

    レポートデータを取得するには、次の手順に沿って好きな方法で操作してください。

    gcloud

    次の gcloud beta app-optimize reports read コマンドを使用して、レポートのデータを取得します。

    gcloud beta app-optimize reports read REPORT_ID \
      --project=PROJECT_ID \
      --location=global
    

    Python

    次の Python コードでは、AppOptimizeClient.read_report() を使用してレポートのデータを取得します。

    from google.cloud import appoptimize_v1beta
    
    project_id = "PROJECT_ID"
    report_id = "REPORT_ID"
    name = f"projects/{project_id}/locations/global/reports/{report_id}"
    
    # Create the App Optimize client and read your report's data
    client = appoptimize_v1beta.AppOptimizeClient()
    request = appoptimize_v1beta.ReadReportRequest(
            name=name,
    )
    result = client.read_report(request=request)
    
    # Display the report's data
    print(result)
    

    REST

    LRO が完了したら、REST API の :read カスタム メソッドを使用します。

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{}' \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID:read"
    

    API からのレスポンスには、レポートデータの行と列の定義が含まれます。 成功したレスポンスの例を次に示します。

    {
      "rows": [
        [
          "us-central1",
          "Compute Engine",
          "projects/PROJECT_ID",
          "6EC2-384A-47D9",
          {
            "currency_code": "USD",
            "units": "25",
            "nanos": 750000000
          }
        ],
        [
          "us-central1",
          "Cloud Storage",
          "projects/PROJECT_ID",
          "9ADA-9ADC-2FBE",
          {
            "currency_code": "USD",
            "units": "5",
            "nanos": 100000000
          }
        ],
        [
          "europe-west1",
          "Compute Engine",
          "projects/PROJECT_ID",
          "6EC2-384A-47D9",
          {
            "currency_code": "USD",
            "units": "18",
            "nanos": 500000000
          }
        ],
        [
          "us-central1",
          "Compute Engine",
          "projects/PROJECT_ID",
          "F61D-4D51-AAFC",
          {
            "currency_code": "USD",
            "units": "12",
            "nanos": 200000000
          }
        ]
      ],
      "columns": [
        {
          "name": "location",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "product_display_name",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "project",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "sku",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "cost",
          "type": "RECORD",
          "mode": "NULLABLE",
          "columns": [
            {
              "name": "currency_code",
              "type": "STRING",
              "mode": "NULLABLE"
            },
            {
              "name": "units",
              "type": "INT64",
              "mode": "NULLABLE"
            },
            {
              "name": "nanos",
              "type": "INT64",
              "mode": "NULLABLE"
            }
          ]
        }
      ],
      "next_page_token": ""
    }
    

    行数の多いレポートはページ分割されます。複数のページを処理するには、 レポートのデータを読み取るをご覧ください。

    cost フィールドの値については、 費用指標の解釈をご覧ください。 データと制限事項の詳細については、 データを理解するをご覧ください。

    クリーンアップ

    App Optimize API は、レポートが作成されてから 24 時間後に自動的に削除します。レポートをすぐに削除するには、次の手順に沿って好きな方法で操作してください。

    gcloud

    gcloud beta app-optimize reports delete コマンドを使用してレポートを削除します。

    gcloud beta app-optimize reports delete REPORT_ID \
      --project=PROJECT_ID \
      --location=global
    

    Python

    次のコードでは、AppOptimizeClient.delete_report() を使用してレポートを削除します。

    from google.cloud import appoptimize_v1beta
    
    project_id = "PROJECT_ID"
    report_id = "REPORT_ID"
    
    name = f"projects/{project_id}/locations/global/reports/{report_id}"
    client = appoptimize_v1beta.AppOptimizeClient()
    request = appoptimize_v1beta.DeleteReportRequest(name=name)
    client.delete_report(request=request)
    print(f"Deleted report: {name}")
    

    REST

    HTTP DELETE リクエストをレポートのリソース エンドポイントに送信します。

    curl -X DELETE \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID"
    

    次のステップ