Puntos de control
Build simple a REST API
/ 20
Create a Revision for Cloud Run
/ 20
Create two cloud storage buckets
/ 10
Create a Pub/Sub topic for receiving notification from storage bucket
/ 10
Create a Pub/Sub subscription
/ 10
Create another build for REST API
/ 15
Create a new Revision
/ 15
Cómo usar Cloud Run para compilar una aplicación sin servidores que crea archivos PDF
- GSP644
- Descripción general
- Objetivos
- Configuración y requisitos
- Tarea 1. Información sobre la tarea
- Tarea 2. Habilita la API de Cloud Run
- Tarea 3. Implementa un servicio simple de Cloud Run
- Tarea 4. Activa tu servicio de Cloud Run cuando se suba un archivo nuevo
- Tarea 5. Comprueba si se activa el servicio de Cloud Run cuando se suben archivos a Cloud Storage
- Tarea 6: Contenedores
- Tarea 7. Prueba el servicio pdf-conversion
- ¡Felicitaciones!
GSP644
Descripción general
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í:
Objetivos
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 lab es de nivel intermedio, 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:
- Cómo importar datos a una base de datos de Firestore
- Compila una aplicación web sin servidores con Firebase
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)
- Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
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 Cloud
- El tiempo restante
- Las credenciales temporales que debe usar para el lab
- Otra información para completar el lab, si es necesaria
-
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
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 ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta. -
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}} También puedes encontrar el nombre de usuario en el panel Detalles del lab.
-
Haz clic en Siguiente.
-
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}} También puedes encontrar la contraseña en el panel Detalles del lab.
-
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia Cuenta de Google podría generar cargos adicionales. -
Haga clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
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.
- Haz clic en 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:
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.
- Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
-
Haz clic en Autorizar.
-
Ahora, el resultado debería verse de la siguiente manera:
Resultado:
- Puedes solicitar el ID del proyecto con este comando (opcional):
Resultado:
Resultado de ejemplo:
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, 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 |
Ruby, 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
-
Abre el 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 de Cloud Run Admin en la lista de resultados.
-
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:
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.
-
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 -
Luego, cambia tu directorio de trabajo actual a lab03:
cd pet-theory/lab03 -
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" }, ... -
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 -
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, devolverá la cadena “OK”.
-
Revisa el archivo llamado
lab03/Dockerfile
.Se denomina 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 Node.js como plantilla para que se cree la imagen.
- La última línea indica el comando que se ejecutará, que, en este caso, se refiere a “npm start”.
-
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 la instancia de Artifact Registry de tu proyecto.
-
Regresa a la consola de Cloud, abre el menú de navegación y selecciona Artifact Registry > Imágenes. Deberías ver alojado tu contenedor:
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la realización de la tarea indicada arriba.
-
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 -
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 -
Crea la variable de entorno
$SERVICE_URL
para la app 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.
-
Realiza una solicitud POST anónima a tu servicio nuevo:
curl -X POST $SERVICE_URL NOTA:
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 usuarios anónimos puedan llamar al servicio. -
Ahora intenta invocar al 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.
-
Ejecuta el siguiente comando para crear un bucket en Cloud Storage para los documentos subidos:
gsutil mb gs://$GOOGLE_CLOUD_PROJECT-upload -
Agrega otro bucket para los archivos PDF procesados:
gsutil mb gs://$GOOGLE_CLOUD_PROJECT-processed -
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.
-
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.
-
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" -
Otórgale permiso a la cuenta de servicio nueva para que invoque el servicio pdf-converter:
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 }}} -
Ejecuta este comando para buscar el número de tu proyecto:
gcloud projects list --filter="PROJECT_ID={{{ project_0.project_id | PROJECT_ID }}}" Usarás el valor del número de proyecto en el próximo comando.
PROJECT_ID: {{{ project_0.project_id | PROJECT_ID }}} NAME: {{{ project_0.project_id | PROJECT_ID }}} PROJECT_NUMBER: 103480415252 -
Crea una variable de entorno
PROJECT_NUMBER
PROJECT_NUMBER=$(gcloud projects list --filter="PROJECT_ID={{{ project_0.project_id | PROJECT_ID }}}" --format=json | jq -r .[0].projectNumber) -
Por último, crea una suscripción a Pub/Sub para que pdf-converter 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.
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.
-
Copia algunos archivos de prueba en tu bucket de carga:
gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload -
Cuando la carga finalice, regresa a la pestaña de la consola de Cloud, abre el menú de navegación y selecciona Logging en la sección Operaciones.
-
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.
-
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. -
¿Puedes encontrar el nombre del archivo que subiste en este objeto?
Nota:
Si no ves ninguna entrada de registro que comience con “file”, prueba hacer clic en el botón “Cargar registros más recientes” que está cerca de la parte inferior de la página. -
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
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, 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:
Ruby le responde a Patrick…
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, administrador de TI |
Hola, Ruby: Perfecto. Este es el comando con el que suelo instalar LibreOffice en los servidores de la oficina:
Avísame si necesitas más información. Patrick |
Para compilar el contenedor, se deberán integrar varios componentes:
Actualiza el manifiesto.
Una vez identificados todos los archivos, se puede crear el manifiesto. 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 comandoRUN apt-get update -y && apt-get install -y libreoffice && apt-get clean
como se muestra a continuación:FROM {{{ project_0.startup_script.node_version | NODE_VERSION }}} 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
-
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(); -
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'); }) -
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}`); } -
Asegúrate de que el archivo
index.js
tenga el siguiente aspecto:Nota:
Para evitar errores de formato, se recomienda reemplazar todo el código del archivoindex.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:
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
).
-
Ejecuta el siguiente comando para compilar el contenedor:
gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter
Ingresa
Y
si recibes un mensaje emergente para habilitar la API de Cloud BuildPrueba la tarea completada
Haz clic en Revisar mi progreso para verificar la realización de la tarea indicada arriba.
-
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.
Tarea 7. Prueba el servicio pdf-conversion
-
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 -
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. -
Ejecuta el siguiente comando para subir algunos archivos de ejemplo:
gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload -
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. -
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”.
Sigue el recorrido sin servidores en el curso Serverless Cloud Run Development. 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.
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: 28 de mayo de 2024
Prueba más reciente del lab: 28 de mayo de 2024
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.