Ao projetar e desenvolver uma nova infraestrutura no Google Cloud, você acaba testando todo tipo de recurso. Isso deixa o projeto bagunçado — e ainda gera custos enquanto esses recursos continuam rodando.
Dá para apagar os recursos manualmente, mas pode ser complicado encontrar tudo entre os diversos serviços do GCP: Compute, Containers, AppEngine, Cloud SQL e por aí vai.
Criei o Safe Scrub open source para tornar essa tarefa fácil — e segura!

Segurança em primeiro lugar
O Safe Scrub foi desenhado para ser seguro.
O Safe Scrub não apaga recursos; em vez disso, ele gera um script capaz de apagá-los.
Script de exclusão transparente
Esse script de exclusão é transparente — como ele nada mais é do que uma lista de comandos gcloud``delete, fica fácil entender o que ele vai fazer com seus recursos. Depois de gerar o script, revise cada linha para ver exatamente o que será apagado e só então execute-o.
Esse é o recurso de segurança mais importante, mas há outros.
Conta e projeto explícitos
O Safe Scrub exige um arquivo de chave JSON com credenciais de uma service account, em vez da conta de usuário com a qual você está logado. A ideia é forçar a escolha consciente de um papel; a service account deve ter um papel sem permissões de escrita, como Project Viewer, já que o script de geração não precisa nem usa permissões de escrita.
Além disso, você pode atribuir um papel ainda mais restrito caso queira listar apenas recursos de determinados tipos. Falhar por falta de permissão não é um problema. Se o papel for restritivo demais (ou se uma API do GCP ainda não estiver habilitada), o Safe Scrub segue normalmente, sem listar apenas o recurso indisponível. Ele só exibe uma mensagem de erro e continua.
Diferentemente do próprio gcloud, o Safe Scrub exige que você informe o projeto explicitamente, evitando o uso de um projeto padrão e a listagem acidental de recursos que você não pretendia apagar. O script de exclusão gerado também especifica o projeto em cada comando, para que a exclusão não acabe rodando, sem querer, contra o seu projeto padrão atual.
Filtragem
O Safe Scrub oferece dois tipos de filtragem.
Primeiro, há uma opção de linha de comando para você escolher só os recursos desejados. Você pode filtrar por label, nome, data de criação e muito mais, usando todo o poder da filtragem do gcloud. (Para buckets do Cloud Storage, em que se usa gsutil em vez de gcloud, só são aceitos filtros simples de igualdade de label com chave única (key=value1). Caso contrário, o filtro é ignorado.)
Segundo, o Safe Scrub aceita uma lista de itens a preservar em exclusions.txt. Recursos cujas URIs contenham qualquer uma dessas strings ficarão de fora do script de exclusão. Para usar esse recurso, execute o Safe Scrub, anote os itens que não devem ser apagados no futuro e adicione a URI completa ou uma parte identificadora dela ao exclusions.txt. (Para Cloud Functions, usa-se o nome em vez da URI, por causa de um bug no gcloud.)
Por exemplo, quando estas linhas aparecem:
networks/default firewalls/default
as redes default e também os firewalls default (cujas URIs têm o formato https://www.googleapis.com/compute/v1/projects/my-project/global/firewalls/default-allow-https) não serão apagados.
Acompanhando o processo de exclusão
Na primeira vez em que rodar seus scripts de exclusão, é natural querer acompanhar o processo em tempo real. O Safe Scrub adiciona set -x no início do script de exclusão para você ter saída de depuração.
Para facilitar o monitoramento durante a exclusão, o Safe Scrub gera um script sequencial comum. Mas você também pode configurá-lo, com a flag -b, para gerar comandos em background (assíncronos), de modo que a exclusão de vários recursos aconteça em paralelo. É mais rápido, porém mais difícil de acompanhar, e há o risco de sobrecarregar os sistemas com chamadas concorrentes demais.
Próximos passos: revisar e executar
Esse primeiro passo apenas entrega um script de exclusão. O próximo é revisá-lo e remover linhas referentes a recursos que você queira manter. Aproveite também para adicionar linhas ao exclusions.txt para filtragens futuras.
Apagando recursos de fato
Quando estiver pronto para apagar, rode o script de exclusão em uma conta que tenha as permissões de escrita necessárias, como Project Editor.
Modo perigoso
Adoramos automação na nuvem, mas, quando se trata de exclusão em massa, é preciso redobrar o cuidado e acompanhar cada passo manualmente. Ainda assim, em um projeto de desenvolvimento ou QA, você pode refinar a configuração do Safe Scrub a ponto de se sentir à vontade para gerar e rodar o script de exclusão de forma automática, num único passo. Para isso, basta canalizar a saída para o bash, como mostrado em dangerous-usage-example.sh. Nesse caso, sua service account precisa ter permissões de leitura e escrita, como Project Editor, por exemplo.
Casos de uso
Dev e QA vs. produção
O Safe Scrub é voltado para projetos de desenvolvimento e QA, em que você quer começar do zero ao final do dia ou antes de uma nova rodada de testes. Dificilmente será útil em projetos de produção, nos quais é preciso avaliar as possíveis dependências entre componentes antes de apagar qualquer coisa.
Desbloqueando dependências
Também ajuda quando uma dependência avulsa está impedindo a exclusão de outro recurso. Por exemplo, não dá para apagar um cluster do Google Kubernetes Engine se houver um backend apontando para ele — mesmo que esse backend não esteja sendo usado por nenhum load balancer. Use o Safe Scrub para gerar comandos de exclusão para todos os recursos, escolha a linha de comando necessária para apagar o backend e libere o bloqueio daquele cluster.
Escopo atual e possibilidades futuras
Serviços suportados e não suportados
O Google Cloud tem mais de 90 produtos, e o Safe Scrub não cobre todos. Foquei nos serviços importantes mais comuns, que costumam ser criados e destruídos em desenvolvimento e QA típicos. Isso inclui tipos de recursos do GCE, PubSub, App Engine, Cloud SQL, Cloud Storage, Functions e GKE. Entre os serviços não suportados estão Composer, Data Catalog, Data Proc e muitos outros. A lista completa de serviços suportados e não suportados aparece no texto de uso. (Execute ./generate-deletion-script.sh.)
Tipos de recursos suportados e não suportados
Nem todos os tipos de recursos de cada serviço são suportados, mas acredito ter coberto os mais relevantes — deixando de fora, em especial, aqueles cuja exclusão é muito arriscada. Por exemplo, no App Engine, são suportados services, versions, instances e firewall rules, mas certificados SSL não. Se você quiser mais APIs ou tipos de recursos, envie um pull request ou abra uma issue no GitHub.
Opções de implementação futuras
Uma versão futura do Safe Scrub poderá usar o comando gcloud resources list (em alpha em junho de 2020) para capturar todos os recursos. Mesmo assim, ainda não está claro se seguiremos esse caminho: alguns tipos de recursos não se prestam à exclusão (como IAM, Secrets e certificados SSL, em que você correria o risco de apagar algo importante). Além disso, alguns tipos têm comandos de exclusão diferentes. (Por exemplo, usamos gsutil em vez de gcloud para Cloud Storage, e usaremos bq para BigQuery.)
Primeiros passos
Clique aqui para baixar o Safe Scrub open source.
Descompacte e execute ./generate-deletion-script.sh para ver as instruções de uso; o arquivo usage-example.sh traz um exemplo.
O quick-start mais simples é o seguinte:
- Baixe uma chave para uma service account com o papel Project Viewer, salvando-a como
project-viewer-credentials.jsonno diretório do Safe Script. - Em seguida, execute
./generate-deletion-script.sh -p <YOUR_PROJECT_NAME>.