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 proyecto Google Cloud 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

  • Instala Google Cloud CLI.

  • Configura gcloud CLI para usar tu identidad federada.

    Para obtener más información, consulta Accede a la gcloud CLI con tu identidad federada.

  • Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  • Después de inicializar gcloud CLI, actualízala y, luego, instala los componentes necesarios:

    gcloud components update
    gcloud components install beta
  • 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. Configura gcloud CLI para usar tu identidad federada.

        Para obtener más información, consulta Accede a la gcloud CLI con tu identidad federada.

      3. Crea credenciales de autenticación locales para tu cuenta de usuario:

        gcloud auth application-default login

        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 y, luego, accede a 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?