arrow_back

Cómo usar Cloud Run para compilar una aplicación sin servidores que crea archivos PDF

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 usar Cloud Run para compilar una aplicación sin servidores que crea archivos PDF

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

GSP644

Labs de autoaprendizaje de Google Cloud

Logotipo de Pet Theory

Descripción general

Para los labs de la Quest Google Cloud Serverless Workshop: Pet Theory, leerás el caso de una empresa ficticia y ayudarás a los personajes a llevar a cabo su plan de migración sin servidores.

Hace doce años, Lily fundó la cadena de clínicas veterinarias Pet Theory. Actualmente les envían a los clientes las facturas en formato DOCX, pero muchos se quejaron de que no pueden abrir los archivos. Para mejorar la satisfacción de los clientes, Lily le pidió a Patrick, que trabaja en TI, que busque una alternativa para mejorar la situación actual.

En el equipo de operaciones de Pet Theory, trabaja una sola persona, por lo que desean invertir en una solución rentable que no requiera mucho mantenimiento continuo. Después de analizar las distintas opciones de procesamiento, Patrick decide usar Cloud Run.

Cloud Run es una plataforma sin servidores: elimina la complejidad que supone la administración de infraestructura, de manera que puedas enfocarte en compilar tu aplicación en lugar de preocuparte por la sobrecarga. Como producto de Google sin servidores, puede escalar a cero, así que no generará costos cuando no se utilice. También te permite usar paquetes binarios personalizados basados en contenedores, lo cual significa que ahora es posible compilar artefactos aislados coherentes.

En este lab, compilarás una app web de conversión de PDF en Cloud Run que convierta automáticamente los archivos almacenados en Cloud Storage en PDF almacenados en carpetas separadas.

Arquitectura

En este diagrama, se muestra una descripción general de los servicios que usarás y la manera en que se conectan entre sí:

Diagrama de arquitectura

Qué aprenderás

En este lab, aprenderás a hacer lo siguiente:

  • Convertir una aplicación de Node.js en un contenedor
  • Compilar contenedores con Google Cloud Build
  • Crear un servicio de Cloud Run que convierta archivos en archivos PDF en la nube
  • Utilizar el procesamiento de eventos con Cloud Storage

Requisitos previos

Este es un lab de nivel básico, lo que supone que el usuario tiene conocimientos previos sobre los entornos de shell y la consola. Será útil tener experiencia en Firebase, pero no es obligatorio. Se recomienda que, antes de realizar este lab, hayas completado los siguientes labs de Google Cloud Skills Boost:

Además, deberás conocer cómo editar archivos. Puedes usar tu editor de texto favorito (como nano, vi, etc.) o puedes iniciar el editor de código de Cloud Shell, que se encuentra en la cinta superior:

Ícono del editor de código

Cuando esté todo listo, desplázate hacia abajo y sigue los pasos que se muestran a continuación para configurar el entorno de tu lab.

Configuración y requisitos

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. Información sobre la tarea

Pet Theory desea convertir sus facturas en archivos PDF para que los clientes puedan abrirlos de manera confiable. El equipo quiere que esta conversión se realice automáticamente para minimizar la carga de trabajo para Lisa, la gerente de oficina.

Ruby, la asesora informática de Pet Theory, recibe un mensaje de Patrick, de TI…

Patrick

Patrick, administrador de TI

Hola, Ruby:

Estuve investigando y descubrí que LibreOffice puede convertir muchos formatos de archivo diferentes en PDF.

¿Sería posible ejecutar LibreOffice en la nube sin tener que mantener los servidores?

Patrick

RubyRuby, asesora de software

Hola, Patrick:

Creo que tengo el producto ideal para este tipo de situación.

Acabo de ver un excelente video de Next '19 sobre Cloud Run en YouTube. Parece que podemos ejecutar LibreOffice en un entorno sin servidores mediante Cloud Run. ¡No hará falta mantener los servidores!

Te enviaré algunos recursos que te ayudarán a dar los primeros pasos.

Ruby

Ayuda a Patrick a configurar e implementar Cloud Run.

Tarea 2. Habilita la API de Cloud Run

  1. Abre el Menú de navegación (Ícono del menú de navegación) y haz clic en APIs y servicios > Biblioteca. En la barra de búsqueda, escribe “Cloud Run” y selecciona la API correspondiente en la lista de resultados.

  2. Haz clic en Habilitar y, luego, en el botón Atrás de tu navegador dos veces. Ahora, la consola debería verse de la siguiente manera:

Resultado de la API de Cloud Run

Tarea 3. Implementa un servicio simple de Cloud Run

Ruby desarrolló un prototipo de Cloud Run y quiere que Patrick lo implemente en Google Cloud. Ahora, ayuda a Patrick a establecer el servicio de PDF de Cloud Run para Pet Theory.

  1. Abre una nueva sesión de Cloud Shell y ejecuta el siguiente comando para clonar el repositorio de Pet Theory:
git clone https://github.com/rosera/pet-theory.git
  1. Luego, cambia tu directorio de trabajo actual a lab03:
cd pet-theory/lab03
  1. Edita package.json con el editor de código de Cloud Shell o tu editor de texto preferido. En la sección "scripts", agrega "start": "node index.js", como se muestra a continuación:
... "scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, ...
  1. Ahora, ejecuta los siguientes comandos en Cloud Shell para instalar los paquetes que usará tu secuencia de comandos de conversión:
npm install express npm install body-parser npm install child_process npm install @google-cloud/storage
  1. Abre el archivo lab03/index.js y revisa el código.

Se implementará la aplicación como un servicio de Cloud Run que acepta solicitudes HTTP POST. Si la solicitud POST es una notificación de Pub/Sub acerca de un archivo subido, el servicio escribirá los detalles del archivo en el registro. En caso contrario, mostrará la string "OK".

  1. Revise el archivo llamado lab03/Dockerfile.

Ese archivo se llama manifiesto y contiene una receta para que el comando de Docker compile una imagen. Cada línea comienza con un comando que le indica a Docker cómo procesar la siguiente información:

  • La primera lista indica que la imagen base debería usar el nodo v12 como plantilla para que se cree la imagen.
  • La última línea indica el comando que se ejecutará, que, en esta instancia, se refiere a "npm start".
  1. Para compilar e implementar la API de REST, usa Google Cloud Build. Ejecuta este comando para iniciar el proceso de compilación:
gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter

El comando compila un contenedor con tu código y lo coloca en Container Registry, en tu proyecto.

  1. Regresa a la consola de Cloud, abre el menú de navegación y selecciona Container Registry > Imágenes. Deberías ver alojado tu contenedor:

Se muestra Container Registry con el convertidor de PDF

Prueba la tarea completada

Haz clic en Revisar mi progreso para verificar la realización de la tarea indicada arriba.

Compilar una API de REST simple
  1. Regresa a la pestaña de tu editor de código y, en Cloud Shell, ejecuta el siguiente comando para implementar tu aplicación:
gcloud run deploy pdf-converter \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter \ --platform managed \ --region {{{ project_0.default_region | Region }}} \ --no-allow-unauthenticated \ --max-instances=1
  1. Cuando la implementación esté completa, verás un mensaje como este:
Service [pdf-converter] revision [pdf-converter-00001] has been deployed and is serving 100 percent of traffic at https://pdf-converter-[hash].a.run.app
  1. Crea la variable de entorno $SERVICE_URL para la aplicación de manera que puedas acceder a ella con facilidad:
SERVICE_URL=$(gcloud beta run services describe pdf-converter --platform managed --region {{{ project_0.default_region | Lab Region }}} --format="value(status.url)") echo $SERVICE_URL

Prueba la tarea completada

Haz clic en Revisar mi progreso para verificar la realización de la tarea indicada arriba.

Crear una revisión para Cloud Run
  1. Realiza una solicitud POST anónima a tu servicio nuevo:
curl -X POST $SERVICE_URL

Se mostrará un mensaje de error que dirá "Your client does not have permission to get the URL". Este es el comportamiento esperado: no queremos que los usuarios anónimos puedan llamar al servicio.

  1. Ahora intenta invocar el servicio como usuario autorizado:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL

Si recibes la respuesta "OK", significa que implementaste correctamente un servicio de Cloud Run. ¡Bien hecho!

Tarea 4. Activa tu servicio de Cloud Run cuando se suba un archivo nuevo

Ahora que se implementó correctamente el servicio de Cloud Run, Ruby desea que Patrick cree un área de etapa de pruebas para convertir los datos. El bucket de Cloud Storage usará un activador de eventos para notificar a la aplicación cuando se suba y se deba procesar un archivo nuevo.

  1. Ejecuta el siguiente comando para crear un bucket en Cloud Storage para los documentos subidos:
gsutil mb gs://$GOOGLE_CLOUD_PROJECT-upload
  1. Agrega otro bucket para los PDF procesados:
gsutil mb gs://$GOOGLE_CLOUD_PROJECT-processed
  1. Ahora, regresa a tu pestaña de la consola de Cloud, abre el Menú de navegación y selecciona Cloud Storage. Verifica que se hayan creado los buckets (también habrá otros buckets que utiliza la plataforma).

Prueba la tarea completada

Haz clic en Revisar mi progreso para verificar la realización de la tarea indicada arriba.

Crear dos depósitos de Cloud Storage
  1. En Cloud Shell, ejecuta el siguiente comando para indicarle a Cloud Storage que envíe una notificación de Pub/Sub cada vez que se haya terminado de subir un archivo nuevo al bucket de documentos:
gsutil notification create -t new-doc -f json -e OBJECT_FINALIZE gs://$GOOGLE_CLOUD_PROJECT-upload

Las notificaciones tendrán la etiqueta del tema "new-doc".

Prueba la tarea completada

Haz clic en Revisar mi progreso para verificar la realización de la tarea indicada arriba.

Crear un tema de Pub/Sub para administrar las notificaciones del bucket de almacenamiento
  1. Luego, crea una cuenta de servicio nueva que Pub/Sub usará para activar los servicios de Cloud Run:
gcloud iam service-accounts create pubsub-cloud-run-invoker --display-name "PubSub Cloud Run Invoker"
  1. Otórgale permiso a la cuenta de servicio nueva para que invoque el servicio del convertidor de PDF:
gcloud beta run services add-iam-policy-binding pdf-converter --member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com --role=roles/run.invoker --platform managed --region {{{ project_0.default_region | Lab Region }}}
  1. Ejecuta este comando para buscar el número de tu proyecto:
gcloud projects list

Busca el proyecto cuyo nombre comience con "qwiklabs-gcp-". Usarás el valor del número de proyecto en el próximo comando.

Número de proyecto destacado en el resultado

  1. Crea una variable de entorno PROJECT_NUMBER. Reemplaza [project number] por el número que obtuviste con el último comando:
PROJECT_NUMBER=[project number]
  1. Luego, habilita tu proyecto para crear tokens de autenticación de Cloud Pub/Sub:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com --role=roles/iam.serviceAccountTokenCreator Nota: Si te aparece un error como service account does not exist cuando ejecutas el comando anterior, habilita la API de Cloud Pub/Sub. Si ya está habilitada, inhabilítala y habilítala de nuevo. Luego, vuelve a ejecutar el comando anterior.
  1. Por último, crea una suscripción a Pub/Sub para que el convertidor de PDF pueda ejecutarse cada vez que se publique un mensaje en el tema "new-doc".
gcloud beta pubsub subscriptions create pdf-conv-sub --topic new-doc --push-endpoint=$SERVICE_URL --push-auth-service-account=pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com

Prueba la tarea completada

Haz clic en Revisar mi progreso para verificar la realización de la tarea indicada arriba.

Crear una suscripción a Pub/Sub

Tarea 5. Comprueba si se activa el servicio de Cloud Run cuando se suben archivos a Cloud Storage

Para verificar que la aplicación funcione como se espera, Ruby le pide a Patrick que suba algunos datos de prueba al bucket de almacenamiento con nombre y que revise Cloud Logging.

  1. Copia algunos archivos de prueba en tu bucket de carga:
gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload
  1. Cuando la carga finalice, regresa a tu pestaña de la consola de Cloud, abre el menú de navegación y selecciona Logging en la sección Operaciones.

  2. En el menú desplegable Recurso, filtra tus resultados para Revisión de Cloud Run y haz clic en Aplicar. Luego, haz clic en Ejecutar consulta.

  3. En Resultados de la consulta, busca una entrada de registro que comience con file: y haz clic en ella. Verás un volcado de los datos del archivo que Pub/Sub envía a tu servicio de Cloud Run cuando se sube un archivo nuevo.

  4. ¿Puedes encontrar el nombre del archivo que subiste en este objeto?

Resultados de la consulta

Nota: Si no ves ninguna entrada de registro que comience con “file”, prueba hacer clic en el botón “load newer logs” que está cerca de la parte inferior de la página.
  1. Ahora, regresa a la pestaña del editor de código y ejecuta el siguiente comando en Cloud Shell para borrar los archivos de tu directorio upload para limpiarlo:
gsutil -m rm gs://$GOOGLE_CLOUD_PROJECT-upload/*

Tarea 6. Contenedores de Docker

Patrick necesita convertir en PDF un conjunto de facturas pendientes para que todos los clientes puedan abrirlas. Le envía un correo electrónico a Ruby para pedirle ayuda…

Patrick

Patrick, administrador de TI

Hola, Ruby:

Según lo que encontraste, creo que podemos automatizar este proceso y pasar a usar PDF como formato para todas las facturas.

Ayer me dediqué a programar una solución y compilé una secuencia de comandos de Node.js que hará lo que necesitamos. ¿Podrías revisarlo?

Patrick

Patrick le envía a Ruby el fragmento de código que escribió para producir un PDF a partir de un archivo:

const {promisify} = require('util'); const exec = promisify(require('child_process').exec); const cmd = 'libreoffice --headless --convert-to pdf --outdir ' + `/tmp "/tmp/${fileName}"`; const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; }

Ruby le responde a Patrick…

Ruby

Ruby, asesora de software

Hola, Patrick:

Cloud Run usa contenedores, así que debemos darle este formato a tu aplicación. En el siguiente paso, tenemos que crear un manifiesto de Dockerfile para la aplicación.

Tu código usa LibreOffice. ¿Podrías enviarme el comando para instalar ese software? Tendré que incluirlo en el contenedor.

Ruby

Patrick

Patrick, administrador de TI

Hola, Ruby:

Perfecto. Este es el comando con el que suelo instalar LibreOffice en los servidores de la oficina:

apt-get update -y && apt-get install -y libreoffice && apt-get clean

Avísame si necesitas más información.

Patrick

Para compilar el contenedor, se deberán integrar varios componentes:

Componentes: index.js, OfficeLibre, Express, body-parser, child_process y @google-cloud/storage

Actualiza el contenedor de Docker

Una vez identificados todos los archivos, se puede crear el Dockerfile. Ayuda a Ruby a configurar e implementar el contenedor.

El paquete para LibreOffice no se incluyó en el contenedor, así que habrá que agregarlo. Patrick había proporcionado los comandos que usa para compilar su aplicación. Ruby los agregará como un comando RUN dentro del Dockerfile.

  • Abre el manifiesto de Dockerfile y agrega la línea del comando RUN apt-get update -y && apt-get install -y libreoffice && apt-get clean como se muestra a continuación:
FROM node:16 RUN apt-get update -y \ && apt-get install -y libreoffice \ && apt-get clean WORKDIR /usr/src/app COPY package.json package*.json ./ RUN npm install --only=production COPY . . CMD [ "npm", "start" ]

Implementa la nueva versión del servicio pdf-conversion

  1. Abre el archivo index.js y agrega los siguientes requisitos de paquete en la parte superior:
const {promisify} = require('util'); const {Storage} = require('@google-cloud/storage'); const exec = promisify(require('child_process').exec); const storage = new Storage();
  1. Reemplaza app.post('/', async (req, res) por el siguiente código:
app.post('/', async (req, res) => { try { const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name); } catch (ex) { console.log(`Error: ${ex}`); } res.set('Content-Type', 'text/plain'); res.send('\n\nOK\n\n'); })
  1. Ahora agrega el siguiente código, que procesa documentos de LibreOffice, en la parte inferior del archivo:
async function downloadFile(bucketName, fileName) { const options = {destination: `/tmp/${fileName}`}; await storage.bucket(bucketName).file(fileName).download(options); } async function convertFile(fileName) { const cmd = 'libreoffice --headless --convert-to pdf --outdir /tmp ' + `"/tmp/${fileName}"`; console.log(cmd); const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; } console.log(stdout); pdfFileName = fileName.replace(/\.\w+$/, '.pdf'); return pdfFileName; } async function deleteFile(bucketName, fileName) { await storage.bucket(bucketName).file(fileName).delete(); } async function uploadFile(bucketName, fileName) { await storage.bucket(bucketName).upload(`/tmp/${fileName}`); }
  1. Asegúrate de que tu archivo index.js se vea de la siguiente manera:
Nota: Para evitar errores de formato, se recomienda reemplazar todo el código del archivo index.js por este código de ejemplo. const {promisify} = require('util'); const {Storage} = require('@google-cloud/storage'); const exec = promisify(require('child_process').exec); const storage = new Storage(); const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); const port = process.env.PORT || 8080; app.listen(port, () => { console.log('Listening on port', port); }); app.post('/', async (req, res) => { try { const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name); } catch (ex) { console.log(`Error: ${ex}`); } res.set('Content-Type', 'text/plain'); res.send('\n\nOK\n\n'); }) function decodeBase64Json(data) { return JSON.parse(Buffer.from(data, 'base64').toString()); } async function downloadFile(bucketName, fileName) { const options = {destination: `/tmp/${fileName}`}; await storage.bucket(bucketName).file(fileName).download(options); } async function convertFile(fileName) { const cmd = 'libreoffice --headless --convert-to pdf --outdir /tmp ' + `"/tmp/${fileName}"`; console.log(cmd); const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; } console.log(stdout); pdfFileName = fileName.replace(/\.\w+$/, '.pdf'); return pdfFileName; } async function deleteFile(bucketName, fileName) { await storage.bucket(bucketName).file(fileName).delete(); } async function uploadFile(bucketName, fileName) { await storage.bucket(bucketName).upload(`/tmp/${fileName}`); }
  • La lógica principal se encuentra en estas funciones:
const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name);

Cada vez que se suba un archivo, este servicio se activará y realizará estas tareas (cada una corresponde a una línea de arriba):

  • Extraerá los detalles del archivo de la notificación de Pub/Sub.
  • Descargará el archivo de Cloud Storage en el disco duro local. En realidad, este disco no es físico, sino una sección de memoria virtual que se comporta como un disco.
  • Convertirá el archivo descargado en PDF.
  • Subirá el archivo PDF a Cloud Storage. La variable de entorno process.env.PDF_BUCKET contiene el nombre del bucket de Cloud Storage en el cual se escribirán los archivos PDF. Le asignarás un valor a esta variable cuando implementes el servicio a continuación.
  • Borrará el archivo original de Cloud Storage.

El resto del archivo index.js implementa las funciones a las que llama este código de nivel superior.

Es momento de implementar el servicio y de establecer la variable de entorno PDF_BUCKET. También es una buena idea asignarle a LibreOffice 2 GB de RAM para trabajar (observa la línea que tiene la opción --memory).

  1. Ejecuta el siguiente comando para compilar el contenedor:
gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter

Prueba la tarea completada

Haz clic en Revisar mi progreso para verificar la realización de la tarea indicada arriba.

Crear otra compilación para la API de REST
  1. Ahora, implementa la versión más reciente de tu aplicación:
gcloud run deploy pdf-converter \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter \ --platform managed \ --region {{{ project_0.default_region | Lab Region }}} \ --memory=2Gi \ --no-allow-unauthenticated \ --max-instances=1 \ --set-env-vars PDF_BUCKET=$GOOGLE_CLOUD_PROJECT-processed

Como el contenedor tiene la parte de LibreOffice, esta compilación tardará más que la anterior. Es un buen momento para levantarse y estirar las piernas durante unos minutos.

Haz clic en Revisar mi progreso para verificar el objetivo.

Crear una revisión nueva

Tarea 7. Prueba el servicio pdf-conversion

  1. Cuando finalicen los comandos de implementación, ejecuta lo siguiente para asegurarte de que el servicio se haya implementado de forma correcta:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL
  1. Si recibes la respuesta "OK", significa que implementaste correctamente el servicio actualizado de Cloud Run. LibreOffice puede convertir en PDF muchos tipos de archivo: DOCX, XLSX, JPG, PNG, GIF, etcétera.

  2. Ejecuta el siguiente comando para subir algunos archivos de ejemplo:

gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload
  1. Regresa a la consola de Cloud, abre el Menú de navegación y selecciona Cloud Storage. Abre el bucket -upload y haz clic en el botón Actualizar algunas veces. Verás cómo se borran los archivos de a uno a medida que se convierten en PDF.

  2. En el menú de la izquierda, haz clic en Buckets y, luego, en el bucket cuyo nombre termina con “-processed”. Debería contener las versiones en PDF de todos los archivos. Si lo deseas, puedes abrir los archivos PDF para asegurarte de que se hayan convertido correctamente:

Nota: Vuelve a ejecutar el comando si no ves todos los archivos PDF convertidos en el bucket -processed.

¡Felicitaciones!

Ahora Pet Theory tiene un sistema para convertir sus archivos antiguos en PDF. Con solo subir los archivos antiguos al bucket "upload", el servicio pdf-converter los convierte en PDF y los escribe con ese formato en el bucket "processed".

Finaliza la Quest

Este lab de autoaprendizaje es parte de la Quest Serverless Cloud Run Development. 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 y obtén un crédito inmediato de realización. Consulta el catálogo de Google Cloud Skills Boost para ver todas las Quests disponibles.

Realiza tu próximo lab

Continúa la Quest con el siguiente lab de la serie, Compila un sistema resiliente y asíncrono con Cloud Run y Pub/Sub.

Próximos pasos/Más información

Obtén más información sobre los contenedores sin servidores: Video de Next' 19 en YouTube

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: 26 de octubre de 2023

Prueba más reciente del lab: 27 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.