Mengelola Kuota Layanan

Halaman ini menjelaskan cara melihat semua metrik dan batas kuota pada project Google Cloud untuk layanan tertentu, serta cara membatasi penggunaan kuota untuk layanan tersebut menggunakan penggantian kuota. Anda dapat menggunakan Service Usage guna mengelola kuota project Anda untuk layanan apa pun, termasuk layanan Google Cloud publik dan layanan pribadi yang dibuat menggunakan Cloud Endpoints. Untuk mengetahui informasi selengkapnya tentang perbedaan antara API dan layanan publik dan pribadi, lihat Layanan Publik dan Pribadi.

Untuk sebagian besar kasus penggunaan operasional, cara paling sederhana untuk mengelola kuota adalah dengan menggunakan konsol Google Cloud. Jika Anda perlu melakukan pemrograman terhadap Service Usage API, sebaiknya gunakan salah satu library klien yang kami sediakan. Untuk bereksperimen dengan API, Anda dapat mengikuti petunjuk dalam panduan ini dan menggunakan perintah gcurl untuk menguji API tanpa menyiapkan lingkungan pengembangan aplikasi secara lengkap.

Jika Anda menggunakan Terraform, lihat bagian Mengelola resource Penggunaan Layanan dengan Terraform.

Sebelum memulai

Untuk menggunakan contoh di halaman ini, selesaikan semua langkah yang tercantum dalam panduan Memulai. Langkah-langkah ini termasuk menentukan gcurl, yang merupakan alias terautentikasi untuk perintah curl standar, dan menentukan variabel lingkungan PROJECT_NUMBER.

Pastikan Anda memahami model kuota layanan untuk lebih memahami terminologi yang digunakan dalam tutorial ini.

Menampilkan kuota layanan

Untuk melihat semua metrik dan batas kuota yang berlaku untuk konsumen tertentu pada layanan, gunakan perintah berikut:

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

Panggilan tersebut merespons dengan daftar metrik yang ditentukan oleh layanan, masing-masing dengan daftar batas pada metrik yang berlaku untuk konsumen ini, nilai untuk batas tersebut, dan penggantian apa pun. Berikut adalah sebagian contoh respons:


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

Setiap metrik dalam respons memiliki kolom name. Untuk memeriksa setelan kuota hanya untuk metrik tersebut, bukan untuk semua metrik, gunakan name di URL. Untuk tujuan tutorial ini, variabel lingkungan METRIC_RESOURCE_NAME menyimpan nama resource metrik kuota:

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

Karena nama resource metrik tertentu diberikan, panggilan hanya menampilkan informasi untuk metrik tersebut:

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

Demikian pula, setiap batas dalam metrik memiliki kolom name. Untuk memeriksa setelan kuota hanya untuk batas tersebut di metrik tersebut, bukan untuk semua batas pada metrik atau semua metrik, gunakan name di URL. Untuk tujuan tutorial ini, variabel lingkungan LIMIT_RESOURCE_NAME menyimpan nama resource batas kuota:

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

Jika batas tertentu diberikan, panggilan hanya menampilkan informasi untuk batas tersebut:

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

Membuat penggantian kuota konsumen

Pemilik project dapat menerapkan penggantian konsumen pada batas kuota tertentu pada project tersebut, untuk mengurangi jumlah total kuota yang dapat ditagihkan kepada konsumen terhadap batas tersebut.

Perhatikan bahwa penggantian konsumen tidak dapat menambah kuota yang tersedia melebihi yang diizinkan oleh default layanan dan penggantian apa pun yang ada oleh pihak lain (seperti pemilik layanan atau administrator kuota organisasi). Untuk menambah kuota yang tersedia, gunakan opsi Edit Quotas di halaman kuota utama, atau minta peningkatan kuota kepada admin org.

Untuk mengidentifikasi batas yang akan diganti, pertama-tama gunakan salah satu metode sebelumnya untuk menemukan batas kuota yang diinginkan. Kemudian, gunakan kolom nama batas kuota untuk membuat penggantian konsumen baru pada batas tersebut. Contoh berikut adalah untuk batas per project dari metrik kuota "Gateway VPN eksternal" di layanan 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"}'

Ketika panggilan berhasil, panggilan akan menampilkan ID operasi, yang menunjukkan pekerjaan yang sedang berlangsung di server, karena perubahan kuota menyebar ke sistem backend:

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

Untuk memeriksa progres operasi, cukup gunakan name:

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

Jika operasi berhasil, pesan respons akan menyertakan done: true dan berisi resource penggantian yang baru dibuat. Jika operasi gagal, maka pesan respons akan menyertakan done: true, tetapi berisi detail error, bukan resource.

Untuk memverifikasi bahwa penggantian telah dibuat, cantumkan semua penggantian konsumen untuk batas tersebut:

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

Penggantian yang baru dibuat akan muncul dalam daftar:

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

Membuat penggantian kuota regional atau zona

Beberapa batas kuota diterapkan per region atau per zona; hal ini ditunjukkan dengan adanya {region} atau {zone} di kolom unit batas. Misalnya, batas dengan unit "1/{project}/{region}" diterapkan per region. Menerapkan penggantian ke batas tersebut akan mengubah kuota dasar di setiap region atau zona. Untuk mengubah kuota hanya untuk region atau zona tertentu, tambahkan dimensi kuota menggunakan kolom dimensions saat membuat penggantian. Misalnya, buat penggantian regional pada batas kuota regional Compute Engine seperti ini:

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

Untuk memverifikasi bahwa penggantian regional telah dibuat, cantumkan semua penggantian konsumen untuk batas tersebut:

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

Penggantian regional yang baru dibuat akan muncul dalam daftar:

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

Memperbarui penggantian kuota konsumen

Pemilik project juga dapat mengubah nilai penggantian konsumen yang ada pada project.

Misalnya, panggilan create sebelumnya yang menampilkan penggantian dengan kolom name seperti ini:

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

Kemudian, gunakan nama tersebut untuk mengidentifikasi penggantian yang akan diperbarui, seperti ini:

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

Ketika panggilan berhasil, panggilan akan menampilkan ID operasi, yang menunjukkan pekerjaan yang sedang berlangsung di server, karena perubahan kuota menyebar ke sistem backend:

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

Untuk memeriksa progres operasi, cukup gunakan name:

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

Jika operasi berhasil, pesan respons akan menyertakan done: true dan berisi resource penggantian yang diperbarui. Jika operasi gagal, pesan respons akan menyertakan done: true, tetapi berisi detail error, bukan resource yang diperbarui.

Untuk memverifikasi bahwa penggantian telah diperbarui, cantumkan semua penggantian konsumen untuk batas tersebut:

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"

Penggantian sekarang akan muncul dalam daftar dengan nilai yang diperbarui:

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

Menghapus penggantian kuota konsumen

Pemilik project juga dapat menghapus penggantian konsumen dari project.

Misalnya, panggilan create sebelumnya yang menampilkan penggantian dengan kolom name seperti ini:

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

Untuk menghapus penggantian, berikan urutan berikut:

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

Untuk memverifikasi bahwa penggantian telah dihapus, cantumkan semua penggantian konsumen untuk batas tersebut:

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"

Penggantian yang dihapus tidak akan muncul lagi dalam daftar.

Memaksa perubahan kuota yang besar

Jika perubahan penggantian kuota akan menyebabkan kuota yang diterapkan berkurang lebih dari 10%, panggilan akan ditolak, sebagai langkah keamanan untuk menghindari penurunan kuota secara tidak sengaja. Untuk mengabaikan batasan ini, gunakan flag force. Misalnya, berikut adalah panggilan create yang menggunakan flag 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"}'