Recomendaciones de uso de la API

En esta página, se explica cómo ver y administrar recomendaciones en el recomendador mediante los comandos de gcloud o la API de REST.

La siguiente es una interacción de recomendación típica con la API del recomendador:

Para obtener información sobre cómo cambiar el estado de las recomendaciones en Google Cloud Console, consulta la documentación del Centro de recomendaciones o el recomendador apropiado.

Configura el proyecto predeterminado

Configura el proyecto predeterminado si aún no lo hiciste:

gcloud config set project PROJECT_ID

En el ejemplo anterior, PROJECT_ID es el ID de tu proyecto.

Configure las variables de entorno

Configura las variables de entorno para las interacciones del Recomendador:

PROJECT=TARGET_PROJECT_ID
LOCATION=LOCATION_ID
RECOMMENDER=RECOMMENDER_ID

Donde:

  • TARGET_PROJECT_ID es el proyecto cuyas recomendaciones deseas enumerar. Este puede ser un proyecto diferente del actual.

    • Para los comandos de gcloud, debes usar el ID del proyecto
    • Para las solicitudes a la API, puedes usar el número de proyecto o el ID del proyecto. Se recomienda usar el número del proyecto.

    El número de proyecto se muestra en las respuestas de la API y los comandos de gcloud.

  • LOCATION_ID es la ubicación de Google Cloud en la que se encuentran los recursos asociados con las recomendaciones (por ejemplo, global o us-central1-a).

  • RECOMMENDER_ID es el ID del recomendador completamente calificado (por ejemplo, google.compute.instance.MachineTypeRecommender).

Consulta Recomendadores para obtener una tabla de vínculos a información sobre cada recomendador, incluidas las ubicaciones admitidas y los ID de recomendación.

Configurar permisos

Debes tener permisos para acceder a las recomendaciones en el proyecto de destino. Estos permisos varían según el recomendador. Consulta Recomendadores para obtener una tabla de vínculos con información sobre cada uno, incluidos los permisos necesarios.

Enumerar recomendaciones

Para mostrar una lista de las recomendaciones en el proyecto de destino, haz lo siguiente:

gcloud

Ingrese lo siguiente:

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

En el comando anterior, FORMAT es un formato de salida de gcloud compatible (por ejemplo, json).

Por ejemplo:

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

REST

Ingrese lo siguiente:

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"

Por ejemplo:

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"

Esta operación genera las recomendaciones actuales sobre el tamaño de las instancias de VM en el proyecto de destino como una lista de entidades Recommendation en el formato especificado.

El resultado es similar al siguiente:

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

Ten en cuenta que las recomendaciones que se muestran incluyen los siguientes campos:

  • Un campo name en el siguiente formato:

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

    RECOMMENDATION_ID : Identifica de forma única la recomendación

  • Un campo etag asociado con el estado actual de la recomendación.

Cuando haces referencia a una recomendación mediante comandos de gcloud posteriores o llamadas a la API de REST, haces referencia al ID de recomendación y al ETag, lo que garantiza que cualquier operación se realice solo si la recomendación no se ha se modificó desde su última recuperación.

Marca una recomendación como reclamada

Puedes marcar una recomendación como reclamada para indicar que tienes la intención de aplicar los cambios recomendados en el recurso asociado. Cuando se reclama una recomendación, el nombre de usuario se asigna como la entidad que actúa para la recomendación, y el recomendador no la actualiza con contenido más reciente.

Para marcar una recomendación como reclamada, sigue estos pasos:

gcloud

Ingresa lo siguiente:

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

Donde:

  • RECOMMENDATION_ID es el ID de una recomendación que recuperaste de una llamada anterior para hacer una lista de recomendaciones.
  • etag es la ETag que se muestra que representa el estado de recomendación
  • STATE_METADATA es un metadato opcional sobre la operación. Especifica los metadatos como una lista separada por comas de pares KEY=VALUE. Esta opción está disponible cuando marcas una recomendación como reclamada, exitosa o fallida.

Por ejemplo:

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

Ingrese lo siguiente:

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:markClaimed \
<< EOM
{
  "etag": "etag",
  "stateMetadata": STATE_METADATA
}
EOM

Donde:

  • RECOMMENDATION_ID es el ID de una recomendación que recuperaste de una llamada anterior para hacer una lista de recomendaciones.
  • etag es la ETag que se muestra que representa el estado de recomendación.
  • STATE_METADATA es un campo opcional con metadatos adicionales sobre la operación. Especifica los metadatos como pares key:value. Esta opción está disponible cuando marcas una recomendación como reclamada, exitosa o con errores.

Por ejemplo:

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

Esta operación muestra la entidad Recommendation en el formato especificado después de que se realiza la operación.

El resultado es similar al siguiente:

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

Observa que el valor del campo state cambió a CLAIMED.

Aplica recomendaciones

Una vez que marcaste una recomendación como reclamada, puedes aplicarla mediante los comandos de gcloud o las llamadas a la API de REST que son específicas del tipo de recurso.

Por ejemplo, para cambiar el tamaño de una instancia de VM en respuesta a una recomendación del recomendador de tamaño de instancia de VM, usa los comandos gcloud de Compute Engine o las llamadas a la API de REST de Compute Engine

Cuando realizas estas operaciones, puedes identificar el recurso de destino con el valor del campo resource en el array OperationsGroup en la entidad Recommendation que se muestra. Este campo está en el siguiente formato:

//API_NAME/RESOURCE_PATH

Por ejemplo:

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

Cambia el estado de una recomendación

Después de aplicar una recomendación, puedes marcarla como exitosa o fallida.

Para marcar una recomendación como exitosa, haz lo siguiente:

gcloud

Ingrese lo siguiente:

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

Donde

  • STATE_CHANGE es el cambio que deseas hacer en una recomendación.
  • STATE_METADATA es un metadato opcional sobre la operación. Especifica los metadatos como una lista separada por comas de pares KEY=VALUE. Esta opción está disponible cuando marcas una recomendación como reclamada, exitosa o fallida.

Estos son los valores válidos:

  • mark-succeeded para marcar la recomendación como exitosa.
  • mark-failed para marcar la recomendación con errores.

Por ejemplo:

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

Ingrese lo siguiente

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:markSucceeded \
<< EOM
{
  "etag": "etag"
  "stateMetadata": STATE_METADATA
}
EOM

Donde:

  • RECOMMENDATION_ID es el ID de una recomendación que recuperaste de una llamada anterior para hacer una lista de recomendaciones.
  • STATE_CHANGE es el cambio que deseas hacer en una recomendación. Estos son los valores válidos:
    • markSucceeded para marcar la recomendación como exitosa.
    • markFailed para marcar la recomendación como con errores.
  • etag es la ETag que se muestra que representa el estado de recomendación
  • STATE_METADATA es un campo opcional con metadatos adicionales sobre la operación. Especifica los metadatos como pares key:value. Esta opción está disponible cuando marcas una recomendación como reclamada, exitosa o con errores.

Por ejemplo:

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

Esta operación muestra la entidad Recommendation en el formato especificado después de que se realiza la operación.

El resultado es similar al siguiente:

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

Observa que el valor del campo state cambió a SUCCEEDED.