Cette page a été traduite par l'API Cloud Translation.
Switch to English

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.

Dans la plupart des cas d'utilisation opérationnels, le moyen le plus simple de gérer le quota consiste à utiliser Google Cloud Console. 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 tester l'API, vous pouvez suivre les instructions de ce guide et utiliser la commande gcurl pour tester l'API sans configurer un environnement de développement d'applications complet.

Avant de commencer

Pour utiliser les exemples de cette page, suivez toutes les étapes du guide de démarrage. Ces étapes incluent la définition de gcurl, qui est un alias authentifié pour la commande curl standard, ainsi que 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 contenant la liste des limites sur ces métriques qui s'appliquent à ce consommateur, les valeurs de ces limites, ainsi que tout remplacement. Voici un exemple de réponse partielle:


{
  "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é un nom de ressource de métrique spécifique, l'appel ne renvoie que les informations pour 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}"

Si vous spécifiez une limite spécifique, l'appel renvoie uniquement les informations relatives à 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. Utilisez ensuite le champ de nom de la limite de quota pour créer un nouveau remplacement de consommateur pour cette limite. L'exemple suivant concerne la limite par projet de la métrique de quota "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 aboutit, il renvoie un identifiant d'opération, qui représente le travail en cours sur le serveur, car la modification du 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 vous assurer que le remplacement a bien été créé, répertoriez tous les remplacements du 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, vous pouvez créer un remplacement régional dans une limite de quota régionale Compute Engine comme ceci:

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 de consommateur 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 aboutit, il renvoie un identifiant d'opération, qui représente le travail en cours sur le serveur, car la modification du 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 vous assurer que le remplacement a été mis à jour, répertoriez tous les remplacements de consommateur 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 devrait maintenant s'afficher dans la liste avec la 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 vous assurer que la valeur de remplacement a bien été supprimée, répertoriez tous les remplacements de consommateurs 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 devrait plus figurer 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"}'