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
claimedou 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
gclouddo 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
resourcena matrizOperationsGroupna entidadeRecommendationretornada. 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
succeededoufailed.
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,
globalouus-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
nameno seguinte formato:projects/PROJECT_ID/locations/LOCATION/recommenders/RECOMMENDER_ID/recommendations/RECOMMENDATION_ID
em que RECOMMENDATION_ID identifica exclusivamente a recomendação
Um campo
etagassociado 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-claimedpara marcar a recomendação como declarada.mark-dismissedpara marcar a recomendação como dispensada.mark-succeededpara marcar a recomendação como bem-sucedida.mark-failedpara 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:
markClaimedpara marcar a recomendação como declarada.markDismissedpara marcar a recomendação como dispensada.markSucceededpara marcar a recomendação como bem-sucedida.markFailedpara 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.