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

App Optimize API を使用すると、 Google Cloud の費用とリソース使用量に関するレポートを生成して、費用を最適化できます。このクイックスタートでは、Google Cloud CLI、Python クライアント ライブラリ、または REST API を使用してレポートを作成し、レポートの生成をモニタリングして、レポートのデータを読み取ります。

始める前に

  • このガイドの例では、分析するアクティブなリソースを含む 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 を使用して gcloud CLI にログインしていることを確認します。

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

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

    REST

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

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

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

    本番環境での認証の設定については、 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"
    

    次のステップ