Puntos de control
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
Cómo limpiar discos persistentes sin uso y huérfanos
- GSP648
- Descripción general
- Configuración
- Tarea 1. Habilita las APIs y clona el repositorio
- Tarea 2. Crea discos persistentes
- Tarea 3. Creea una VM e inspecciona los discos
- Tarea 4. Revisa el código de la Cloud Function
- Tarea 5. Implementa la Cloud Function
- Tarea 6. Programa y prueba la Cloud Function
- ¡Felicitaciones!
GSP648
Descripción general
En este lab, usarás Cloud Functions y Cloud Scheduler para identificar y liberar recursos de nube desperdiciados. En este caso, programarás una Cloud Function para identificar y limpiar discos persistentes no conectados y huérfanos.
Actividades
- Crearás dos discos persistentes.
- Crearás una VM que use uno de los discos.
- Desconectarás el disco de la VM.
- Revisarás el código de la Cloud Function.
- Implementarás la Cloud Function.
- Usarás trabajos de Cloud Scheduler para probar la Cloud Function.
Arquitectura
En el siguiente diagrama, se describe la arquitectura usada en la primera sección de este lab, donde programarás una Cloud Function para identificar y limpiar discos persistentes sin uso y huérfanos.
Configuración
En esta sección, configurarás la infraestructura y las identidades requeridas para completar este lab.
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
- Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
- El botón Abrir la consola de Google Cloud
- El tiempo restante
- Las credenciales temporales que debe usar para el lab
- Otra información para completar el lab, si es necesaria
-
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordene las pestañas en ventanas separadas, una junto a la otra.
Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta. -
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}} También puedes encontrar el nombre de usuario en el panel Detalles del lab.
-
Haz clic en Siguiente.
-
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}} También puedes encontrar la contraseña en el panel Detalles del lab.
-
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia Cuenta de Google podría generar cargos adicionales. -
Haga clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Activa Cloud Shell
Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
- Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.
Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. El resultado contiene una línea que declara el PROJECT_ID para esta sesión:
gcloud
es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.
- Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
-
Haz clic en Autorizar.
-
Ahora, el resultado debería verse de la siguiente manera:
Resultado:
- Puedes solicitar el ID del proyecto con este comando (opcional):
Resultado:
Resultado de ejemplo:
gcloud
, consulta la guía con la descripción general de gcloud CLI en Google Cloud.
Tarea 1. Habilita las APIs y clona el repositorio
-
En Cloud Shell, habilita la API de Cloud Scheduler:
gcloud services enable cloudscheduler.googleapis.com -
Clona el repositorio:
gsutil cp -r gs://spls/gsp648 . && cd gsp648 -
Configura las variables de entorno y convierte la carpeta del repositorio en tu $WORKDIR donde ejecutarás todos los comandos relacionados con este lab:
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) WORKDIR=$(pwd) -
Establece la región del proyecto para este lab:
gcloud config set compute/region {{{project_0.default_region | "REGION"}}} -
Crea una variable para la región:
export REGION={{{project_0.default_region | Region}}} -
Crea una variable para la zona:
export ZONE={{{project_0.default_zone | Zone}}}
Obtén más información en la documentación Regiones y zonas.
gcloud
en tu máquina, se mantiene la configuración en las diferentes sesiones. En cambio, en Cloud Shell, es necesario configurar esto en cada nueva sesión o reconexión.
Tarea 2. Crea discos persistentes
-
En Cloud Shell, navega al directorio unattached-pd:
cd $WORKDIR/unattached-pd -
Exporta los nombres de los discos como variables:
export ORPHANED_DISK=orphaned-disk export UNUSED_DISK=unused-disk -
Crea dos 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 En este lab, se usa la región
, pero puedes elegir otra y hacer referencia a ella de forma coherente durante el resto del lab. -
Comprueba que se hayan creado los dos discos:
gcloud compute disks list Deberías obtener el siguiente resultado:
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
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si creaste correctamente los discos persistentes, verás una puntuación de evaluación.
Tarea 3. Creea una VM e inspecciona los discos
-
En Cloud Shell, crea una instancia:
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 -
Inspecciona el disco que se conectó a la VM:
gcloud compute disks describe $ORPHANED_DISK --zone=$ZONE --format=json | jq El resultado es similar al siguiente:
{ "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}}}" } Estos son los aspectos importantes de la muestra de código anterior:
-
users
identifica la VM a la que está conectado el disco. -
lastAttachTimestamp
identifica cuándo se conectó el disco a la VM por última vez.
-
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si creaste correctamente una instancia de VM con Persistent Disk, verás una puntuación de evaluación.
-
Desconecta el disco huérfano de la VM:
gcloud compute instances detach-disk disk-instance --device-name=$ORPHANED_DISK --zone=$ZONE -
Inspecciona el disco huérfano:
gcloud compute disks describe $ORPHANED_DISK --zone=$ZONE --format=json | jq El resultado es similar al siguiente:
{ "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}}}" } Estos son los aspectos importantes de la muestra de código anterior:
- No hay
users
en la lista del disco, lo que indica que actualmente no está en uso. - Ahora se muestra la entrada
lastDetachTimestamp
, que indica cuándo se desconectó el disco de una VM por última vez y, por lo tanto, cuándo fue la última vez que se utilizó. - El campo
lastAttachTimestamp
sigue presente.
- No hay
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si desconectaste correctamente el disco huérfano de la VM, verás una puntuación de evaluación.
Tarea 4. Revisa el código de la Cloud Function
-
En Cloud Shell, muestra el resultado de la sección del código que recupera todos los discos persistentes del proyecto:
cat $WORKDIR/unattached-pd/main.py | grep "(request)" -A 12 El resultado es el siguiente:
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) La función usa el método
aggregatedList
para acceder a todos los discos persistentes del proyecto de Google Cloud en el que se ejecuta, además de iterarse a través de cada uno de los discos. -
Muestra el resultado de la sección del código que verifica el campo
lastAttachTimestamp
y borra el disco si no existe:cat $WORKDIR/unattached-pd/main.py | grep "handle never" -A 11 El resultado es el siguiente:
# 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 sección borra el disco si
lastAttachTimestamp
no está presente; es decir, si nunca se usó el disco. -
Muestra el resultado de la sección del código que calcula la edad del disco si es huérfano, crea una instantánea de él y lo borra:
cat $WORKDIR/unattached-pd/main.py | grep "handle detached" -A 32 El resultado es el siguiente:
# 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 sección del código se utiliza cuando el disco tiene usuarios y cuando está presente
lastDetachTimestamp
; es decir, el disco no está en uso ahora, pero se utilizó en algún momento. En este caso, la Cloud Function crea una instantánea del disco para retener los datos y, luego, lo borra. -
En Cloud Shell, haz clic enOpen Editor para abrir el Editor y modificar el archivo
main.py
.
-
Navega a
gsp648/unattached-pd
. -
Abre
main.py
. -
Edita la línea 15 del archivo y reemplaza
automating-cost-optimization
por el ID de tu proyecto (similar al siguiente):project = 'qwiklabs-gcp-b5dbc291a25a68db' -
Haz clic en File > Save para guardar el archivo.
Tarea 5. Implementa la Cloud Function
-
En Cloud Shell, implementa la Cloud Function (haz clic en Open terminal si se te solicita):
gcloud functions deploy delete_unattached_pds --trigger-http --runtime=python39 --region {{{project_0.default_region | Region}}} Nota: Escribe y cuando se te pregunte lo siguiente: Allow unauthenticated invocations of new function [delete_unattached_pds]? (y/N)?
Nota: La implementación de una Cloud Function puede tardar entre 2 y 5 minutos, según la región. -
Captura la URL activadora de la Cloud Function como una variable de entorno:
export FUNCTION_URL=$(gcloud functions describe delete_unattached_pds --format=json --region {{{project_0.default_region | Region}}} | jq -r '.httpsTrigger.url')
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si implementaste correctamente la Cloud Function, verás una puntuación de evaluación.
Tarea 6. Programa y prueba la Cloud Function
- En Cloud Shell, crea una aplicación de App Engine para usar Cloud Scheduler:
-
En Cloud Shell, crea una tarea de Cloud Scheduler para ejecutar la Cloud Function todas las noches a las 2 a.m.:
gcloud scheduler jobs create http unattached-pd-job \ --schedule="* 2 * * *" \ --uri=$FUNCTION_URL \ --location=$REGION
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si creaste correctamente una tarea de Cloud Scheduler para ejecutar la Cloud Function, verás una puntuación de evaluación.
-
Activa el trabajo de forma manual para probarlo:
gcloud scheduler jobs run unattached-pd-job \ --location=$REGION -
Controla que se haya creado la instantánea del disco huérfano:
gcloud compute snapshots list El resultado es similar al siguiente:
NAME DISK_SIZE_GB SRC_DISK STATUS orphaned-disk1560455894 500 {{{project_0.default_zone | Zone}}}/disks/orphaned-disk READY -
Controla que se hayan borrado el disco sin uso y el huérfano:
gcloud compute disks list El resultado es similar al siguiente:
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS disk-instance {{{project_0.default_zone | Zone}}} zone 10 pd-standard READY
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si pudiste activar manualmente el trabajo para probarlo, verás una puntuación de evaluación.
¡Felicitaciones!
En este lab, completaste las siguientes tareas:
- Creaste dos discos persistentes.
- Creaste una VM que utiliza uno de los discos.
- Desconectaste el disco de la VM.
- Revisaste el código de la Cloud Function.
- Implementaste la Cloud Function.
- Probaste la Cloud Function con trabajos de Cloud Scheduler.
Finaliza la Quest
Este lab de autoaprendizaje forma parte de la Quest Optimizing your Google Cloud Costs. Una Quest es una serie de labs relacionados que forman una ruta de aprendizaje. Si completas esta Quest, obtendrás una insignia como reconocimiento por tu logro. Puedes hacer públicas tus insignias y agregar vínculos a ellas en tu currículum en línea o en tus cuentas de redes sociales. Inscríbete en esta Quest o en cualquiera que contenga este lab y obtén un crédito inmediato de finalización. Consulta el catálogo de Google Cloud Skills Boost para ver todas las Quests disponibles.
Realiza tu próximo lab
Continúa tu Quest con Niveles de red: Cómo optimizar los gastos de la red o consulta estas sugerencias:
Capacitación y certificación de Google Cloud
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Última actualización del manual: 20 de octubre de 2023
Prueba más reciente del lab: 20 de octubre de 2023
Copyright 2024 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.