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

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

始める前に

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

    このプロジェクトはユーザーが選択し、PROJECT_ID で識別されます。わかりやすくするため、このガイドでは、プロジェクトがレポート リソースをホストし、データスコープを提供します。

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

  2. レポート リソースの作成と管理に使用するプロジェクトで、App Optimize API が有効になっていることを確認します。このドキュメントの例では、これは PROJECT_ID で識別されるプロジェクトです。
  3. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  4. Google Cloud CLI をインストールします。

  5. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

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

    gcloud init
  7. このガイドを完了するために必要な権限があることを確認します

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

  9. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

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

    gcloud init
  11. このガイドを完了するために必要な権限があることを確認します

必要なロール

このクイックスタートを使用してレポートを作成して読み取るために必要な権限を取得するには、アクティブなリソースを含むプロジェクトに対する次の 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 日間のデータが表示されます。

レポート リソースを作成するには、REST API の projects.locations.reports リソースパスに HTTP POST リクエストを送信します。

レポートを作成する手順は次のとおりです。

  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"
      }
    }
    

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

レポートデータを取得するには、LRO の完了後に :read カスタム メソッドを 1 回使用します。

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"

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

{
  "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 時間後にレポートを自動的に削除します。レポートをすぐに削除するには、レポートのリソース エンドポイントに 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"

次のステップ