Menggunakan API - Rekomendasi

Halaman ini menjelaskan cara melihat dan mengelola rekomendasi di Pemberi rekomendasi menggunakan perintah gcloud atau REST API.

Interaksi rekomendasi standar dengan Recommender API adalah:

  • Rekomendasi daftar yang saat ini tersedia untuk pemberi rekomendasi tertentu
  • Tandai rekomendasi yang ingin Anda terapkan sebagai diklaim, atau tandai rekomendasi yang tidak ingin Anda terapkan sebagai diabaikan
  • Terapkan rekomendasi menggunakan perintah gcloud atau panggilan REST API khusus untuk jenis resource (misalnya, peran IAM atau instance VM Compute Engine)
  • Tandai rekomendasi sebagai berhasil atau gagal

Perhatikan bahwa hanya rekomendasi yang diambil melalui API yang dapat berinteraksi melalui API atau BigQuery Export.

Untuk mengetahui informasi tentang cara mengubah status rekomendasi di Google Cloud Console, lihat dokumentasi untuk Hub Rekomendasi atau untuk recommender yang sesuai.

Menetapkan project default

Tetapkan project default jika Anda belum melakukannya:

gcloud config set project PROJECT_ID

dengan PROJECT_ID sebagai ID project Anda.

Menetapkan variabel lingkungan

Tetapkan variabel lingkungan untuk interaksi Pemberi rekomendasi:

PROJECT=TARGET_PROJECT_ID
LOCATION=LOCATION_ID
RECOMMENDER=RECOMMENDER_ID

dengan:

  • TARGET_PROJECT_ID adalah project yang rekomendasinya ingin Anda cantumkan. Project ini bisa berbeda dari project Anda saat ini.

    • Untuk perintah gcloud, Anda harus menggunakan project ID
    • Untuk permintaan API, Anda dapat menggunakan nomor project atau project ID. Sebaiknya gunakan nomor project.

    Nomor project ditampilkan sebagai respons dari perintah API dan gcloud.

  • LOCATION_ID adalah lokasi Google Cloud tempat resource yang terkait dengan rekomendasi berada (misalnya, global atau us-central1-a).

  • RECOMMENDER_ID adalah ID pemberi rekomendasi yang sepenuhnya memenuhi syarat (misalnya, google.compute.instance.MachineTypeRecommender).

Lihat Pemberi rekomendasi untuk melihat tabel link ke informasi tentang setiap pemberi rekomendasi, termasuk lokasi yang didukung dan ID pemberi rekomendasi.

Tetapkan izin

Anda harus memiliki izin untuk mengakses rekomendasi di project target.

  • Untuk pemohon yang menyertakan project penagihan dalam permintaannya. Project yang digunakan dalam permintaan harus memiliki reputasi baik, dan pengguna harus memiliki peran dalam project yang berisi izin serviceusage.services.use. Peran Service Usage Consumer berisi izin yang diperlukan.
  • Setiap pemberi rekomendasi memerlukan izin khusus. Lihat Pemberi rekomendasi untuk tabel link ke informasi tentang setiap pemberi rekomendasi, termasuk izin yang diperlukan.

Rekomendasi daftar

Untuk mencantumkan rekomendasi dalam project target:

gcloud

Masukkan:

gcloud recommender recommendations list \
    --project=${PROJECT} \
    --location=${LOCATION} \
    --recommender=${RECOMMENDER} \
    --format=FORMAT

dengan FORMAT adalah format output gcloud yang didukung (misalnya, json).

Contoh:

gcloud recommender recommendations list \
    --project=example-project \
    --location=us-central1-a \
    --recommender=google.compute.instance.MachineTypeRecommender \
    --format=json

REST

Masukkan:

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: ${PROJECT}" \
    "https://recommender.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/recommenders/${RECOMMENDER}/recommendations"

Contoh:

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: example-project" \
    "https://recommender.googleapis.com/v1/projects/example-project/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations"

Operasi ini menghasilkan rekomendasi ukuran instance VM saat ini dalam project target sebagai daftar entity Recommendation dalam format yang ditentukan.

Outputnya mirip dengan hal berikut ini:

[
  {
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "test",
              "path": "/machineType",
              "resource": "//compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/instance-1",
              "resourceType": "compute.googleapis.com/Instance",
              "valueMatcher": {
                "matchesPattern": ".*zones/us-central1-a/machineTypes/n1-standard-4"
              }
            },
            {
              "action": "replace",
              "path": "/machineType",
              "resource": "//compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/instance-1",
              "resourceType": "compute.googleapis.com/Instance",
              "value": "zones/us-central1-a/machineTypes/custom-2-5120"
            }
          ]
        }
      ]
    },
    "description": "Save cost by changing machine type from n1-standard-4 to custom-2-5120.",
    "etag": "\"280b34810bba8a1a\"",
    "lastRefreshTime": "2019-06-28T06:49:21Z",
    "name": "projects/32428390823/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations/a523ff7e-ed03-4143-a3a5-5b396b99cba9",
    "primaryImpact": { ... },
    "stateInfo": {
      "state": "ACTIVE"
    },
    "recommenderSubtype": "CHANGE_MACHINE_TYPE"
  }
]

Perhatikan bahwa rekomendasi yang ditampilkan mencakup kolom berikut:

  • Kolom name dalam format berikut:

    projects/PROJECT_ID/locations/LOCATION/recommenders/RECOMMENDER_ID/recommendations/RECOMMENDATION_ID

    dengan RECOMMENDATION_ID secara unik mengidentifikasi rekomendasi

  • Kolom etag yang terkait dengan status rekomendasi saat ini.

Saat mereferensikan rekomendasi menggunakan perintah gcloud atau panggilan REST API berikutnya, Anda akan mereferensikan ID dan etag rekomendasi, yang memastikan bahwa operasi apa pun dilakukan hanya jika rekomendasi tersebut belum diubah sejak terakhir kali Anda mengambilnya.

Menandai rekomendasi sebagai diklaim atau ditolak

Anda dapat menandai rekomendasi sebagai diklaim untuk menunjukkan bahwa Anda ingin menerapkan perubahan yang direkomendasikan pada resource terkait. Saat rekomendasi diklaim, nama pengguna Anda akan ditetapkan sebagai aktor untuk rekomendasi, dan Pemberi rekomendasi tidak memperbarui rekomendasi dengan konten yang lebih baru.

Anda dapat menandai rekomendasi sebagai ditolak untuk menunjukkan bahwa Anda tidak ingin menerapkan perubahan yang direkomendasikan pada resource terkait atau Anda tidak ingin terus melihat rekomendasi tersebut. Jika ditolak, rekomendasi tidak akan lagi muncul sebagai rekomendasi AKTIF. Pemberi rekomendasi dapat terus memperbarui rekomendasi dengan konten yang lebih baru.

Untuk menandai rekomendasi sebagai diklaim atau ditolak:

gcloud

Masukkan:

gcloud recommender recommendations STATE_CHANGE \
    RECOMMENDATION_ID \
    --project=${PROJECT} \
    --location=${LOCATION} \
    --recommender=${RECOMMENDER} \
    --etag=etag \
    --state-metadata=STATE_METADATA
    --format=FORMAT

Dengan keterangan:

  • STATE_CHANGE adalah status yang ingin Anda tandai ke rekomendasi. Nilai yang valid adalah:
    • mark-claimed untuk menandai rekomendasi sebagai telah diklaim.
    • mark-dismissed untuk menandai rekomendasi sebagai ditolak.
  • RECOMMENDATION_ID adalah ID rekomendasi yang Anda ambil dari panggilan sebelumnya untuk mencantumkan rekomendasi
  • etag adalah etag yang ditampilkan yang mewakili status rekomendasi
  • STATE_METADATA adalah metadata opsional tentang operasi tersebut. Tentukan metadata sebagai daftar yang dipisahkan koma untuk pasangan KEY=VALUE. Opsi ini tersedia saat Anda menandai rekomendasi sebagai telah diklaim, berhasil, atau gagal.

Contoh:

gcloud recommender recommendations mark-claimed \
    a523ff7e-ed03-4143-a3a5-5b396b99cba9 \
    --project=example-project \
    --location=us-central1-a \
    --recommender=google.compute.instance.MachineTypeRecommender \
    --etag='"280b34810bba8a1a"' \
    --state-metadata=priority=high,tracking_number=12345
    --format=json

REST

Masukkan:

curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: ${PROJECT}" \
    --data-binary @- \
    https://recommender.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/recommenders/${RECOMMENDER}/recommendations/RECOMMENDATION_ID:STATE_CHANGE \
<< EOM
{
  "etag": "etag",
  "stateMetadata": STATE_METADATA
}
EOM

dengan:

  • STATE_CHANGE adalah status yang ingin Anda tandai ke rekomendasi. Nilai yang valid adalah:
    • mark-claimed untuk menandai rekomendasi sebagai telah diklaim.
    • mark-dismissed untuk menandai rekomendasi sebagai ditolak.
  • RECOMMENDATION_ID adalah ID rekomendasi yang Anda ambil dari panggilan sebelumnya untuk mencantumkan rekomendasi
  • etag adalah etag yang ditampilkan yang mewakili status rekomendasi
  • STATE_METADATA adalah kolom opsional dengan metadata tambahan tentang operasi. Tentukan metadata sebagai pasangan key:value. Kolom ini tersedia saat Anda menandai rekomendasi sebagai telah diklaim, berhasil, atau gagal.

Contoh:

curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: example-project" \
    --data-binary @- \
    https://recommender.googleapis.com/v1/projects/example-project/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations/8f20d509-83d2-45d2-8152-1b8d5d7d5831:markClaimed \
<< EOM
{
  "etag": "\"280b34810bba8a1a\""
  "stateMetadata": {
    "priority" : "high",
    "tracking_number": "12345"
  }
}
EOM

Operasi ini menampilkan entity Recommendation dalam format yang ditentukan setelah operasi berlangsung.

Outputnya mirip dengan hal berikut ini:

{
  "content": {
    "operationGroups": [ ... ]
  },
  "description": "Save cost by changing machine type from n1-standard-4 to custom-2-5120.",
  "etag": "\"5e3a63cccf1e0964\"",
  "lastRefreshTime": "2019-06-28T06:49:21Z",
  "name": "projects/32428390823/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations/a523ff7e-ed03-4143-a3a5-5b396b99cba9",
  "primaryImpact": { ... },
  "stateInfo": {
    "state": "CLAIMED"
  }
}

Perhatikan bahwa nilai kolom state telah diubah menjadi CLAIMED.

Menerapkan rekomendasi

Setelah menandai rekomendasi sebagai telah diklaim, Anda dapat menerapkan rekomendasi menggunakan perintah gcloud atau panggilan REST API yang khusus untuk jenis resource tersebut.

Misalnya, untuk mengubah ukuran instance VM sebagai respons terhadap rekomendasi dari pemberi rekomendasi ukuran instance VM, gunakan perintah gcloud Compute Engine atau panggilan ke REST API Compute Engine.

Saat melakukan operasi ini, Anda mengidentifikasi resource target menggunakan nilai kolom resource dalam array OperationsGroup dalam entity Recommendation yang ditampilkan. Kolom ini menggunakan format berikut:

//API_NAME/RESOURCE_PATH

Contoh:

//compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/instance-1"

Mengubah status rekomendasi

Setelah menerapkan rekomendasi, Anda dapat menandainya sebagai berhasil atau gagal.

Untuk menandai rekomendasi sebagai berhasil:

gcloud

Masukkan:

gcloud recommender recommendations STATE_CHANGE \
    RECOMMENDATION_ID \
    --project=${PROJECT} \
    --location=${LOCATION} \
    --recommender=${RECOMMENDER} \
    --etag=etag \
    --state-metadata=priority=high,tracking_number=12345
    --format=FORMAT

Dari mana

  • STATE_CHANGE adalah perubahan yang ingin Anda buat pada rekomendasi. Nilai yang valid adalah:
    • mark-succeeded untuk menandai rekomendasi sebagai berhasil.
    • mark-failed untuk menandai rekomendasi sebagai gagal.
  • STATE_METADATA adalah metadata opsional tentang operasi. Tentukan metadata sebagai daftar umum yang dipisahkan pasangan KEY=VALUE. Opsi ini tersedia saat Anda menandai rekomendasi sebagai telah diklaim, berhasil, atau gagal.

Contoh:

gcloud recommender recommendations mark-succeeded \
    a523ff7e-ed03-4143-a3a5-5b396b99cba9 \
    --project=example-project \
    --location=us-central1-a \
    --recommender=google.compute.instance.MachineTypeRecommender \
    --etag='"5e3a63cccf1e0964"' \
    --state-metadata=priority=high,tracking_number=12345
    --format=json

REST

Masukkan informasi berikut

curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: ${PROJECT}" \
    --data-binary @- \
    https://recommender.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/recommenders/${RECOMMENDER}/recommendations/RECOMMENDATION_ID:STATE_CHANGE \
<< EOM
{
  "etag": "etag"
  "stateMetadata": STATE_METADATA
}
EOM

dengan:

  • RECOMMENDATION_ID adalah ID rekomendasi yang Anda ambil dari panggilan sebelumnya untuk mencantumkan rekomendasi
  • STATE_CHANGE adalah perubahan yang ingin Anda buat pada rekomendasi. Nilai yang valid adalah:
    • markSucceeded untuk menandai rekomendasi sebagai berhasil.
    • markFailed untuk menandai rekomendasi sebagai gagal.
  • etag adalah etag yang ditampilkan yang mewakili status rekomendasi
  • STATE_METADATA adalah kolom opsional dengan metadata tambahan tentang operasi. Tentukan metadata sebagai pasangan key:value. Kolom ini tersedia saat Anda menandai rekomendasi sebagai telah diklaim, berhasil, atau gagal.

Contoh:

curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    -H "x-goog-user-project: example-project" \
    --data-binary @- \
    https://recommender.googleapis.com/v1/projects/example-project/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations/8f20d509-83d2-45d2-8152-1b8d5d7d5831:markSucceeded \
<< EOM
{
  "etag": "\"280b34810bba8a1a\""
  "stateMetadata": {
    "priority" : "high",
    "tracking_number": "12345"
  }
}
EOM

Operasi ini menampilkan entity Recommendation dalam format yang ditentukan setelah operasi berlangsung.

Outputnya mirip dengan hal berikut ini:

{
  "content": {
    "operationGroups": [ ... ]
  },
  "description": "Save cost by changing machine type from n1-standard-4 to custom-2-5120.",
  "etag": "\"5e3a63cccf1e053c\"",
  "lastRefreshTime": "2019-06-28T06:49:21Z",
  "name": "projects/32428390823/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations/a523ff7e-ed03-4143-a3a5-5b396b99cba9",
  "primaryImpact": { ... },
  "stateInfo": {
    "state": "SUCCEEDED",
    "stateMetadata": {
      "priority" : "high",
      "tracking_number": "12345"
    }
  }
}

Perhatikan bahwa nilai kolom state telah diubah menjadi SUCCEEDED.