レポートを作成する

App Optimize API を使用すると、レポートを生成して、費用とリソース使用率のデータを分析できます。この情報を取得するには、まず API リクエストを送信してレポートを作成します。このリクエストでは、データの範囲、集計またはグループ化の方法、適用するフィルタを定義します。

レポートの準備が整ったら、データを読み取ることができます。

使用可能なスコープ、ディメンション、指標、フィルタ、およびこれらの設定の有効な組み合わせについては、レポートについてをご覧ください。

始める前に

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

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

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

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

gcloud

Google Cloud コンソールで Cloud Shell をアクティブにします。

Cloud Shell をアクティブにする

Google Cloud コンソールの下部にある Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

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

Python

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

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

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

    3. ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。

      gcloud auth application-default login

      Cloud Shell を使用している場合は、この操作を行う必要はありません。

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

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

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

REST

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

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

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

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

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

必要なロール

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

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

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

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

レポートを作成する

次の手順では、レポートの作成を開始する方法について説明します。この例では、選択したプロジェクトの過去 1 週間の費用と平均 CPU 使用率を把握するためのレポートを作成します。レポートでは、リソースの種類、 Google Cloud リソースが属するプロダクト、リソースのロケーションなど、個々のリソースごとにこの情報が分類されます。

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

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,resource,resource_type \
  --metrics=cost,cpu_mean_utilization \
  --report-filter='hour >= now - duration("168h")' \
  --scopes=project=projects/PROJECT_ID

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

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

レポートを作成するコマンドは、オペレーションが完了するまで自動的に待機します。

Python

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

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"

# Create the App Optimize client
client = appoptimize_v1beta.AppOptimizeClient()

# Initialize the report request
report = appoptimize_v1beta.Report(
    dimensions=['location', 'product_display_name', 'project', 'resource', 'resource_type'],
    metrics=['cost', 'cpu_mean_utilization'],
    filter='hour >= now - duration("168h")',
    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,
)

# Send the request and wait for completion
operation = client.create_report(request=request)
print("Waiting for operation to complete...")
response = operation.result()
print(response)

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

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

クライアント ライブラリの operation.result() メソッドは、オペレーションが完了するまで自動的に待機します。手動ポーリング ループは必要ありません。

REST

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",
          "resource",
          "resource_type"
        ],
        "metrics": [
          "cost",
          "cpu_mean_utilization"
        ],
        "filter": "hour >= now - duration(\"168h\")"
      }' \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports?report_id=REPORT_ID"
    

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

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

    API は、長時間実行オペレーション(LRO)オブジェクトを返します。レスポンスの name フィールドをメモします。これは、オペレーションのステータスを確認するために使用します。

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

    レスポンスでは、done フィールドが false になっています。これは、レポートの生成が進行中であることを示しています。

  2. レポートの準備が整っているかどうかを確認するには、前のステップで返されたオペレーション nameGET HTTP リクエストを送信します。

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

    PROJECT_IDOPERATION_ID を LRO レスポンスの値に置き換えます。

    レスポンスを調べて、オペレーションのステータスを確認します。

    • レポートがまだ生成中の場合、レスポンスは最初の LRO レスポンスと似たものになり、donefalse に設定されます。5 ~ 15 秒などの短い期間待ってから、この手順を繰り返して再度ポーリングする必要があります。
    • レポートの生成が完了すると、レスポンスに "done": true が含まれ、response フィールドにレポート リソースが含まれます。

        {
          "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",
            "dimensions": [
              "location",
              "product_display_name",
              "project",
              "resource",
              "resource_type"
            ],
            "scopes": [
              {
                "project": "projects/PROJECT_ID"
              }
            ],
            "filter": "hour >= now - duration(\"168h\")",
            "expireTime": "2026-02-05T18:50:25.273833857Z",
            "metrics": [
              "cost",
              "cpu_mean_utilization"
            ]
          }
        }
        ```
      
    • LRO でエラーが発生した場合、レスポンスには response フィールドではなく error フィールドが含まれ、失敗の詳細が提供されます。

オペレーションが正常に完了すると、レポートのデータを読み取ることができます。

同時実行に関する制限事項

レポートを作成すると、App Optimize API は、レポートの各 target_project の費用データを Cloud Billing から取得し、使用率データを Cloud Monitoring から取得します。

  • 単一のプロジェクトを対象とするレポートの場合、そのプロジェクトがターゲット プロジェクトになります。
  • App Hub アプリケーションの場合、アプリケーション内のサービスまたはワークロードを含む各プロジェクトがターゲット プロジェクトになります。

App Optimize API は、Concurrent CreateReport operations という同時実行割り当てを適用します。これにより、ターゲット プロジェクトごとにレポートデータの同時リクエストを最大 10 件まで許可します。レポートを作成すると、App Optimize API はレポート内のターゲット プロジェクトの数を計算し、レポート作成の LRO が完了するまで必要な数の割り当てユニットをロックします。

数分以内に完了するレポートは、システムレベルの測定タイミングにより、同時実行数の上限にカウントされない場合があります。

現在の API アクティビティを表示し、これらの上限を管理するには、 Google Cloud コンソールの [割り当てとシステム上限] ページに移動します。

複数のレポートを同時に作成する場合は、チームがレポートを実行するタイミングと App Hub アプリケーションの構造を考慮してください。

  • 複数のチームが同じターゲット プロジェクトを含むレポートを実行する場合は、各チームのレポート作成の開始時間をずらすことができます。
  • アプリケーションには複数のプロジェクトのリソースを含めることができ、複数のアプリケーションが単一のプロジェクトのリソースを使用する場合があります。このようなタイプのアプリケーションでレポートを同時に作成すると、ターゲット プロジェクトに複数のリクエストが送信されます。

たとえば、クリエイティブ アーツを学ぶためのアプリケーション スイートを標準版とプレミアム版で提供しているチームを考えてみましょう。次の表の最初の列に、アプリケーションのリストを示します。残りの列では、チェックマーク アイコン()は、プロジェクトにリストされたアプリケーションのサービスまたはワークロードが含まれていることを示します。

アプリケーション common-project dance-project draw-project animate-project music-project
dance-app
draw-app
music-app
animate-app
choreograph-app
storyteller-app
dance-premium-app
draw-premium-app
music-premium-app
animate-premium-app
choreograph-premium-app
storyteller-premium-app

リストに表示されているすべてのアプリケーションの費用と使用率のレポートを同時に作成すると、App Optimize API は一部のプロジェクトで同時実行数の上限を複数使用します。特に、共有プロジェクト common-project は、費用と使用率のデータに関するリクエストを 12 件受け取ります。この数は同時実行の上限を超えているため、2 つのデータ リクエストが失敗します。

この問題を回避するには、まずアプリケーションの標準バージョンのレポートを実行してから、プレミアム バージョンのレポートを実行します。

次のステップ