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 é:
Liste as recomendações para um projeto específico.
Marque uma recomendação que você pretende aplicar como
claimed
ou que não pretende aplicar comodismissed
.Aplique a recomendação. Isso pode ser feito automaticamente usando o Active Assist no console Google Cloud ou manualmente usando os comandos da Google Cloud CLI, chamadas da API REST ou outras ferramentas.
Quando você aplica a recomendação manualmente, os comandos ou as chamadas usados são específicos do tipo de recurso. Por exemplo, para mudar o tamanho de uma instância de VM em resposta a uma recomendação do recomendador de dimensionamento de instâncias de VM, use os comandos
gcloud
do Compute Engine ou chamadas para a API REST do Compute Engine.Ao executar essas operações, você identifica o recurso de destino usando o valor do campo
resource
na matrizOperationsGroup
na entidadeRecommendation
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
Marque a recomendação como
succeeded
oufailed
.
Somente as recomendações recuperadas por meio da API podem ser usadas para interagir por meio dela ou do BigQuery Export.
Para informações sobre como mudar o estado das recomendações no console doGoogle Cloud , consulte a documentação do Active Assist ou do recomendador adequado.
Definir 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
em que:
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
.- Para comandos
LOCATION_ID é o Google Cloud local em que os recursos associados às recomendações estão localizados (por exemplo,
global
ouus-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 com informações sobre cada recomendador, incluindo locais compatíveis e códigos de recomendação.
Definir permissões
Você precisa ter permissões para acessar as recomendações no projeto de destino.
- Solicitantes que incluem um projeto de faturamento na solicitação. O projeto
usado na solicitação precisa estar em situação regular, e o usuário precisa
ter um papel no projeto que contenha a permissão
serviceusage.services.use
. O papel Consumidor do Service Usage tem a permissão necessária. - Cada recomendador requer permissões específicas. Consulte Recomendadores para ver uma tabela de links com informações sobre cada recomendador, incluindo as permissões necessárias.
Listar recomendações
Conforme mostrado na guia gcloud Beta, é possível listar todas as recomendações do seu projeto sem precisar especificar um local e um recomendador. Esse recurso está em pré-lançamento.
Para usar o recurso de GA, é preciso especificar um projeto, um local e um recomendador. Para mais detalhes, consulte a guia gcloud.
gcloud Beta
Digite o seguinte:
gcloud beta recommender recommendations list \ --project=${PROJECT} \ --format=FORMAT
em que FORMAT é um formato de saída compatível com gcloud
, como json
.
Por exemplo:
gcloud beta recommender recommendations list \ --project=example-project \ --format=json
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
).
Por 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.
O resultado será assim:
[ { "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 Google Cloud CLI
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.
Mudar o estado de uma recomendação
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 o conteúdo mais recente.
É possível marcar uma recomendação como dispensada para indicar que você não pretende aplicar as mudanças recomendadas ao recurso associado ou que não quer continuar vendo a recomendação. Quando uma recomendação é dispensada, ela não aparece mais como ATIVA. O recomendador pode continuar atualizando a recomendação com conteúdo mais recente.
Depois de aplicar uma recomendação, você poderá marcá-la como concluída ou com falha.
Para mudar o estado de uma recomendação, siga estas etapas:
gcloud
Digite o seguinte:
gcloud recommender recommendations STATE_CHANGE \ RECOMMENDATION_ID \ --project=${PROJECT} \ --location=${LOCATION} \ --recommender=${RECOMMENDER} \ --etag=ETAG \ --state-metadata=STATE_METADATA \ --format=FORMAT
Onde
- STATE_CHANGE é a alteração que você quer fazer em uma recomendação.
Os valores
válidos são:
mark-claimed
para marcar a recomendação como declarada.mark-dismissed
para marcar a recomendação como dispensada.mark-succeeded
para marcar a recomendação como bem-sucedida.mark-failed
para marcar a recomendação como reprovada.
- RECOMMENDATION_ID é o ID 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 são metadados opcionais 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.
Por 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:STATE_CHANGE \ << EOM { "etag": "ETAG" "stateMetadata": STATE_METADATA } EOM
em que:
- RECOMMENDATION_ID é o ID 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:
markClaimed
para marcar a recomendação como declarada.markDismissed
para marcar a recomendação como dispensada.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.
O resultado será assim:
{ "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
.