El conocimiento es el nuevo dinero.
Aprender es la nueva manera en la que inviertes
Acceso Cursos

Creación de servicios PDF de código abierto con Angular y GCP - Despliegue de servicios en Cloud Run

Bienvenido al viaje de construir un servicio PDF de código abierto usando Angular (Analogjs), Firestore, Cloud Storage, y CloudRun.

· 5 min de lectura
Creación de servicios PDF de código abierto con Angular y GCP - Despliegue de servicios en Cloud Run

Este proyecto sirve como una plataforma para compartir conocimientos, aprender continuamente las mejores prácticas, y al mismo tiempo contribuir a la comunidad.
Demo: https://pdfun.xyz
GitHub: https: //github.com/dalenguyen/pdfun
La solución está construida alrededor del ecosistema GCP, es mejor desplegar el proyecto en GCP, para que pueda acceder a sus servicios. Hay dos partes de la solución:

  • Web UI (Analogjs - Angular): manejar la interacción con el usuario
  • Backend (Node - Express): procesar archivos PDF

¿Por qué desplegar en Cloud Run?

Cloud Run es una plataforma informática totalmente gestionada por Google Cloud Platform (GCP) que escala automáticamente sus contenedores sin estado. Pero, ¿por qué deberíamos elegir Cloud Run para desplegar nuestros servicios? He aquí algunas razones:

  • Cloud Run es una excelente opción para desplegar servicios debido a su soporte para tareas de larga duración. Los servicios pueden ejecutarse durante un máximo de 60 minutos, lo que permite realizar tareas que requieren un tiempo de cálculo considerable.
  • Además, Cloud Run ofrece ventajas como el escalado automático, un entorno fácil de usar para los desarrolladores, registro y supervisión integrados, un modelo de precios de pago por uso y portabilidad a distintas plataformas. Esto la convierte en una solución versátil y rentable para implementar nuestro servicio PDF.

Implementación en Google Cloud Run mediante Docker

Cloud Run utiliza una imagen Docker para desplegar su servicio, así que lo que tenemos que hacer es envolver nuestras aplicaciones en una imagen.

Requisitos previos

Antes de empezar, asegúrate de que tienes lo siguiente:

  • Un proyecto de Google Cloud con la facturación activada.
  • Docker instalado en tu máquina local.
  • El SDK de Google Cloud instalado e inicializado.

Por favor, sigue la documentación de Deploying to Cloud Run para más instrucciones.

CPU
1 vCPU
MEMORIA
1 GB
ALMACENAMIENTO
10 GB
TRANSFERENCIA
1 TB
PRECIO
$ 4 mes
Para obtener el servidor GRATIS debes de escribir el cupon "LEIFER"

Crea tu imagen de Docker

A continuación, tendrás que compilar tu proyecto y la imagen Docker. Esto puede hacerse utilizando el comando docker build. Asegúrese de etiquetar su imagen con el nombre del registro. Por ejemplo:

// build-new-image.sh

imageTag=${REGION}-docker.pkg.dev/$GCLOUD_PROJECT/$REPO/$image

docker build -t $imageTag -f Dockerfile --platform linux/x86_64 .

Sustituye REGIONS, GCLOUD_PROJECT, REPO e image por el ID de tu proyecto de Google Cloud, el nombre de tu imagen y la etiqueta de tu imagen, respectivamente.

Envíe su imagen al Registro de artefactos

Una vez creada la imagen, puedes enviarla al Registro de artefactos mediante el comando docker push:

docker push $imageTag

Crear un nuevo servicio en Cloud Run

Con su imagen ahora en el Registro de artefactos, puede crear un nuevo servicio en Cloud Run. Puede ejecutar el siguiente comando para desplegar el servicio PDF:

gcloud run deploy pdfun \
  --image=us-central1-docker.pkg.dev/pdfun-prod/pdf/pdfun \
  --platform=managed --project=pdfun-prod --region=us-central1 \
  --allow-unauthenticated

Este comando desplegará la interfaz web con el nombre de servicio pdfun en Cloud Run y permitirá que todo el mundo acceda al sitio web (--allow-unauthenticated).

Bonus: Utilizando Nx para desplegar servicios

A la hora de desplegar servicios, Nx ofrece un proceso simplificado. Después de la configuración, todo lo que tengo que hacer es ejecutar yarn deploy para desplegar sólo las aplicaciones afectadas.

Por ejemplo, si sólo actualizo el frontend, entonces el frontend es la única aplicación que se construirá y desplegará.
Esto es lo que sucede después de ejecutar el comando de despliegue:

npx nx affected -t deploy --base=main~1 --head=main

Este comando ejecutará el objetivo de despliegue bajo project.json para los proyectos afectados comparando el commit y el último commit en la rama principal.
Echemos un vistazo al project. json de la aplicación pdfun:


This command will run the deploy target under project.json for affected projects by comparing the commit and the latest commit on main branch.

Let’s have a look at the project.json for the pdfun application:
// project.json

...

"deploy": {
  "executor": "nx:run-commands",
  "options": {
    "commands": ["nx deploy-docker pdf", "nx deploy-cloudrun pdf"],
    "color": true,
    "parallel": false
  },
  "dependsOn": [
    {
      "target": "build"
    }
  ]
},
"deploy-cloudrun": {
  "command": "gcloud run deploy pdfun --image=us-central1-docker.pkg.dev/pdfun-prod/pdf/pdfun --platform=managed --project=pdfun-prod --region=us-central1 --allow-unauthenticated"
},
"deploy-docker": {
  "command": "./build-new-image.sh --dir dist/pdf/analog --image pdfun",
  "parallel": false,
  "dependsOn": [
    {
      "target": "copy"
    }
  ]
},

Así, cuando el objetivo de despliegue se ejecute, activará otros dos comandos:

npx nx deploy-docker pdf
npx nx deploy-cloudrun pdf

Estos comandos a su vez construirán la imagen docker, empujarán la imagen y desplegarán el servicio Cloud Run basado en la imagen cargada en Artifact Registry.
Este es el resultado:

dalenguyen$ yarn deploy

yarn run v1.22.19
$ npx nx affected -t deploy --base=main~1 --head=main

 NX   Running target deploy for 2 projects and 3
 NX   Running target deploy for 2 projects and 3 tasks they depend on

   ✔  nx run domain:build (6s)
———————————————————————————————————————————————
   ✔  nx run pdf:build:production (17s)
———————————————————————————————————————————————
   ✔  nx run pdf:deploy (17s)
   ✔  nx run pdf-on-create:deploy (29s)
———————————————————————————————————————————————

 NX   Successfully ran target deploy for 2 projects and 3 tasks they depend on (37s)

Puede ver que, utilizando la caché de compilación, dos servicios se compilaron y desplegaron localmente en aproximadamente 1 minuto.

¡feliz programación!

Fuente