Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Rotule automaticamente instâncias e discos do Google Cloud Compute Engine na criação

By Avi KeinanNov 1, 20204 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

Evite custos de nuvem que aparecem do nada rotulando suas instâncias já na criação.

Identificando as instâncias "João Ninguém"

Ao analisar o uso do seu Google Cloud Compute Engine, você pode se deparar com instâncias ou discos sem nome ou, pior ainda, com nomes pouco claros. Esses recursos podem ser puro desperdício de dinheiro — ou peças críticas para workloads de produção.

Algumas instâncias podem ter vários anos, sem que ninguém na empresa saiba para que servem ou tenha as credenciais para se conectar a elas.

Para evitar esse problema, as empresas adotam políticas de rotulagem que exigem rótulos como Name/Owner/Project/etc. em toda instância provisionada.

Não há custo adicional pelo uso de rótulos no Google Cloud Compute Engine.

…porém, como pessoas sobem instâncias e escrevem scripts de automação que sobem instâncias, esse processo está sujeito a erros.

Para contornar esses casos, criei uma solução de rotulagem automática para o Google Cloud (uma versão semelhante para AWS está disponível aqui) que aplica automaticamente o rótulo created-by nas instâncias e os rótulos created-by e instance nos discos.

Assim, no futuro, se alguém esbarrar em uma instância ou disco de finalidade desconhecida, esses rótulos vão facilitar a identificação de quem os configurou.

Os rótulos do Google Cloud são limitados a um conjunto específico de caracteres. Por isso, o script substitui o arroba (@) do e-mail do usuário por sublinhado ( _) e o ponto ( .) por hífen ( -).

Como funciona a rotulagem automática?

Visão geral do processo de rotulagem

Um usuário ou uma conta de serviço cria uma nova máquina no Compute Engine.

  1. A chamada de API é registrada no StackDriver. Por meio de um sink do StackDriver (também conhecido como Operations Logging), o evento é enviado ao Cloud Pub/Sub.
  2. O Cloud Pub/Sub aciona uma Cloud Function com as informações do evento.
  3. A Cloud Function aplica os rótulos na instância e nos discos dela.

Como implementar a rotulagem automática para instâncias e discos

Se for a primeira vez que você implanta uma function, confirme se a Cloud Build API está habilitada.

1. Crie uma conta de serviço dedicada com o mínimo de privilégios

Esta etapa é opcional, mas altamente recomendada!

Quando você cria uma nova cloud function, por padrão ela usa a conta de serviço do App Engine, com a permissão Editor em todo o projeto.

A permissão de Editor dá à function acesso para alterar recursos do projeto inteiro. Por segurança, o ideal é conceder o mínimo de permissões possível. Em caso de erro, a function ficará restrita a um conjunto reduzido de permissões, suficiente apenas para listar informações de instâncias e discos e definir rótulos para eles:

# GCP IAM Permissions required for the function:
compute.disks.get
compute.disks.setLabels
compute.instances.get
compute.instances.setLabels

Criar uma conta de serviço com um papel personalizado é um pouco trabalhoso e exige passos em várias telas. Para facilitar, seguem os comandos do gcloud para criar a conta de serviço:

# Replace <project-id> with your project id. gcloud iam roles create autolabel_instances  --title=autolabel-instances --project <project-id> --description='cloud function service account to label instanes and disks upon creation'  --permissions=compute.disks.get,compute.disks.setLabels,compute.instances.get,compute.instances.setLabels --stage=GAgcloud iam service-accounts create autolabel-instancesgcloud projects add-iam-policy-binding <project-id> --member serviceAccount:autolabel-instances@<project-id>.iam.gserviceaccount.com --role projects/<project-id>/roles/autolabel_instancesgcloud projects add-iam-policy-binding <project-id> --member serviceAccount:autolabel-instances@<project-id>.iam.gserviceaccount.com --role roles/logging.logWriter

O e-mail da nova conta de serviço é autolabel-instances@ .iam.gserviceaccount.com

2. Acesse a página Cloud Functions e clique em CREATE FUNCTION.

a) Dê um nome à function e mude o gatilho para Cloud Pub/Sub. Depois, na caixa abaixo, clique em CREATE A TOPIC e defina um título para o novo tópico.

b) Se você pulou a criação da conta de serviço, clique nos botões SAVE e Next. Caso contrário, clique em VARIABLES, NETWORKING AND ADVANCED SETTINGS, selecione a conta de serviço que você criou e clique em SAVE e NEXT.

c) Mude o runtime da function para Python 3.7.

Em seguida, clique em Source code e mude para ZIP Upload. Você pode baixar o arquivo zip no nosso repositório no GitHub (que também contém o código-fonte da function). Depois, clique em DEPLOY.

3. Acesse o StackDriver Logging

Na caixa de pesquisa, clique na seta (à direita) e mude para o filtro avançado. Cole o seguinte:

resource.type="gce_instance"
jsonPayload.event_subtype="compute.instances.insert"
jsonPayload.event_type="GCE_API_CALL"

Em seguida, clique em CREATE SINK. Dê um nome ao Sink, mude o serviço do Sink para Pub/Sub e defina o destino do Sink como o tópico do Pub/Sub criado na etapa anterior. Por fim, clique em Create Sink.

4. Suba uma instância para testar se a function está funcionando.

Acesse a página VM instances: a nova instância deve aparecer rotulada automaticamente.

Página VM instances

Acesse a página Disks: os discos da instância também devem aparecer rotulados automaticamente.

Página Disks

Observações:

Esta solução rotula apenas instâncias criadas depois que a Cloud Function for instalada.

Disponibilizamos como código aberto o Iris — uma solução completa criada pela DoiT International para rotular automaticamente recursos do Google Cloud.