レポートを作成する

App Optimize API は、 レポートを生成して、費用とリソース使用率のデータを分析するのに役立ちます。レポートには、単一のプロジェクトまたは単一の App Hub アプリケーションのデータを含めることができます。

まず、API リクエストを送信してレポートを作成します。このリクエストでは、データのスコープ、集計またはグループ化の方法、適用するフィルタを定義します。

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

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

始める前に

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

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

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

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

gcloud

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

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 にログインしていることを確認します。

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

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

REST

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

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

    外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります

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

本番環境での認証の設定については、 認証ドキュメントの 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

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",
          "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 件が失敗します。

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

次のステップ