Cómo crear y leer un informe

Obtén información para crear un informe de la API de App Optimize sobre tu Google Cloudinversión, supervisar la generación del informe y leer los datos resultantes cuando estén listos para ti. En esta guía de inicio rápido, puedes usar la API de REST o la biblioteca cliente de Python.

Antes de comenzar

  • Los ejemplos de esta guía requieren un Google Cloud proyecto con recursos activos para analizar. La API de App Optimize necesita datos de facturación y uso para producir resultados significativos. Los informes que se ejecuten en proyectos nuevos o vacíos estarán vacíos.

    En esta guía, el proyecto identificado como PROJECT_ID proporciona el alcance de los datos y aloja el recurso del informe.

    La API de App Optimize admite la creación de informes en un proyecto que analizan datos de otro proyecto o de aplicaciones en límites de un solo proyecto o a nivel de la carpeta. Para generar un informe sobre una aplicación de App Hub, que puede estar compuesta por varios proyectos, debes tener los permisos de supervisión y facturación necesarios en todos los proyectos asociados de la aplicación para crear el informe.

  • Asegúrate de que la API de App Optimize esté habilitada para el proyecto que usarás para crear y administrar el recurso del informe.

gcloud

En la consola de Google Cloud , activa Cloud Shell.

Activa Cloud Shell

En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell que muestra una ventana emergente con una línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

Para obtener información sobre cómo configurar la autenticación para un entorno de producción, consulta Configura las credenciales predeterminadas de la aplicación para el código que se ejecuta en Google Cloud en la documentación de autenticación de Google Cloud .

Python

  1. Instala la biblioteca cliente de Python para la API de App Optimize.
  2. Para usar las muestras de Python de esta página en un entorno de desarrollo local, instala e inicializa la gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    1. Instala Google Cloud CLI.

    2. Si usas un proveedor de identidad (IdP) externo, primero debes acceder a gcloud CLI con tu identidad federada.

    3. Si usas un shell local, crea credenciales de autenticación locales para tu cuenta de usuario:

      gcloud auth application-default login

      No es necesario que lo hagas si usas Cloud Shell.

      Si se devuelve un error de autenticación y usas un proveedor de identidad (IdP) externo, confirma que accediste a la gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud .

    Para obtener información sobre cómo configurar la autenticación para un entorno de producción, consulta Configura las credenciales predeterminadas de la aplicación para el código que se ejecuta en Google Cloud en la documentación de autenticación de Google Cloud .

REST

Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la gcloud CLI.

    Instala Google Cloud CLI.

    Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .

Para obtener información sobre cómo configurar la autenticación para un entorno de producción, consulta Configura las credenciales predeterminadas de la aplicación para el código que se ejecuta en Google Cloud en la documentación de autenticación de Google Cloud .

Roles obligatorios

Si quieres obtener los permisos que necesitas para crear y leer un informe con esta guía de inicio rápido, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto con recursos activos:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Para obtener más información sobre los permisos y roles necesarios para la API de App Optimize, consulta Control de acceso con IAM.

Crea un informe

En este ejemplo, se crea un informe del gasto total en tu PROJECT_ID elegido. El informe desglosa los costos por cadaGoogle Cloud producto utilizado, como Compute Engine y Cloud Storage, y por el SKU y la ubicación específicos. El informe abarca los datos de los últimos tres días.

Para crear el recurso del informe, sigue las instrucciones del método que prefieras:

gcloud

Usa el comando gcloud beta app-optimize reports create para crear el informe.

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

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud .
  • REPORT_ID: Es un ID único para tu informe nuevo, por ejemplo, my-first-report.

El comando espera a que se complete la operación de creación del informe y, luego, devuelve el recurso del informe creado.

Python

El siguiente código de Python usa AppOptimizeClient.create_report() para crear un informe.

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)

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud .
  • REPORT_ID: Es un ID único para tu nuevo informe, por ejemplo, my-first-report.

El método operation.result() espera a que se complete la operación de creación del informe.

REST

Envía una solicitud POST HTTP a la ruta de recursos projects.locations.reports de la API de REST.

  1. Para enviar la solicitud, usa el siguiente comando de 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"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto de Google Cloud .
    • REPORT_ID: Es un ID único para tu informe nuevo, por ejemplo, my-first-report.

    La API devuelve un objeto de operación de larga duración (LRO), que representa el proceso de generación de informes. Esta es una respuesta de ejemplo:

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

    El estado "done": false indica que el informe aún se está generando. Toma nota del valor de OPERATION_ID, ya que lo usarás en el siguiente paso.

  2. Dado que la generación de informes puede llevar tiempo, debes sondear el LRO hasta que indique que el proceso de generación se completó y que los datos del informe están listos para descargarse.

    Para verificar el estado del proceso de generación, envía una solicitud HTTP GET al nombre del recurso de la operación:

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

    Analiza la respuesta. Si "done" es false, espera de 5 a 15 segundos y repite este paso. Si "done" es true, el informe está listo.

    A continuación, se muestra un ejemplo de una respuesta cuando se completa la operación:

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

Cómo leer los datos del informe

Para recuperar los datos del informe, sigue las instrucciones del método que prefieras:

gcloud

Usa el siguiente comando de gcloud beta app-optimize reports read para recuperar los datos del informe.

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

Python

El siguiente código de Python usa AppOptimizeClient.read_report() para recuperar los datos del informe.

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

Una vez que se complete el LRO, usa el método personalizado :read de la API de REST:

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"

La respuesta de la API contiene las filas de datos del informe y las definiciones de las columnas. A continuación, se muestra un ejemplo de una respuesta correcta:

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

Los informes con muchas filas se paginan. Para controlar varias páginas, consulta Cómo leer los datos de un informe.

Para comprender los valores del campo cost, consulta Cómo interpretar las métricas de costos. Para obtener más información sobre los datos y comprender sus limitaciones, consulta Cómo comprender los datos.

Realiza una limpieza

La API de App Optimize borra automáticamente tu informe 24 horas después de que se crea. Para borrar el informe antes, sigue las instrucciones del método que prefieras:

gcloud

Usa el comando gcloud beta app-optimize reports delete para quitar el informe.

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

Python

El siguiente código usa AppOptimizeClient.delete_report() para quitar el informe.

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

Envía una solicitud HTTP DELETE al extremo del recurso del informe:

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

¿Qué sigue?