Créer et lire un rapport

Découvrez comment créer un rapport App Optimize API sur les Google Cloud coûts de vos ressources, surveiller la génération du rapport et lire les données obtenues lorsqu'elles sont prêtes. Dans ce guide de démarrage rapide, vous pouvez utiliser l'API REST ou la bibliothèque cliente Python.

Avant de commencer

  • Les exemples de ce guide nécessitent un Google Cloud projet avec des ressources actives à analyser. L'API App Optimize a besoin de données de facturation et d'utilisation pour produire des résultats significatifs. Les rapports exécutés sur des projets nouveaux ou vides seront vides.

    Dans ce guide, le projet identifié comme PROJECT_ID fournit le champ d'application des données et héberge la ressource de rapport.

    L'API App Optimize permet de créer des rapports dans un projet qui analyse les données d'un autre projet ou à partir de applications dans des limites de projet unique ou de niveau dossier. Pour générer un rapport sur une application App Hub, qui peut être composée de plusieurs projets, vous devez disposer des autorisations de surveillance et de facturation requises sur tous les projets associés de l'application pour créer le rapport.

  • Assurez-vous que l'API App Optimize est activée pour le projet que vous utiliserez pour créer et gérer la ressource de rapport.

gcloud

  • Installez la Google Cloud CLI.

  • Configurez la gcloud CLI afin d'utiliser votre identité fédérée.

    Pour en savoir plus, consultez Se connecter à la gcloud CLI avec votre identité fédérée.

  • Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  • Après avoir initialisé la gcloud CLI, mettez-la à jour et installez les composants requis :

    gcloud components update
    gcloud components install beta
  • Pour en savoir plus sur la configuration de l'authentification dans un environnement de production, consultez Configurer les identifiants par défaut de l'application pour le code exécuté sur Google Cloud dans la Google Cloud documentation sur l'authentification.

    Python

    1. Installez la bibliothèque cliente Python pour l'API App Optimize.
    2. Pour utiliser les exemples Python de cette page dans un environnement de développement local, installez et initialisez la gcloud CLI, puis configurez le service Identifiants par défaut de l'application avec vos identifiants utilisateur.

      1. Installez la Google Cloud CLI.

      2. Configurez la gcloud CLI afin d'utiliser votre identité fédérée.

        Pour en savoir plus, consultez Se connecter à la gcloud CLI avec votre identité fédérée.

      3. gcloud auth application-default login

        Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.

      Pour en savoir plus, consultez Configurer les ADC pour un environnement de développement local dans la documentation sur l' Google Cloud authentification.

      Pour en savoir plus sur la configuration de l'authentification dans un environnement de production, consultez Configurer les identifiants par défaut de l'application pour le code exécuté sur Google Cloud dans la Google Cloud documentation sur l'authentification.

    REST

    Pour utiliser les exemples API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à la gcloud CLI.

      Installez la Google Cloud CLI, puis connectez-vous à la gcloud CLI avec votre identité fédérée.

    Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l' Google Cloud authentification.

    Pour en savoir plus sur la configuration de l'authentification dans un environnement de production, consultez Configurer les identifiants par défaut de l'application pour le code exécuté sur Google Cloud dans la Google Cloud documentation sur l'authentification.

    Rôles requis

    Pour obtenir les autorisations nécessaires pour créer et lire un rapport à l'aide de ce guide de démarrage rapide, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet avec des ressources actives :

    Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

    Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

    Pour en savoir plus sur les autorisations et les rôles requis pour l'API App Optimize, consultez Contrôle des accès avec IAM.

    Créer un rapport

    Cet exemple crée un rapport sur les dépenses totales dans l'ID de projet que vous avez choisi PROJECT_ID. Le rapport détaille les coûts par Google Cloud produit utilisé, tels que Compute Engine et Cloud Storage, ainsi que par SKU et emplacement spécifiques. Le rapport couvre les trois derniers jours de données.

    Pour créer la ressource de rapport, suivez les instructions de votre méthode préférée :

    gcloud

    Utilisez la commande gcloud beta app-optimize reports create pour créer le rapport.

    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
    

    Remplacez les éléments suivants :

    • PROJECT_ID: ID de votre Google Cloud projet.
    • REPORT_ID : ID unique de votre nouveau rapport, par exemple my-first-report.

    La commande attend la fin de l'opération de création du rapport, puis renvoie la ressource de rapport créée.

    Python

    Le code Python suivant utilise AppOptimizeClient.create_report() pour créer un rapport.

    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)
    

    Remplacez les éléments suivants :

    • PROJECT_ID: ID de votre Google Cloud projet.
    • REPORT_ID: ID unique de votre nouveau rapport, par exemple my-first-report.

    La méthode operation.result() attend la fin de l'opération de création du rapport.

    REST

    Envoyez une requête HTTP POST au chemin d'accès de la ressource projects.locations.reports de l'API REST.

    1. Pour envoyer la requête, utilisez la commande curl suivante :

      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"
      

      Remplacez les éléments suivants :

      • PROJECT_ID: ID de votre Google Cloud projet.
      • REPORT_ID : ID unique de votre nouveau rapport, par exemple my-first-report.

      L'API renvoie un objet d'opération de longue durée (LRO), qui représente le processus de génération du rapport. Voici un exemple de réponse :

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

      L'état "done": false indique que le rapport est toujours en cours de génération. Notez l'OPERATION_ID, car vous l'utiliserez à l'étape suivante.

    2. Étant donné que la génération de rapports peut prendre du temps, vous devez interroger l'opération de longue durée jusqu'à ce qu'elle indique que le processus de génération est terminé et que les données du rapport sont prêtes à être téléchargées.

      Pour vérifier l'état du processus de génération, envoyez une requête HTTP GET au nom de la ressource de l'opération :

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

      Examinez la réponse. Si "done" est false, attendez 5 à 15 secondes et répétez cette étape. Si "done" est true, le rapport est prêt.

      Voici un exemple de réponse lorsque l'opération est terminée :

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

    Lire les données du rapport

    Pour récupérer les données du rapport, suivez les instructions de votre méthode préférée :

    gcloud

    Utilisez la commande gcloud beta app-optimize reports read suivante pour récupérer les données du rapport.

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

    Python

    Le code Python suivant utilise AppOptimizeClient.read_report() pour récupérer les données du rapport.

    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

    Une fois l'opération de longue durée terminée, utilisez la méthode personnalisée :read de l'API 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 réponse de l'API contient les lignes de données du rapport et les définitions de colonnes. Voici un exemple de réponse positive :

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

    Les rapports comportant de nombreuses lignes sont paginés. Pour gérer plusieurs pages, consultez Lire les données d'un rapport.

    Pour comprendre les valeurs du champ cost, consultez Interpréter les métriques de coût. Pour en savoir plus sur les données et comprendre leurs limites, consultez Comprendre les données.

    Libérer de l'espace

    L'API App Optimize supprime automatiquement votre rapport 24 heures après sa création. Pour supprimer le rapport plus tôt, suivez les instructions de votre méthode préférée :

    gcloud

    Utilisez la commande gcloud beta app-optimize reports delete pour supprimer le rapport.

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

    Python

    Le code suivant utilise AppOptimizeClient.delete_report() pour supprimer le rapport.

    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

    Envoyez une requête HTTP DELETE au point de terminaison de la ressource du rapport :

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

    Étape suivante