arrow_back

Cómo limpiar discos persistentes sin uso y huérfanos

Unirse Acceder
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Cómo limpiar discos persistentes sin uso y huérfanos

Lab 1 hora universal_currency_alt 5 créditos show_chart Intermedio
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP648

Labs de autoaprendizaje de Google Cloud

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.

Diagrama de arquitectura

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)
Nota: Usa una ventana de navegador privada o de Incógnito para ejecutar este lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
  • Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Nota: Si ya tienes un proyecto o una cuenta personal de Google Cloud, no los uses en este lab para evitar cargos adicionales en tu cuenta.

Cómo iniciar su lab y acceder a la consola de Google Cloud

  1. 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
    • Tiempo restante
    • Las credenciales temporales que debe usar para el lab
    • Otra información para completar el lab, si es necesaria
  2. Haga clic en Abrir la consola de Google. 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 ve el diálogo Elegir una cuenta, haga clic en Usar otra cuenta.
  3. Si es necesario, copie el nombre de usuario del panel Detalles del lab y péguelo en el cuadro de diálogo Acceder. Haga clic en Siguiente.

  4. Copie la contraseña del panel Detalles del lab y péguela en el cuadro de diálogo de bienvenida. Haga clic en Siguiente.

    Importante: Debe usar las credenciales del panel de la izquierda. No use sus credenciales de Google Cloud Skills Boost. Nota: Usar su propia Cuenta de Google podría generar cargos adicionales.
  5. Haga clic para avanzar por las páginas siguientes:

    • Acepte los términos y condiciones.
    • No agregue opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
    • No se registre para obtener pruebas gratuitas.

Después de un momento, se abrirá la consola de Cloud en esta pestaña.

Nota: Para ver el menú con una lista de los productos y servicios de Google Cloud, haga clic en el Menú de navegación que se encuentra en la parte superior izquierda de la pantalla. Ícono del menú de navegación

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.

  1. Haz clic en Activar Cloud Shell Ícono de 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:

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

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.

  1. Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
gcloud auth list
  1. Haz clic en Autorizar.

  2. Ahora, el resultado debería verse de la siguiente manera:

Resultado:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. Puedes solicitar el ID del proyecto con este comando (opcional):
gcloud config list project

Resultado:

[core] project = <project_ID>

Resultado de ejemplo:

[core] project = qwiklabs-gcp-44776a13dea667a6 Nota: Para obtener toda la documentación de 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

  1. En Cloud Shell, habilita la API de Cloud Scheduler:

    gcloud services enable cloudscheduler.googleapis.com
  2. Clona el repositorio:

    gsutil cp -r gs://spls/gsp648 . && cd gsp648
  3. 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)
  4. Establece la región del proyecto para este lab:

    gcloud config set compute/region {{{project_0.default_region | "REGION"}}}
  5. Crea una variable para la región:

    export REGION={{{project_0.default_region | Region}}}
  6. 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.

Nota: Cuando ejecutas 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

  1. En Cloud Shell, navega al directorio unattached-pd:

    cd $WORKDIR/unattached-pd
  2. Exporta los nombres de los discos como variables:

    export ORPHANED_DISK=orphaned-disk export UNUSED_DISK=unused-disk
  3. 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.

  4. 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.

Crear discos persistentes

Tarea 3. Creea una VM e inspecciona los discos

  1. 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
  2. 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.

Crear una instancia de VM con Persistent Disk
  1. Desconecta el disco huérfano de la VM:

    gcloud compute instances detach-disk disk-instance --device-name=$ORPHANED_DISK --zone=$ZONE
  2. 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.

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.

Desconectar el disco huérfano de la VM

Tarea 4. Revisa el código de la Cloud Function

  1. 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.

  2. 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.

  3. 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.

  4. En Cloud Shell, haz clic enOpen Editor para abrir el Editor y modificar el archivo main.py.

Nota: Si se te solicita, haz clic en Open in New Window.
  1. Navega a gsp648/unattached-pd.

  2. Abre main.py.

  3. 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'
  4. Haz clic en File > Save para guardar el archivo.

Tarea 5. Implementa la Cloud Function

  1. 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.
  2. 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.

Implementar la Cloud Function

Tarea 6. Programa y prueba la Cloud Function

  1. En Cloud Shell, crea una aplicación de App Engine para usar Cloud Scheduler:
gcloud app create --region={{{project_0.startup_script.app_region | REGION}}}
  1. 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.

Crear una tarea de Cloud Scheduler para ejecutar la función de Cloud Function
  1. Activa el trabajo de forma manual para probarlo:

    gcloud scheduler jobs run unattached-pd-job \ --location=$REGION
  2. 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
  3. 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.

Activar manualmente el trabajo para probarlo

¡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.