Checkpoints
Create Persistent Disk
/ 10
Create a VM instance with Persistent Disk
/ 10
Detach the orphaned disk from the VM
/ 10
Deploy the Cloud Function
/ 20
Create a Cloud Scheduler task to run the Cloud Function
/ 20
Test the job by manually triggering it
/ 30
Como limpar discos permanentes órfãos e não utilizados
GSP648
Visão geral
Neste laboratório, você usará o Cloud Functions e o Cloud Scheduler para identificar e limpar recursos de nuvem desperdiçados. Neste caso, você agendará uma função do Cloud para identificar e limpar discos permanentes órfãos e não utilizados.
Pré-requisitos
- Criar dois discos permanentes
- Criar uma VM que use um dos discos
- Desconectar o disco da VM
- Revisar o código da função do Cloud
- Implantar a função do Cloud
- Testar a função do Cloud usando jobs do Cloud Scheduler
Arquitetura
O diagrama a seguir descreve a arquitetura usada na primeira seção do laboratório, em que você agenda uma função do Cloud para identificar e limpar discos permanentes órfãos e não utilizados.
Configuração
Nesta seção, você vai definir a infraestrutura e as identidades necessárias para concluir o laboratório.
Antes de clicar no botão Start Lab
Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
Confira os requisitos para concluir o laboratório:
- Acesso a um navegador de Internet padrão (recomendamos o Chrome).
- Tempo para concluir o laboratório---não se esqueça: depois de começar, não será possível pausar o laboratório.
Como iniciar seu laboratório e fazer login no console do Google Cloud
-
Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento. No painel Detalhes do laboratório à esquerda, você vai encontrar o seguinte:
- O botão Abrir console do Google Cloud
- O tempo restante
- As credenciais temporárias que você vai usar neste laboratório
- Outras informações, se forem necessárias
-
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta. -
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
{{{user_0.username | "Nome de usuário"}}} Você também encontra o Nome de usuário no painel Detalhes do laboratório.
-
Clique em Seguinte.
-
Copie a Senha abaixo e cole na caixa de diálogo de boas-vindas.
{{{user_0.password | "Senha"}}} Você também encontra a Senha no painel Detalhes do laboratório.
-
Clique em Seguinte.
Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud. Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais. -
Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Ativar o Cloud Shell
O Cloud Shell é uma máquina virtual com várias ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud. O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
- Clique em Ativar o Cloud Shell na parte de cima do console do Google Cloud.
Depois de se conectar, vai notar que sua conta já está autenticada, e que o projeto está configurado com seu PROJECT_ID. A saída contém uma linha que declara o projeto PROJECT_ID para esta sessão:
gcloud
é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
- (Opcional) É possível listar o nome da conta ativa usando este comando:
-
Clique em Autorizar.
-
A saída será parecida com esta:
Saída:
- (Opcional) É possível listar o ID do projeto usando este comando:
Saída:
Exemplo de saída:
gcloud
, acesse o guia com informações gerais sobre a gcloud CLI no Google Cloud.
Tarefa 1: ativar as APIs e clonar os repositórios
-
No Cloud Shell, ative a API Cloud Scheduler:
gcloud services enable cloudscheduler.googleapis.com -
Clone o repositório:
gsutil cp -r gs://spls/gsp648 . && cd gsp648 -
Defina as variáveis de ambiente e a pasta do repositório como $WORKDIR, onde você vai executar todos os comandos relacionados a este laboratório:
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) WORKDIR=$(pwd) -
Defina a região do projeto neste laboratório:
gcloud config set compute/region {{{project_0.default_region | "REGION"}}} -
Crie uma variável para a região:
export REGION={{{project_0.default_region | Region}}} -
Crie uma variável para a zona:
export ZONE={{{project_0.default_zone | Zone}}}
Saiba mais na documentação Regiões e zonas.
gcloud
na sua máquina, as configurações continuam as mesmas em todas as sessões. Porém, no Cloud Shell, elas precisam ser definidas a cada nova sessão ou reconexão.
Tarefa 2: criar discos permanentes
-
No Cloud Shell, acesse o diretório unattached-pd:
cd $WORKDIR/unattached-pd -
Exporte os nomes dos discos como variáveis:
export ORPHANED_DISK=orphaned-disk export UNUSED_DISK=unused-disk -
Crie dois discos:
gcloud compute disks create $ORPHANED_DISK --project=$PROJECT_ID --type=pd-standard --size=500GB --zone=$ZONE gcloud compute disks create $UNUSED_DISK --project=$PROJECT_ID --type=pd-standard --size=500GB --zone=$ZONE O exemplo usa a região
, mas é possível escolher outra e usá-la no restante do laboratório. -
Confirme se foram criados dois discos:
gcloud compute disks list A resposta será semelhante a esta:
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS orphaned-disk {{{project_0.default_zone | Zone}}} zone 500 pd-standard READY unused-disk {{{project_0.default_zone | Zone}}} zone 500 pd-standard READY
Testar a tarefa concluída
Clique em Verificar meu progresso para conferir a tarefa realizada. Se você tiver criado um disco permanente, verá uma pontuação de avaliação.
Tarefa 3: criar uma VM e inspecionar os discos
-
No Cloud Shell, crie uma instância:
gcloud compute instances create disk-instance \ --zone=$ZONE \ --machine-type=n1-standard-1 \ --disk=name=$ORPHANED_DISK,device-name=$ORPHANED_DISK,mode=rw,boot=no -
Inspecione o disco que foi anexado à VM:
gcloud compute disks describe $ORPHANED_DISK --zone=$ZONE --format=json | jq O resultado será assim:
{ "creationTimestamp": "2019-06-12T12:21:25.546-07:00", "id": "7617542552306904666", "kind": "compute#disk", "labelFingerprint": "42WmSpB8rSM=", "lastAttachTimestamp": "2019-06-12T12:24:53.989-07:00", "name": "orphaned-disk", "physicalBlockSizeBytes": "4096", "selfLink": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/disks/orphaned-disk", "sizeGb": "500", "status": "READY", "type": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/diskTypes/pd-standard", "users": [ "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/instances/disk-instance" ], "zone": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}" } No exemplo de código anterior, observe o seguinte:
-
users
identifica a VM à qual o disco está conectado. -
lastAttachTimestamp
identifica quando o disco foi conectado pela última vez a uma VM.
-
Testar a tarefa concluída
Clique em Verificar meu progresso para conferir a tarefa realizada. Se você tiver criado uma instância de VM com disco permanente, verá uma pontuação de avaliação.
-
Desconecte o disco órfão da VM:
gcloud compute instances detach-disk disk-instance --device-name=$ORPHANED_DISK --zone=$ZONE -
Inspecione o disco órfão:
gcloud compute disks describe $ORPHANED_DISK --zone=$ZONE --format=json | jq O resultado será assim:
{ "creationTimestamp": "2019-06-12T12:21:25.546-07:00", "id": "7617542552306904666", "kind": "compute#disk", "labelFingerprint": "42WmSpB8rSM=", "lastAttachTimestamp": "2019-06-12T12:24:53.989-07:00", "lastDetachTimestamp": "2019-06-12T12:34:56.040-07:00", "name": "orphaned-disk", "physicalBlockSizeBytes": "4096", "selfLink": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/disks/orphaned-disk", "sizeGb": "500", "status": "READY", "type": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}/diskTypes/pd-standard", "zone": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/{{{project_0.default_zone | Zone}}}" } No exemplo de código anterior, observe o seguinte:
- O disco não tem
users
listados, o que indica que ele não está em uso no momento. - Existe agora uma entrada
lastDetachTimestamp
, que indica quando o disco foi desconectado de uma VM pela última vez e, portanto, quando deixou de ser usado. - O campo
lastAttachTimestamp
ainda está presente.
- O disco não tem
Testar a tarefa concluída
Clique em Verificar meu progresso para conferir a tarefa realizada. Se você tiver desconectado o disco órfão da VM, verá uma pontuação de avaliação.
Tarefa 4: revisar o código da função do Cloud
-
No Cloud Shell, gere a seção do código que recupera todos os discos permanentes no projeto:
cat $WORKDIR/unattached-pd/main.py | grep "(request)" -A 12 O resultado é o seguinte:
def delete_unattached_pds(request): # get list of disks and iterate through it: disksRequest = compute.disks().aggregatedList(project=project) while disksRequest is not None: diskResponse = disksRequest.execute() for name, disks_scoped_list in diskResponse['items'].items(): if disks_scoped_list.get('warning') is None: # got disks for disk in disks_scoped_list['disks']: # iterate through disks diskName = disk['name'] diskZone = str((disk['zone'])).rsplit('/',1)[1] print (diskName) print (diskZone) A função usa o método
aggregatedList
para buscar todos os discos permanentes no projeto do Google Cloud onde é executado e faz a iteração em cada um dos discos. -
Gere a seção do código que verifica o campo
lastAttachTimestamp
e exclui o disco se ele não existir:cat $WORKDIR/unattached-pd/main.py | grep "handle never" -A 11 O resultado é o seguinte:
# handle never attached disk - delete it # lastAttachedTimestamp is not present try: if disk["lastAttachTimestamp"] is None: print ("none!") except KeyError: print ("disk " + diskName + " was never attached - deleting") deleteRequest = compute.disks().delete(project=project, zone=diskZone, disk=diskName) deleteResponse = deleteRequest.execute() waitForZoneOperation(deleteResponse, project, diskZone) print ("disk " + diskName + " was deleted") continue Esta seção exclui o disco se
lastAttachTimestamp
não estiver presente, significando que ele nunca foi usado. -
Gere a seção do código que calcula a idade do disco, se ele for órfão, cria um snapshot dele e o exclui:
cat $WORKDIR/unattached-pd/main.py | grep "handle detached" -A 32 O resultado é o seguinte:
# handle detached disk - snapshot and delete # lastAttachTimestamp is present AND users is not present try: if disk['users'] is None and disk['lastDetachTimestamp'] is not None: print ("users is none") except KeyError: print ("disk " + diskName + " has no users and has been detached") detachTimestamp = dateutil.parser.parse(disk['lastDetachTimestamp']) detachedFor = pytz.utc.localize(datetime.utcnow()) - detachTimestamp print ("disk has been detached for " + str(detachedFor)) # update this for your preferred age if detachedFor.days > -1: # take a snapshot snapShotName = diskName + str(int(time.time())) print ("taking snapshot: " + snapShotName) snapshotBody = { "name": snapShotName } snapshotRequest = compute.disks().createSnapshot(project=project, zone=diskZone, disk=diskName, body=snapshotBody) snapshotResponse = snapshotRequest.execute() waitForZoneOperation(snapshotResponse, project, diskZone) print ("snapshot completed") # delete the disk print ("deleting disk " + diskName) deleteRequest = compute.disks().delete(project=project, zone=diskZone, disk=diskName) deleteResponse = deleteRequest.execute() waitForZoneOperation(deleteResponse, project, diskZone) print ("disk " + diskName + " was deleted") continue Esta seção do código é usada quando o disco tem usuários listados e
lastDetachTimestamp
está presente. Isso significa que o disco não está em uso agora, mas foi usado em algum momento. Nesse caso, a função do Cloud cria um snapshot do disco para reter os dados e depois exclui o disco. -
No Cloud Shell, clique em Abrir editor e edite o arquivo
main.py
.
-
Acesse
gsp648/unattached-pd
. -
Abra o
main.py
. -
Edite a linha 15 do arquivo e substitua
automating-cost-optimization
pelo ID do projeto, que deve ser semelhante a:project = 'qwiklabs-gcp-b5dbc291a25a68db' -
Selecione Arquivo > Salvar para salvar o arquivo.
Tarefa 5: implantar a função do Cloud
-
No Cloud Shell, implante a função do Cloud (clique em Abrir terminal, se necessário):
gcloud functions deploy delete_unattached_pds --trigger-http --runtime=python39 --region {{{project_0.default_region | Region}}} Observação: digite S quando for exibida a pergunta: Permitir invocações não autenticadas da nova função [delete_unattached_pds]? (S/N)?
Observação: a implantação da função do Cloud pode levar de 2 a 5 minutos, dependendo da região. -
Capture o URL do gatilho da função do Cloud como uma variável de ambiente:
export FUNCTION_URL=$(gcloud functions describe delete_unattached_pds --format=json --region {{{project_0.default_region | Region}}} | jq -r '.httpsTrigger.url')
Testar a tarefa concluída
Clique em Verificar meu progresso para conferir a tarefa realizada. Se você tiver implantado a função do Cloud, verá uma pontuação de avaliação.
Tarefa 6: programar e testar a função do Cloud
- No Cloud Shell, crie um aplicativo do App Engine para usar o Cloud Scheduler:
-
No Cloud Shell, crie uma tarefa do Cloud Scheduler para executar a função do Cloud às 2h todos os dias:
gcloud scheduler jobs create http unattached-pd-job \ --schedule="* 2 * * *" \ --uri=$FUNCTION_URL \ --location=$REGION
Testar a tarefa concluída
Clique em Verificar meu progresso para conferir a tarefa realizada. Se você tiver criado uma tarefa do Cloud Scheduler para executar a função do Cloud, verá uma pontuação de avaliação.
-
Acione o job manualmente para testar:
gcloud scheduler jobs run unattached-pd-job \ --location=$REGION -
Confirme se o snapshot do disco órfão foi criado:
gcloud compute snapshots list O resultado será assim:
NAME DISK_SIZE_GB SRC_DISK STATUS orphaned-disk1560455894 500 {{{project_0.default_zone | Zone}}}/disks/orphaned-disk READY -
Confirme se o disco não utilizado e o órfão foram excluídos:
gcloud compute disks list O resultado será assim:
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS disk-instance {{{project_0.default_zone | Zone}}} zone 10 pd-standard READY
Testar a tarefa concluída
Clique em Verificar meu progresso para conferir a tarefa realizada. Se você testou corretamente o job com o acionamento manual, verá uma pontuação de avaliação.
Parabéns!
Neste laboratório, você concluiu as seguintes tarefas:
- Criar dois discos permanentes
- Criar uma VM que usa um dos discos
- Desconectar o disco da VM
- Revisar o código da função do Cloud
- Implantar a função do Cloud
- Testar a função do Cloud usando jobs do Cloud Scheduler
Termine a Quest
Este laboratório autoguiado faz parte da Quest Optimizing your Google Cloud Costs. Uma Quest é uma série de laboratórios relacionados que formam um programa de aprendizado. Ao concluir uma Quest, você ganha um selo como reconhecimento da sua conquista. Você pode publicar os selos com um link para eles no seu currículo on-line ou nas redes sociais. Inscreva-se nesta Quest ou em outra que tenha este laboratório para receber os créditos de conclusão imediatamente. Consulte o catálogo do Google Cloud Ensina para ver todas as Quests disponíveis.
Comece o próximo laboratório
Continue sua Quest com o laboratório Níveis de rede: como otimizar os gastos com rede ou confira estas sugestões:
Treinamento e certificação do Google Cloud
Esses treinamentos ajudam você a aproveitar as tecnologias do Google Cloud ao máximo. Nossas aulas incluem habilidades técnicas e práticas recomendadas para ajudar você a alcançar rapidamente o nível esperado e continuar sua jornada de aprendizado. Oferecemos treinamentos que vão do nível básico ao avançado, com opções de aulas virtuais, sob demanda e por meio de transmissões ao vivo para que você possa encaixá-las na correria do seu dia a dia. As certificações validam sua experiência e comprovam suas habilidades com as tecnologias do Google Cloud.
Manual atualizado em 20 de outubro de 2023
Laboratório testado em 20 de outubro de 2023
Copyright 2024 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.