En este lab, mejorarás la app en línea Quiz con la creación de una Cloud Function para procesar mensajes de Cloud Pub/Sub.
En este proceso, se usan varios productos de Google Cloud en un entorno sin servidores: Cloud Pub/Sub, API de Cloud Natural Language y Cloud Spanner.
Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
Crear un Cloud Function que responda a los mensajes de Cloud Pub/Sub.
Implementar varios archivos en una Cloud Function.
Configuración y requisitos
En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.
Accede a Qwiklabs desde una ventana de incógnito.
Ten en cuenta el tiempo de acceso del lab (por ejemplo, 1:15:00) y asegúrate de finalizarlo en el plazo asignado.
No existe una función de pausa. Si lo necesita, puede reiniciar el lab, pero deberá hacerlo desde el comienzo.
Cuando esté listo, haga clic en Comenzar lab.
Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.
Haga clic en Abrir Google Console.
Haga clic en Usar otra cuenta, copie las credenciales para este lab y péguelas en el mensaje emergente que aparece.
Si usa otras credenciales, se generarán errores o incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación.
Activa Google Cloud Shell
Google 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.
Google Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.
Haz clic en Continuar.
El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. Por ejemplo:
gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con el completado de línea de comando.
Puedes solicitar el nombre de la cuenta activa con este comando:
En esta sección, accederás a Cloud Shell, clonarás el repositorio de Git que contiene la aplicación de Quiz, configurarás las variables de entorno y ejecutarás la aplicación.
Clona el código fuente en Cloud Shell
Para clonar el repositorio para la clase, ingresa el siguiente comando:
Configura y ejecuta la aplicación de casos de éxito
Para cambiar el directorio de trabajo, escribe el siguiente comando:
cd ~/cloudfunctions/start
Para reemplazar la región predeterminada de un archivo por la región asignada por un lab, puedes usar los siguientes comandos:
export APP_REGION={{{project_0.startup_script.app_gcp_region | APP_REGION}}}
export REGION={{{project_0.default_region | REGION}}}
sed -i 's/us-central1/'"$REGION"'/g' prepare_environment.sh
sed -i 's/us-central/'"$APP_REGION"'/g' prepare_environment.sh
Para configurar la aplicación de Quiz, escribe el siguiente comando:
. prepare_environment.sh
Nota: Este archivo de secuencia de comandos hará lo siguiente:
Crea una aplicación de App Engine.
Exporta variables de entorno: GCLOUD_PROJECT y GCLOUD_BUCKET.
Ejecuta npm install.
Crea entidades en Cloud Datastore.
Crea un tema Cloud Pub/Sub.
Crea una instancia, una base de datos y una tabla de Cloud Spanner.
Imprime el ID del proyecto de Google Cloud.
Para ejecutar la aplicación web, escribe el siguiente comando:
npm start
Haz clic en Revisar mi progreso para verificar el objetivo.
Configurar y ejecutar la aplicación de casos de éxito
Tarea 2: trabajar con Cloud Functions
En esta sección, crearás un Cloud Function en el proyecto Google Cloud que se activa con la publicación de un mensaje en Cloud Pub/Sub, se ejecuta la aplicación y se supervisa la invocación de Cloud Function.
Crea una Cloud Function
Para acceder a Cloud Run Functions, en el menú de navegación (), haz clic en Cloud Run.
Haz clic en Escribir una función.
En Nombre del servicio, escribe process-feedback.
En Región, selecciona la región .
Haz clic en + Agregar activadores y selecciona Activador de Pub/Sub en el menú desplegable.
Si es necesario, haz clic en Habilitar para activar las APIs requeridas.
En la ventana Activador de Pub/Sub, especifica lo siguiente:
Propiedad
Valor
Tipo de activador
Fuentes de Google
Proveedor del evento
Cloud Pub/Sub
Tipo de evento
google.cloud.pubsub.topic.v1.messagePublished
Tema de Cloud Pub/Sub
projects/PROJECT_ID/topics/feedback
Región
Si se te notifica que Pub/Sub necesita que se otorgue el rol roles/iam.serviceAccountTokenCreator a la cuenta de servicio de Pub/Sub, haz clic en Otorgar.
Haz clic en Guardar activador.
Haz clic en Crear.
Revisa la implementación de la función proporcionada.
Nota: Es posible que te lleve uno o dos minutos crear la Cloud Function.
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear una Cloud Function
Ejecuta la aplicación web
Regresa a la ventana de Cloud Shell.
Obtén una vista previa de la aplicación web con un clic en el botón Vista previa en la Web y selecciona Vista previa en el puerto 8080.
Haz clic en Take Test.
Haz clic en Places.
Completa la pregunta.
Califica el cuestionario, escribe algún comentario y, a continuación, haz clic en Enviar comentarios.
Visualiza la supervisión y registros de Cloud Function
Vuelve a la consola de Cloud Platform, en la página de Cloud Run.
Haz clic en process-feedback.
Nota: Deberías ver un gráfico de supervisión de las invocaciones de Cloud Function.
Pueden transcurrir unos minutos hasta que el gráfico muestre la invocación de tu función.
Haz clic en la pestaña Registros para ver tus registros.
Para poder ver tus registros en el explorador de registros, haz clic en el vínculo que se encuentra en la parte superior derecha de la página.
Si no aparece tu mensaje de Cloud Pub/Sub, haz clic en Actualizar.
Nota: Deberías ver las entradas de registro recopiladas de Cloud Function.
Pueden transcurrir unos minutos hasta que los registros muestren la invocación de tu función.
Ve a Cloud Shell para ver también tus comentarios.
Tarea 3: examinar el código de la aplicación del caso de éxito
En esta sección, usarás el editor de texto de Cloud Shell para revisar el código de la aplicación de casos de éxito.
Inicia el editor de Cloud Shell
En la consola de Google Cloud, haz clic en Abrir editor.
Revisa la estructura del código de la aplicación de Cloud Function
Navega a cloudfunctions/start.
Selecciona el archivo index.js en la carpeta ...function.
Ten en cuenta que este archivo contiene el mismo código que el ejemplo de la ventana de Cloud Functions en la consola de Cloud, con una modificación: como la función que escribirás devuelve una Promesa, se omitió el argumento de devolución de llamada.
Selecciona el archivo package.json.
Nota: Este archivo contiene la lista de dependencias que esta función necesita para ejecutarse.
Cloud Functions instala automáticamente las dependencias.
Selecciona el archivo languageapi.js.
Nota: Este archivo contiene el código para procesar el texto del comentario y devolver la puntuación de opinión de la API de AA de Natural Language.
Selecciona el archivo spanner.js.
Nota: Este archivo contiene el código para insertar un registro en una base de datos de Cloud Spanner.
Tarea 4: programar una Cloud Function
En esta sección, se escribe el código para crear una Cloud Function que recupera los datos de los mensajes Cloud Pub/Sub, invoca la API de AA de Natural Language para realizar la detección de opiniones e inserta un registro en Cloud Spanner.
Importante: Actualiza el código dentro de las secciones marcadas de la siguiente manera:
// TODO // END TODO
Para maximizar tu aprendizaje, revisa el código, los comentarios intercalados y la documentación de la API relacionada.
Escribe código para modificar una Cloud Function
Vuelve al archivo …function/index.js.
Carga los módulos languageapi y spanner. Estos módulos están en la misma carpeta que el archivo index.js.
En el método subscribe(), después del código existente que carga el mensaje de Cloud Pub/Sub en un búfer, convierte el mensaje de PubSub en un objeto feedback por medio de su análisis como datos JSON.
Muestra una promesa que invoca el método analyze del módulo languageapi para analizar el texto del comentario.
Encadena un método .then(…) al final de la sentencia return.
Suministra una función de flecha como valor de la devolución de llamada.
En el cuerpo de la función de flecha, registra la puntuación de opiniones de la API de Natural Language en la consola.
Agrega una propiedad nueva llamada puntuación al objeto feedback.
Devuelve el objeto feedback para completar el cuerpo de la función flecha.
Encadena un segundo método .then(…) al final del primero. Este usa el módulo spanner para guardar los comentarios.
Escribe un tercer método encadenado .then(…), que incluye una función flecha sin argumentos y un cuerpo vacío como valor de la devolución de llamada.
En el cuerpo de la devolución de llamada, registra un mensaje para indicar que los comentarios se guardaron y muestra un mensaje de éxito.
Adjunta un controlador .catch(…) al final de la cadena, que registra el mensaje de error en la consola.
Nota: Así es como debe quedar tu función cuando termines.
function/index.js
// TODO: Load the ./languageapi module
const languageAPI = require('./languageapi');
// END TODO
// TODO: Load the ./spanner module
const feedbackStorage = require('./spanner');
// END TODO
exports.subscribe = function subscribe(event) {
// The Cloud Pub/Sub Message object.
// TODO: Decode the Cloud Pub/Sub message
// extracting the feedbackObject data
// The message received from Pub/Sub is base64 encoded, and
// the data submitted by students is in a data property
const pubsubMessage = Buffer.from(event.data, 'base64').toString();
let feedbackObject = JSON.parse(pubsubMessage);
console.log('Feedback object data before Language API:' + JSON.stringify(feedbackObject));
// END TODO
// TODO: Run Natural Language API sentiment analysis
// The analyze(...) method expects to be passed the
// feedback text from the feedbackObject as an argument,
// and returns a Promise.
return languageAPI.analyze(feedbackObject.feedback).then(score => {
// TODO: Log the sentiment score
console.log(`Score: ${score}`);
// END TODO
// TODO: Add new score property to feedbackObject
feedbackObject.score = score;
// END TODO
// TODO: Pass feedback object to the next handler
return feedbackObject;
// END TODO
})
// TODO: insert record
.then(feedbackStorage.saveFeedback).then(() => {
// TODO: Log and return success
console.log('feedback saved…');
return 'success';
// END TODO
})
// END TODO
// TODO: Catch and Log error
.catch(console.error);
// End TODO
};
Guarda el archivo.
Empaqueta e implementa el código de Cloud Function
Regresa a Cloud Shell y presiona Ctrl+C para detener la aplicación web.
Para cambiar el directorio de trabajo al código de Cloud Function, escribe el siguiente comando:
cd function
Para comprimir los archivos necesarios con el objetivo de implementar la función, escribe el siguiente comando:
zip cf.zip *.js*
Nota: Esto genera un archivo ZIP llamado cf.zip que incluye todos los archivos JavaScript y JSON de la carpeta.
Para almacenar en etapa intermedia el archivo ZIP en Cloud Storage, escribe el siguiente comando:
gcloud storage cp cf.zip gs://$GCLOUD_BUCKET/
Nota: Esto copia el archivo ZIP en el bucket de Cloud Storage con el nombre de tu ID del proyecto y el sufijo -media.
Para implementar la función desde el bucket de Cloud Storage, puedes usar el comando gcloud functions deploy de la siguiente manera.
gcloud functions deploy process-feedback1 \
--gen2 \
--region={{{project_0.default_region|set at lab start}}} \
--source=gs://$GCLOUD_BUCKET/cf.zip \
--entry-point=subscribe \
--runtime=nodejs22 \
--trigger-topic=feedback
Nota: La función process-feedback1 puede tardar uno o dos minutos en actualizarse con el código nuevo que realiza el análisis de opiniones con la API de aprendizaje automático de Cloud Natural Language e inserta datos en Cloud Spanner.
Empaquetar e implementar el código de Cloud Function
Tarea 5: probar la aplicación del caso de éxito
Ejecuta la aplicación web
Regresa a la ventana de Cloud Shell.
Vuelve a cambiar la carpeta de trabajo por la carpeta start del lab cloudfunctions:
cd ..
Para iniciar la aplicación web, ejecuta el siguiente comando:
npm start
Obtén una vista previa de la aplicación web.
Haz clic en Take Test.
Haz clic en Places.
Completa la pregunta.
Escribe algunos comentarios y haz clic en Enviar comentarios.
Visualiza la supervisión y registros de Cloud Function
Vuelve a la sección Cloud Run de la consola de Cloud Platform.
Haz clic en el nombre de la función, process-feedback1.
Nota: Deberías ver un gráfico de supervisión de las invocaciones de Cloud Function.
Pueden transcurrir unos minutos hasta que el gráfico muestre la invocación de tu función.
Haz clic en la pestaña Registros para ver tus registros.
Para poder ver tus registros en el explorador de registros, haz clic en el vínculo que se encuentra en la parte superior derecha de la página.
Si no aparece tu mensaje de Cloud Pub/Sub, haz clic en Actualizar.
Actualiza los registros cada varios minutos hasta que las entradas del registro muestren que tu función se ejecutó.
Nota: Deberías ver las entradas de registro recopiladas de Cloud Function.
Ahora deberías ver una puntuación de la API de Lenguaje en los registros.
Los registros pueden tardar unos minutos en mostrar la invocación de tu función.
Visualiza los datos de Cloud Spanner
En el menú de navegación, haz clic en Ver todos los productos y, luego, en Spanner.
Haz clic en Quiz instance, en las bases de datos, haz clic en quiz-database y, a continuación, en el panel izquierdo, selecciona Spanner Studio.
Ejecuta la siguiente consulta:
SELECT * FROM Feedback
Nota: Deberías ver que se agregó un nuevo registro a la tabla Feedback.
Tarea 6: Contenido adicional: Almacenamiento de las respuestas de los estudiantes con Cloud Function
Cuando un estudiante completa un cuestionario, sus respuestas se envían en una llamada a la API al servidor. Tu trabajo es capturar las respuestas que envían los estudiantes y las respuestas correctas, y guardarlas en Cloud Spanner. Deberías ver que se agregó un nuevo registro a la tabla de comentarios.
Para ello, sigue estos pasos:
Crea un tema de Cloud Pub/Sub llamado “answers”.
Crea una tabla de Cloud Spanner llamada Answers con los nombres de columna y tipos de datos correspondientes
Publicar los datos de las respuestas en el tema answers
Suscríbete al tema respuestas en la aplicación de la consola e inserta los datos de las respuestas en la tabla Answers.
Tú decides los detalles. Encontrarás la solución a la bonificación en la carpeta bonus del lab.
Repaso:
¿Qué activadores pueden usarse con Cloud Functions?
Cloud Pub/Sub
Cloud Spanner
Cloud Storage
HTTP
Con Cloud Function activada por Cloud Pub/Sub, ¿cómo se entrega el
mensaje?
Codificación en base64
CSV codificada
Comprimido con formato TAR y con GZIP
Comprimido en ZIP
¿Cuál es el tiempo máximo de ejecución de una Cloud Function?
60 segundos
540 segundos
Ilimitado
Finalice su lab
Cuando haya completado el lab, haga clic en Finalizar lab. Google Cloud Skills Boost quitará los recursos que usó y limpiará la cuenta.
Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.
La cantidad de estrellas indica lo siguiente:
1 estrella = Muy insatisfecho
2 estrellas = Insatisfecho
3 estrellas = Neutral
4 estrellas = Satisfecho
5 estrellas = Muy satisfecho
Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.
Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.
Copyright 2020 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.
Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
.
Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar
Usa la navegación privada
Copia el nombre de usuario y la contraseña proporcionados para el lab
Haz clic en Abrir la consola en modo privado
Accede a la consola
Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación
No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto
Este contenido no está disponible en este momento
Te enviaremos una notificación por correo electrónico cuando esté disponible
¡Genial!
Nos comunicaremos contigo por correo electrónico si está disponible
Un lab a la vez
Confirma para finalizar todos los labs existentes y comenzar este
Usa la navegación privada para ejecutar el lab
Usa una ventana de navegación privada o de Incógnito para ejecutar el 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.
En este lab, mejorarás la app en línea Quiz con la creación de una Cloud Function para procesar mensajes de Cloud Pub/Sub.
Duración:
0 min de configuración
·
Acceso por 120 min
·
120 min para completar