Como usar a API: recomendações

Esta página explica como visualizar e gerenciar recomendações no Recommender usando comandos gcloud ou a API REST.

Uma interação de recomendação típica com a API Recommender é:

Para informações sobre como alterar o estado das recomendações no Console do Google Cloud, consulte a documentação da Central de recomendações ou a recomendação adequada.

Defina o projeto padrão

Defina o projeto padrão, caso ainda não tenha feito isso:

gcloud config set project PROJECT_ID

onde PROJECT_ID é o código de seu projeto.

Definir as variáveis de ambiente

Defina variáveis de ambiente para interações do Recommender:

PROJECT=TARGET_PROJECT_ID
LOCATION=LOCATION_ID
RECOMMENDER=RECOMMENDER_ID

onde:

  • TARGET_PROJECT_ID é o projeto cujas recomendações você quer listar. Pode ser um projeto diferente do atual.

    • Para comandos gcloud, use o código do projeto
    • Para solicitações de API, você pode usar o número ou o ID do projeto. O número do projeto é recomendado.

    O número do projeto é retornado nas respostas dos comandos de API e gcloud.

  • LOCATION_ID é o local do Google Cloud em que os recursos associados às recomendações estão localizados (por exemplo, global ou us-central1-a).

  • RECOMMENDER_ID é o ID de recomendação totalmente qualificado (por exemplo, google.compute.instance.MachineTypeRecommender).

Consulte Recomendadores para ver uma tabela de links para informações sobre cada recomendação, incluindo locais compatíveis e códigos de recomendações.

Definir permissões

Você precisa ter permissões para acessar as recomendações no projeto de destino. Essas permissões variam de acordo com o recomendado. Consulte Recomendadores para ver uma tabela de links para informações sobre cada recomendador, incluindo as permissões necessárias.

Listar recomendações

Para listar recomendações no projeto de destino:

gcloud

Digite o seguinte:

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

em que FORMAT é um formato de saída gcloud compatível (por exemplo, json).

Exemplo:

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

REST

Digite o seguinte:

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"

Exemplo:

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"

Essa operação gera as recomendações atuais de dimensionamento de instâncias de VM no projeto de destino como uma lista de entidades Recommendation no formato especificado.

A resposta será semelhante a:

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

Observe que as recomendações retornadas incluem os seguintes campos:

  • Um campo name no seguinte formato:

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

    em que RECOMMENDATION_ID identifica exclusivamente a recomendação

  • Um campo etag associado ao estado de recomendação atual.

Quando você faz referência a uma recomendação usando comandos gcloud ou chamadas de API REST subsequentes, faz referência ao código da recomendação e à etag, o que garante que qualquer operação seja realizada somente se a recomendação não tiver sido modificada desde a última vez em que foi recuperada.

Marcar uma recomendação como reivindicada

Você pode marcar uma recomendação como reivindicada para indicar que pretende aplicar as alterações recomendadas ao recurso associado. Quando uma recomendação é reivindicada, seu nome de usuário é atribuído como o ator da recomendação e o Recomendador não atualiza a recomendação com conteúdo mais recente.

Para marcar uma recomendação como reivindicada:

gcloud

Digite o seguinte:

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

onde:

  • RECOMMENDATION_ID é o código de uma recomendação que você recuperou de uma chamada anterior para listar recomendações
  • etag é a etag retornada que representa o estado da recomendação.
  • STATE_METADATA é um metadado opcional sobre a operação. Especifique os metadados como uma lista separada por vírgulas de pares KEY=VALUE. Essa opção está disponível quando você marca uma recomendação como reivindicada, bem-sucedida ou com falha.

Exemplo:

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

Digite o seguinte:

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

onde:

  • RECOMMENDATION_ID é o código de uma recomendação que você recuperou de uma chamada anterior para listar recomendações
  • etag é a etag retornada que representa o estado da recomendação.
  • STATE_METADATA é um campo opcional com metadados adicionais sobre a operação. Especifique os metadados como pares de key:value. Esse campo está disponível quando você marca uma recomendação como reivindicada, bem-sucedida ou falha.

Exemplo:

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

Essa operação retorna a entidade Recommendation no formato especificado depois que a operação ocorreu.

A resposta será semelhante a:

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

Observe que o valor do campo state foi alterado para CLAIMED.

Como aplicar recomendações

Depois de marcar uma recomendação como reivindicada, é possível aplicá-la usando comandos gcloud ou chamadas da API REST específicas do tipo de recurso.

Por exemplo, para alterar o tamanho de uma instância de VM em resposta a uma recomendação do recomendador de dimensionamento da instância de VM, use o Compute Engine gcloud comandos ou chamadas para o Compute Engine API REST.

Ao executar essas operações, você identifica o recurso de destino usando o valor do campo resource na matriz OperationsGroup na entidade Recommendation retornada. Esse campo está no seguinte formato:

//API_NAME/RESOURCE_PATH

Exemplo:

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

Como alterar o estado de uma recomendação

Depois de aplicar uma recomendação, você poderá marcá-la como concluída ou com falha.

Para marcar uma recomendação como bem-sucedida:

gcloud

Digite o seguinte:

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

Onde

  • STATE_CHANGE é a alteração que você quer fazer em uma recomendação.
  • STATE_METADATA são metadados opcionais sobre a operação. Especifique os metadados como uma lista separada por pares de pares KEY=VALUE. Essa opção está disponível quando você marca uma recomendação como reivindicada, bem-sucedida ou com falha.

Os valores válidos são:

  • mark-succeeded para marcar a recomendação como concluída.
  • mark-failed para marcar a recomendação como reprovada.

Exemplo:

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

Digite o seguinte

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

onde:

  • RECOMMENDATION_ID é o código de uma recomendação que você recuperou de uma chamada anterior para listar recomendações
  • STATE_CHANGE é a alteração que você quer fazer em uma recomendação. Os valores válidos são:
    • markSucceeded para marcar a recomendação como bem-sucedida.
    • markFailed para marcar a recomendação como reprovada.
  • etag é a etag retornada que representa o estado da recomendação.
  • STATE_METADATA é um campo opcional com metadados adicionais sobre a operação. Especifique os metadados como pares de key:value. Esse campo está disponível quando você marca uma recomendação como reivindicada, bem-sucedida ou falha.

Exemplo:

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

Essa operação retorna a entidade Recommendation no formato especificado depois que a operação ocorreu.

A resposta será semelhante a:

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

Observe que o valor do campo state foi alterado para SUCCEEDED.