Gérer les quotas de service

Cette page explique comment afficher toutes les métriques et limites de quota sur un projet Google Cloud pour un service spécifique, et comment limiter l'utilisation des quotas pour ce service à l'aide d'un quota de remplacement. Vous pouvez utiliser Service Usage pour gérer les quotas de vos projets pour n'importe quel service, y compris les services Google Cloud publics et les services privés créés à l'aide de Cloud Endpoints. Pour plus d'informations sur les différences entre les API et services publics et privés, consultez la page Services publics et services privés.

Pour la plupart des cas d'utilisation opérationnels, le moyen le plus simple de gérer les quotas consiste à utiliser la console Google Cloud. Si vous devez programmer à l'aide de l'API Service Usage, nous vous recommandons d'utiliser l'une des bibliothèques clientes que nous fournissons. Pour expérimenter l'API, vous pouvez suivre les instructions fournies dans ce guide, qui montrent comment utiliser la commande gcurl pour tester l'API sans configurer un environnement de développement d'applications complet.

Si vous utilisez Terraform, consultez la page Gérer les ressources Service Usage avec Terraform.

Avant de commencer

Pour utiliser les exemples de cette page, suivez toutes les étapes indiquées dans le guide de démarrage. Ces étapes incluent la définition de gcurl, qui est un alias authentifié pour la commande curl standard, et la définition de la variable d'environnement PROJECT_NUMBER.

Assurez-vous de vous familiariser avec le modèle de quota de service pour mieux comprendre la terminologie utilisée dans ce tutoriel.

Afficher le quota de service

Pour voir toutes les métriques et limites de quota qui s'appliquent à un client spécifique sur un service, utilisez la commande suivante :

gcurl "https://serviceusage.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics"

L'appel répond avec une liste de métriques définies par le service. Chacune des métriques présente la liste des limites qui s'appliquent à ce client, les valeurs de ces limites et tout remplacement éventuellement effectué. Voici un exemple de réponse partiel :


{
  "metrics": [
    ...
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus",
      "displayName": "CPUs",
      "consumerQuotaLimits": [
        {
          "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus/limits/%2Fproject%2Fzone",
          "unit": "1/{project}/{zone}",
          "isPrecise": true,
          "metric": "compute.googleapis.com/cpus",
          "quotaBuckets": [
            {
              "effectiveLimit": "-1",
              "defaultLimit": "-1"
            }
          ]
        },
        {
          "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus/limits/%2Fproject%2Fregion",
          "unit": "1/{project}/{region}",
          "isPrecise": true,
          "metric": "compute.googleapis.com/cpus",
          "quotaBuckets": [
            {
              "effectiveLimit": "24",
              "defaultLimit": "24"
            },
            {
              "effectiveLimit": "72",
              "defaultLimit": "72",
              "dimensions": {
                "region": "asia-northeast1"
              }
            },

            ...

            {
              "effectiveLimit": "72",
              "defaultLimit": "72",
              "dimensions": {
                "region": "australia-southeast1"
              }
            }
          ]
        }
      ],
      "metric": "compute.googleapis.com/cpus",
      "unit": "1"
    },
    ...
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways",
      "displayName": "External VPN gateways",
      "consumerQuotaLimits": [
        {
          "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject",
          "unit": "1/{project}",
          "isPrecise": true,
          "metric": "compute.googleapis.com/external_vpn_gateways",
          "quotaBuckets": [
            {
              "effectiveLimit": "15",
              "defaultLimit": "15"
            }
          ]
        }
      ],
      "metric": "compute.googleapis.com/external_vpn_gateways",
      "unit": "1"
    },
    ...

Chaque métrique de la réponse comporte un champ name. Pour inspecter les paramètres de quota pour cette métrique uniquement, plutôt que pour toutes les métriques, utilisez son name dans l'URL. Pour ce tutoriel, la variable d'environnement METRIC_RESOURCE_NAME stocke le nom de la ressource de métrique de quota :

METRIC_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways"
gcurl "https://serviceusage.googleapis.com/v1beta1/${METRIC_RESOURCE_NAME}"

Étant donné qu'un nom de ressource de métrique spécifique est indiqué, l'appel ne renvoie que les informations concernant cette métrique :

{
  "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways",
  "displayName": "External VPN gateways",
  "consumerQuotaLimits": [
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject",
      "unit": "1/{project}",
      "isPrecise": true,
      "metric": "compute.googleapis.com/external_vpn_gateways",
      "quotaBuckets": [
        {
          "effectiveLimit": "15",
          "defaultLimit": "15"
        }
      ]
    }
  ],
  "metric": "compute.googleapis.com/external_vpn_gateways",
  "unit": "1"
}

De même, chaque limite d'une métrique comporte un champ name. Pour inspecter les paramètres de quota uniquement pour cette limite et cette métrique, plutôt que pour toutes les limites d'une même métrique ou toutes les limites de toutes les métriques, utilisez son name dans l'URL. Pour ce tutoriel, la variable d'environnement LIMIT_RESOURCE_NAME stocke le nom de la ressource de limite de quota :

LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject"
gcurl "https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}"

Lorsqu'une limite spécifique est indiquée, l'appel ne renvoie que les informations concernant cette limite :

{
  "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject",
  "unit": "1/{project}",
  "isPrecise": true,
  "metric": "compute.googleapis.com/external_vpn_gateways",
  "quotaBuckets": [
    {
      "effectiveLimit": "15",
      "defaultLimit": "15"
    }
  ]
}

Créer un remplacement de quota du client

Le propriétaire d'un projet peut appliquer un remplacement du client à une limite de quota spécifique sur ce projet, afin de réduire le montant total du quota que le consommateur peut imputer à cette limite.

Notez qu'un remplacement du client ne peut pas augmenter le quota disponible au-delà de ce qui est autorisé par le service par défaut ou tout remplacement existant effectué par d'autres parties (telles que le propriétaire du service ou l'administrateur de quota d'une organisation). Pour augmenter le quota disponible, utilisez l'option Modifier les quotas sur la page principale consacrée aux quotas ou demandez à l'administrateur de l'organisation une augmentation du quota.

Pour identifier une limite à remplacer, utilisez d'abord l'une des méthodes précédentes pour trouver la limite de quota qui vous intéresse. Utilisez ensuite le champ "name" de la limite de quota pour créer un "remplacement défini par le client" sur cette limite. L'exemple suivant concerne la limite par projet de la métrique de quota "External VPN gateways" (Passerelles VPN externes) du service Compute Engine :

LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject"
gcurl "https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}/consumerOverrides" -d '{"overrideValue": "14"}'

Lorsque l'appel réussit, il renvoie un identifiant d'opération, qui représente le travail en cours sur le serveur, alors que la modification de quota se propage aux systèmes backend :

{
  "name": "operations/quf.92accba3-6530-4fc1-9a95-c1280d48a6b7"
}

Pour vérifier la progression de l'opération, utilisez simplement son name :

OPERATION_NAME="operations/quf.92accba3-6530-4fc1-9a95-c1280d48a6b7"
gcurl "https://serviceusage.googleapis.com/v1/${OPERATION_NAME}"

Si l'opération réussit, le message de réponse inclut done: true et contient la ressource de remplacement nouvellement créée. Si l'opération échoue, le message de réponse inclut done: true, mais contient des détails de l'erreur au lieu de la ressource.

Pour vérifier que le remplacement a été créé, répertoriez tous les remplacements définis par le client pour la limite :

gcurl "https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}/consumerOverrides"

Le remplacement que vous venez de créer doit apparaître dans la liste :

{
  "overrides": [
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl",
      "overrideValue": "14"
    }
  ]
}

Créer des remplacements de quotas régionaux ou zonaux

Certaines limites de quota sont appliquées par région ou par zone. Cette information est indiquée par la présence de {region} ou {zone} dans le champ unit de la limite. Par exemple, une limite avec l'unité "1/{project}/{region}" est appliquée au niveau de la région. Appliquer un remplacement à une telle limite modifie le quota de base de chaque région ou zone. Pour modifier le quota uniquement pour une région ou une zone spécifique, ajoutez une dimension de quota à l'aide du champ dimensions lors de la création du remplacement. Par exemple, pour créer un remplacement régional sur une limite de quota régional Compute Engine, procédez comme suit :

REGIONAL_LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus/limits/%2Fproject%2Fregion"
gcurl "https://serviceusage.googleapis.com/v1beta1/${REGIONAL_LIMIT_RESOURCE_NAME}/consumerOverrides" -d '{"overrideValue": "65", "dimensions": {"region": "southamerica-east1"} }'

Pour vérifier que le remplacement régional a été créé, répertoriez tous les remplacements définis par le client pour la limite :

gcurl "https://serviceusage.googleapis.com/v1beta1/${REGIONAL_LIMIT_RESOURCE_NAME}/consumerOverrides"

Le remplacement régional nouvellement créé doit apparaître dans la liste :

{
  "overrides": [
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus/limits/%2Fproject%2Fregion/consumerOverrides/Cg1RdW90YU92ZXJyaWRlGhwKBnJlZ2lvbhISc291dGhhbWVyaWNhLWVhc3Qx",
      "overrideValue": "65",
      "dimensions": {
        "region": "southamerica-east1"
      }
    }
  ]
}

Mettre à jour un remplacement de quota du client

Le propriétaire d'un projet peut également modifier la valeur d'un remplacement du client existant sur le projet.

Par exemple, supposons qu'un précédent appel de création ait renvoyé un remplacement avec un champ name comme ceci :

name: "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl"

Utilisez ensuite ce nom pour identifier le remplacement à mettre à jour, comme ceci :

OVERRIDE_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl"
gcurl "https://serviceusage.googleapis.com/v1beta1/${OVERRIDE_RESOURCE_NAME}" -X PATCH -d '{"overrideValue": "13"}'

Lorsque l'appel réussit, il renvoie un identifiant d'opération, qui représente le travail en cours sur le serveur, alors que la modification de quota se propage aux systèmes backend :

{
  "name": "operations/quf.92accba3-6530-4fc1-9a95-c1280d48a6b7"
}

Pour vérifier la progression de l'opération, utilisez simplement son name :

OPERATION_NAME="operations/quf.92accba3-6530-4fc1-9a95-c1280d48a6b7"
gcurl "https://serviceusage.googleapis.com/v1/${OPERATION_NAME}"

Si l'opération réussit, le message de réponse inclut done: true et contient la ressource de remplacement mise à jour. Si l'opération échoue, le message de réponse inclut done: true, mais contient les détails de l'erreur au lieu de la ressource mise à jour.

Pour vérifier que le remplacement a été mis à jour, répertoriez tous les remplacements définis par le client pour la limite :

LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject"
gcurl "https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}/consumerOverrides"

Le remplacement doit maintenant apparaître dans la liste avec une valeur mise à jour :

{
  "overrides": [
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl",
      "overrideValue": "13"
    }
  ]
}

Supprimer un remplacement de quota du client

Le propriétaire d'un projet peut également supprimer du projet un remplacement du client.

Par exemple, supposons qu'un précédent appel de création ait renvoyé un remplacement avec un champ name comme ceci :

name: "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl"

Pour supprimer le remplacement, exécutez la séquence suivante :

OVERRIDE_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl"
gcurl "https://serviceusage.googleapis.com/v1beta1/${OVERRIDE_RESOURCE_NAME}" -X DELETE

Pour vérifier que le remplacement a été supprimé, répertoriez tous les remplacements définis par le client pour la limite :

LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject"
gcurl "https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}/consumerOverrides"

Le remplacement supprimé ne doit plus apparaître dans la liste.

Forcer des changements de quotas importants

Si un changement lié au remplacement de quota entraîne une baisse de plus de 10 % du quota imposé, l'appel est rejeté, par mesure de sécurité. Cela évite de diminuer trop rapidement le quota par accident. Pour ignorer cette restriction, utilisez l'indicateur force. Par exemple, voici un appel de création qui prend l'indicateur force :

LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject"
gcurl "https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}/consumerOverrides?force=true" -d '{"overrideValue": "0"}'