GSP315

Introducción
En un lab de desafío, se le proporcionarán una situación y un conjunto de tareas. En lugar de seguir instrucciones paso a paso, deberás utilizar las habilidades aprendidas en los labs del curso para decidir cómo completar las tareas por tu cuenta. Un sistema automatizado de puntuación (en esta página) mostrará comentarios y determinará si completaste tus tareas correctamente.
En un lab de desafío, no se explican conceptos nuevos de Google Cloud, sino que se espera que amplíes las habilidades que adquiriste, como cambiar los valores predeterminados y leer o investigar los mensajes de error para corregir sus propios errores.
Debe completar correctamente todas las tareas dentro del período establecido para obtener una puntuación del 100%.
Se recomienda este lab a los estudiantes inscritos en el curso para obtener la insignia de habilidad Configura un entorno de desarrollo de apps en Google Cloud. ¿Aceptas el desafío?
Configuración
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs cuentan con un temporizador que no se puede pausar. El temporizador, 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 del navegador privada o de incógnito (opción recomendada) para ejecutar el lab. Así evitarás conflictos 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: Usa solo la cuenta de estudiante para este lab. Si usas otra cuenta de Google Cloud, es posible que se apliquen cargos a esa cuenta.
Situación del desafío
Recién comienzas a desempeñarte en tu rol como ingeniero júnior de servicios de nube para Jooli Inc. Hasta ahora, estuviste ayudando a los equipos a crear y administrar recursos de Google Cloud.
Se espera que tengas las habilidades y el conocimiento para realizar estas tareas, por lo que no recibirás guías paso a paso.
Tu desafío
Se te solicitó ayudar a un equipo de desarrollo recién formado con el trabajo inicial de un nuevo proyecto llamado Recuerdos, que consiste en almacenar y organizar fotos. Se te solicitó que ayudes al equipo de Recuerdos con la configuración inicial de su entorno de desarrollo de aplicaciones.
Recibiste una solicitud para completar estas tareas:
- Crear un bucket para almacenar fotos
- Crear un tema de Pub/Sub para que lo utilice la Cloud Run Function que generes
- Crear una Cloud Run Function
- Quitar el acceso del anterior ingeniero de servicios de nube para que ya no pueda ingresar al proyecto Recuerdos
Estas son algunas pautas de Jooli Inc. que debes seguir:
- Crea todos los recursos en la región y en la zona , a menos que se indique lo contrario.
- Usa las VPC del proyecto.
- Normalmente, la asignación de nombres se realiza de la siguiente manera: equipo-recurso; p. ej., una instancia podría llamarse kraken-webserver1
- Asigna tamaños de recursos rentables. Ten cuidado porque los proyectos se supervisan y el uso excesivo de recursos dará como resultado la finalización del proyecto que los contiene, es decir, posiblemente el tuyo. Esta es la orientación que el equipo de supervisión está dispuesto a compartir; a menos que se indique lo contrario, utiliza e2-micro para VMs pequeñas de Linux y e2-medium para Windows o alguna otra aplicación, como nodos de Kubernetes.
A continuación, se describe cada tarea en detalle. ¡Buena suerte!
Tarea 1: Crea un bucket
Debes crear un bucket llamado para almacenar las fotos.
Asegúrate de que el recurso esté creado en la región y en la zona .
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear un bucket llamado
Tarea 2: Crea un tema de Pub/Sub
Crea un tema de Pub/Sub llamado para que la Cloud Run Function envíe mensajes.
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear un tema de Pub/Sub llamado
Tarea 3: Crea la Cloud Run Function de la miniatura
Crea la función
Crea una Cloud Run Function que creará una miniatura a partir de una imagen agregada al bucket .
Asegúrate de que la Cloud Run Function use el entorno Cloud Run Function (que es de 2ª generación).
Asegúrate de que el recurso esté creado en la región y en la zona .
- Crea una Cloud Run Function (2ª generación) llamada con
Node.js 22
.
Nota:
La Cloud Run Function se debe ejecutar cada vez que se cree un objeto en el bucket que creaste en la Tarea 1.
Durante el proceso, la Cloud Run Function puede solicitarte permiso para habilitar APIs o asignar roles a las cuentas de servicio.
Habilita cada una de las APIs requeridas y otorga los roles solicitados.
-
Asegúrate de configurar el punto de entrada (la Function que se ejecutará) como y el activador como Cloud Storage
.
-
Agrega el siguiente código a index.js
:
const functions = require('@google-cloud/functions-framework');
const { Storage } = require('@google-cloud/storage');
const { PubSub } = require('@google-cloud/pubsub');
const sharp = require('sharp');
functions.cloudEvent('{{{ project_0.startup_script.function }}}', async cloudEvent => {
const event = cloudEvent.data;
console.log(`Event: ${JSON.stringify(event)}`);
console.log(`Hello ${event.bucket}`);
const fileName = event.name;
const bucketName = event.bucket;
const size = "64x64";
const bucket = new Storage().bucket(bucketName);
const topicName = "{{{ project_0.startup_script.topic }}}";
const pubsub = new PubSub();
if (fileName.search("64x64_thumbnail") === -1) {
// doesn't have a thumbnail, get the filename extension
const filename_split = fileName.split('.');
const filename_ext = filename_split[filename_split.length - 1].toLowerCase();
const filename_without_ext = fileName.substring(0, fileName.length - filename_ext.length - 1); // fix sub string to remove the dot
if (filename_ext === 'png' || filename_ext === 'jpg' || filename_ext === 'jpeg') {
// only support png and jpg at this point
console.log(`Processing Original: gs://${bucketName}/${fileName}`);
const gcsObject = bucket.file(fileName);
const newFilename = `${filename_without_ext}_64x64_thumbnail.${filename_ext}`;
const gcsNewObject = bucket.file(newFilename);
try {
const [buffer] = await gcsObject.download();
const resizedBuffer = await sharp(buffer)
.resize(64, 64, {
fit: 'inside',
withoutEnlargement: true,
})
.toFormat(filename_ext)
.toBuffer();
await gcsNewObject.save(resizedBuffer, {
metadata: {
contentType: `image/${filename_ext}`,
},
});
console.log(`Success: ${fileName} → ${newFilename}`);
await pubsub
.topic(topicName)
.publishMessage({ data: Buffer.from(newFilename) });
console.log(`Message published to ${topicName}`);
} catch (err) {
console.error(`Error: ${err}`);
}
} else {
console.log(`gs://${bucketName}/${fileName} is not an image I can handle`);
}
} else {
console.log(`gs://${bucketName}/${fileName} already has a thumbnail`);
}
});
- Agrega el siguiente código a
package.json
:
{
"name": "thumbnails",
"version": "1.0.0",
"description": "Create Thumbnail of uploaded image",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0",
"@google-cloud/pubsub": "^2.0.0",
"@google-cloud/storage": "^6.11.0",
"sharp": "^0.32.1"
},
"devDependencies": {},
"engines": {
"node": ">=4.3.2"
}
}
Nota: Si se muestra un error de permiso denegado en el que se indica que los permisos necesarios tardarán algunos minutos en propagarse al agente de servicio, espera un momento y vuelve a intentarlo. Asegúrate de tener los roles apropiados (Agente de servicio de Eventarc, Receptor de eventos de Eventarc, Creador de tokens de cuenta de servicio y Publicador de Pub/Sub) asignados a las cuentas de servicio correctas.
Prueba la función
- Sube una imagen en formato PNG o JPG al bucket .
Nota: De manera alternativa, descarga esta imagen https://storage.googleapis.com/cloud-training/gsp315/map.jpg
en tu máquina y, luego, súbela al bucket.
Al cabo de unos instantes, aparecerá una imagen de miniatura (selecciona ACTUALIZAR en la página de detalles del bucket).
Después de subir el archivo de imagen, puedes hacer clic para verificar tu progreso a continuación. No es necesario que esperes a que se cree la imagen de miniatura.
Opcional: Si la función se implementó correctamente y no ves la imagen en miniatura en el bucket, puedes verificar que la pestaña Activadores muestre la información del activador que proporcionaste anteriormente para la función, que podría no haberse guardado de forma correcta si antes encontraste errores.
Si no ves el activador de Cloud Storage en la pestaña Activadores de la función, puedes volver a crearlo (consulta la página de documentación titulada Cómo crear un activador para servicios) y, luego, subir un archivo nuevo para volver a realizar la prueba (actualiza la página después de agregar un archivo nuevo).
Haz clic en Revisar mi progreso para verificar el objetivo.
Verificar la Cloud Run Function
Tarea 4: Quita al anterior ingeniero de servicios de nube
Verás que hay dos usuarios definidos en el proyecto:
- Uno que corresponde a tu cuenta (, con el rol Propietario)
- Otro que corresponde al ingeniero de servicios de nube anterior (, con el rol Visualizador).
- Quita el acceso del anterior ingeniero de servicios de nube para que ya no pueda ingresar al proyecto.
Haz clic en Revisar mi progreso para verificar el objetivo.
Quitar al ingeniero anterior de servicios de nube
¡Felicitaciones!

Próximos pasos y más información
Esta insignia de habilidad forma parte de las rutas de aprendizaje Realiza tareas básicas de infraestructura en Google Cloud y Cloud Architect. Si ya conseguiste las otras insignias de habilidad en tu ruta de aprendizaje, revisa el catálogo de Google Cloud Skills Boost y encuentra insignias de habilidad adicionales que puedes obtener.
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: 8 de marzo de 2025
Prueba más reciente del lab: 8 de marzo de 2025
Copyright 2025 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.