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 reivindicada ou que você não pretende aplicar como dispensada.
- Aplique a recomendação usando comandos
gcloud
ou chamadas da API REST específicas ao tipo de recurso (por exemplo, papéis do IAM ou instâncias de VM do Compute Engine). - Marque a recomendação como bem-sucedida ou não.
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 alterar o estado das recomendações no Console do Google Cloud, consulte a documentação da Central de recomendações ou a recommender adequada.
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 local do Google Cloud 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 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.
- 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 para 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"
Por 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 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.
Marcar uma recomendação como declarada ou dispensada
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 alterações recomendadas ao recurso associado ou que não quer continuar vendo a recomendação. Quando uma recomendação for dispensada, ela não aparecerá mais como ATIVA. O recomendador pode continuar atualizando a recomendação com conteúdo mais recente.
Para marcar uma recomendação como declarada ou dispensada, 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
Em que:
- STATE_CHANGE é o status que você quer marcar para 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.
- 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.
Por 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:STATE_CHANGE \ << EOM { "etag": "etag", "stateMetadata": STATE_METADATA } EOM
em que:
- STATE_CHANGE é o status que você quer marcar para 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.
- 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.
Por 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
Por 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.
Os valores
válidos são:
mark-succeeded
para marcar a recomendação como bem-sucedida.mark-failed
para marcar a recomendação como reprovada.
- 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.
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 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.
Por 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
.