Obtén acceso a más de 700 labs y cursos

Desarrollo de aplicaciones: Cómo procesar datos de Cloud Pub/Sub con Cloud Functions: Node.js

Lab 2 horas universal_currency_alt 5 créditos show_chart Introductorio
info Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.
Obtén acceso a más de 700 labs y cursos

Descripción general

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.

  1. Accede a Qwiklabs desde una ventana de incógnito.

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

  3. Cuando esté listo, haga clic en Comenzar lab.

  4. Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.

  5. Haga clic en Abrir Google Console.

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

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

  1. En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.

    Ícono de Cloud Shell destacado

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

ID del proyecto destacado en la terminal de Cloud Shell

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:
gcloud auth list

Resultado:

Credentialed accounts: - @.com (active)

Resultado de ejemplo:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • Puedes solicitar el ID del proyecto con este comando:
gcloud config list project

Resultado:

[core] project =

Resultado de ejemplo:

[core] project = qwiklabs-gcp-44776a13dea667a6 Nota: La documentación completa de gcloud está disponible en la guía de descripción general de gcloud CLI .

Tarea 1: preparar la aplicación del caso de éxito

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

  1. Para clonar el repositorio para la clase, ingresa el siguiente comando:
git clone --depth=1 https://github.com/GoogleCloudPlatform/training-data-analyst
  1. Crea un vínculo simbólico como un acceso directo a tu directorio de trabajo:
ln -s ~/training-data-analyst/courses/developingapps/v1.3/nodejs/cloudfunctions ~/cloudfunctions

Configura y ejecuta la aplicación de casos de éxito

  1. Para cambiar el directorio de trabajo, escribe el siguiente comando:
cd ~/cloudfunctions/start
  1. 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
  1. 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.
  1. 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

  1. Para acceder a Cloud Run Functions, en el menú de navegación (Ícono del menú de navegación), haz clic en Cloud Run.

  2. Haz clic en Escribir una función.

  3. En Nombre del servicio, escribe process-feedback.

  4. En Región, selecciona la región .

  5. Haz clic en + Agregar activadores y selecciona Activador de Pub/Sub en el menú desplegable.

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

  1. Haz clic en Guardar activador.

  2. Haz clic en Crear.

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

  1. Regresa a la ventana de Cloud Shell.
  2. 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.
  3. Haz clic en Take Test.
  4. Haz clic en Places.
  5. Completa la pregunta.
  6. 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

  1. Vuelve a la consola de Cloud Platform, en la página de Cloud Run.
  2. 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.
  1. Haz clic en la pestaña Registros para ver tus registros.
  2. 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.
  3. 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.
  1. 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

  1. En la consola de Google Cloud, haz clic en Abrir editor.

Botón Abrir editor destacado

Revisa la estructura del código de la aplicación de Cloud Function

  1. Navega a cloudfunctions/start.
  2. 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.
  1. 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.
  1. 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.
  1. 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

  1. Vuelve al archivo …function/index.js.
  2. Carga los módulos languageapi y spanner. Estos módulos están en la misma carpeta que el archivo index.js.
  3. 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.
  4. Muestra una promesa que invoca el método analyze del módulo languageapi para analizar el texto del comentario.
  5. Encadena un método .then(…) al final de la sentencia return.
  6. Suministra una función de flecha como valor de la devolución de llamada.
  7. En el cuerpo de la función de flecha, registra la puntuación de opiniones de la API de Natural Language en la consola.
  8. Agrega una propiedad nueva llamada puntuación al objeto feedback.
  9. Devuelve el objeto feedback para completar el cuerpo de la función flecha.
  10. Encadena un segundo método .then(…) al final del primero. Este usa el módulo spanner para guardar los comentarios.
  11. 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.
  12. 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.
  13. 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 };
  1. Guarda el archivo.

Empaqueta e implementa el código de Cloud Function

  1. Regresa a Cloud Shell y presiona Ctrl+C para detener la aplicación web.
  2. Para cambiar el directorio de trabajo al código de Cloud Function, escribe el siguiente comando:
cd function
  1. 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.
  1. 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.
  1. 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

  1. Regresa a la ventana de Cloud Shell.
  2. Vuelve a cambiar la carpeta de trabajo por la carpeta start del lab cloudfunctions:
cd ..
  1. Para iniciar la aplicación web, ejecuta el siguiente comando:
npm start
  1. Obtén una vista previa de la aplicación web.
  2. Haz clic en Take Test.
  3. Haz clic en Places.
  4. Completa la pregunta.
  5. Escribe algunos comentarios y haz clic en Enviar comentarios.

Visualiza la supervisión y registros de Cloud Function

  1. Vuelve a la sección Cloud Run de la consola de Cloud Platform.
  2. 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.
  1. Haz clic en la pestaña Registros para ver tus registros.
  2. 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.
  3. Si no aparece tu mensaje de Cloud Pub/Sub, haz clic en Actualizar.
  4. 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

  1. En el menú de navegación, haz clic en Ver todos los productos y, luego, en Spanner.
  2. 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.
  3. 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:

  1. Crea un tema de Cloud Pub/Sub llamado “answers”.
  2. Crea una tabla de Cloud Spanner llamada Answers con los nombres de columna y tipos de datos correspondientes
  3. Publicar los datos de las respuestas en el tema answers
  4. 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.

Antes de comenzar

  1. Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
  2. .
  3. 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.
  4. En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar

Usa la navegación privada

  1. Copia el nombre de usuario y la contraseña proporcionados para el lab
  2. Haz clic en Abrir la consola en modo privado

Accede a la consola

  1. Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
  2. Acepta las condiciones y omite la página de recursos de recuperación
  3. 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.