Créer et lire un rapport

Découvrez comment créer un rapport sur les dépenses de votre Google Cloudavec l'API App Optimize, surveiller la génération du rapport et lire les données obtenues lorsqu'elles sont disponibles. 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 projet Google Cloud 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 analysent les données d'un autre projet ou d'applications dans des limites au niveau d'un seul projet ou d'un dossier. Pour générer un rapport sur une application App Hub, qui peut être constituée de plusieurs projets, vous devez disposer des autorisations de surveillance et de facturation requises sur tous les projets associés à l'application.

  • 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

Dans la console Google Cloud , activez Cloud Shell.

Activer Cloud Shell

En bas de la console Google Cloud , une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

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 s'exécutant sur Google Cloud dans la documentation sur l'authentification Google Cloud .

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 les Identifiants par défaut de l'application avec vos identifiants utilisateur.

    1. Installez la Google Cloud CLI.

    2. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

    3. Si vous utilisez un shell local, créez des identifiants d'authentification locaux pour votre compte utilisateur :

      gcloud auth application-default login

      Vous n'avez pas besoin de le faire si vous utilisez Cloud Shell.

      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'authentification Google Cloud .

    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 s'exécutant sur Google Cloud dans la documentation sur l'authentification Google Cloud .

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.

    Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à 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'authentification Google Cloud .

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 s'exécutant sur Google Cloud dans la documentation sur l'authentification Google Cloud .

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 votre PROJECT_ID. Le rapport détaille les coûts pour chaque produitGoogle Cloud utilisé, comme Compute Engine et Cloud Storage, ainsi que pour le code SKU et l'emplacement spécifiques. Le rapport couvre les données des trois derniers jours.

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 projet Google Cloud .
  • 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 projet Google Cloud .
  • 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 à 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 projet Google Cloud .
    • 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 la valeur de OPERATION_ID, car vous en aurez besoin à 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 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 défini sur false, patientez entre 5 et 15 secondes, puis répétez cette étape. Si "done" est true, le rapport est prêt.

    Voici un exemple de réponse une fois l'opération 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 extraire 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 leurs limites, consultez Comprendre les données.

Effectuer un nettoyage

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"

Étapes suivantes