Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Cloud Run y Cloud Storage… la combinación perfecta

By Wayman SmithMay 2, 20243 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

Este artículo describe la reciente mejora de Cloud Run que permite montar un bucket de Cloud Storage como volumen de contenedor.

Introducción

Si quieres usar servicios serverless como Cloud Run para un sitio web estático, lo más probable es que necesites trabajar con archivos guardados en un bucket. Una nueva funcionalidad de Google Cloud Platform lo vuelve más sencillo que nunca. Por si no lo conoces, Cloud Run es un servicio administrado para ejecutar workloads en contenedores sobre la infraestructura escalable de Google. En este artículo tomamos como ejemplo un sitio web estático, aunque los casos de uso de esta funcionalidad son prácticamente infinitos.

El problema

Hasta hace poco, para acceder al almacenamiento de objetos desde Cloud Run había que recurrir a herramientas de terceros o a bibliotecas cliente de la nube dentro de la aplicación. Aunque funcionaba, este enfoque solía sumar carga de escalabilidad y administración al proceso de despliegue.

Con la reciente incorporación de los montajes de Cloud Storage en Cloud Run, ya puedes montar buckets de Cloud Storage como volúmenes dentro de los contenedores de Cloud Run sin recurrir a bibliotecas adicionales.

Ya que repasamos las mejoras y sus beneficios, vamos al caso de uso: alojar un sitio web estático con Cloud Run y montajes de volumen de Cloud Storage.

La solución

Empieza creando un proyecto que aloje la aplicación y el bucket de almacenamiento. Desde tu aplicación de línea de comandos preferida, define algunas variables de entorno útiles en la terminal y configura gcloud.

export GCP_PROJECT=my-cloud-run-static-site
export REGION=us-east4
gcloud projects create $GCP_PROJECT
gcloud config set project $GCP_PROJECT

Luego, habilita las APIs de Cloud Run, Cloud Build y Artifact Registry para poder usar estos servicios.

gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com

Ahora descarguemos el código de nuestro sitio estático.

git clone https://github.com/waymanls/my-cloud-run-static-site.git

Si revisas el contenido del archivo index.html, notarás que las imágenes se ubican en la ruta /images. Vamos a necesitar esa ruta más adelante en el tutorial. Por ahora, creemos el bucket de Cloud Storage que alojará los recursos estáticos y subamos también la imagen JPEG.

gcloud storage buckets create gs://$GCP_PROJECT-bucket --location=$REGION
gcloud storage cp beach.jpeg gs://$GCP_PROJECT-bucket/beach.jpeg

A continuación, crea el repositorio de Artifact Registry.

gcloud artifacts repositories create $GCP_PROJECT-repo \
--repository-format=docker \
--location=$GCP_REGION

Con el repositorio de Artifact Registry ya creado, construiremos la imagen del contenedor y la subiremos con Cloud Build.

gcloud builds submit --tag $REGION-docker.pkg.dev/$GCP_PROJECT/$GCP_PROJECT-repo/$GCP_PROJECT-svc

Una vez que la imagen del contenedor esté en el repositorio, podemos usarla para crear una aplicación de Cloud Run de Segunda Generación.

gcloud run deploy $GCP_PROJECT-svc --image $REGION-docker.pkg.dev/$GCP_PROJECT/$GCP_PROJECT-repo/$GCP_PROJECT-svc \
--execution-environment=gen2 --allow-unauthenticated

Llegamos al componente final del ejemplo: vincular el bucket de Cloud Storage como volumen del contenedor. Esto se hace "actualizando" el servicio de Cloud Run. Si bien los valores de configuración se pasan mediante flags en el comando gcloud, también pueden definirse a través de un archivo YAML de Service. Como ves en el comando de abajo, usamos la ruta "images" que definimos antes en el archivo index.html como ruta base y nombre del volumen del contenedor.

gcloud run services update $GCP_PROJECT-svc \
--execution-environment=gen2 \
--add-volume=name=images,type=cloud-storage,bucket=$GCP_PROJECT-bucket \
--add-volume-mount=volume=images,mount-path=/usr/share/nginx/html/images

Al terminar estos pasos, tendrás una aplicación de Cloud Run que monta correctamente un bucket de Cloud Storage como volumen dentro del servicio y accede a un objeto desde ese volumen.

Limpieza

Al finalizar, se recomienda eliminar el proyecto con el siguiente comando.

gcloud projects delete $GCP_PROJECT

Entre las ventajas de este método destaca la posibilidad de conectar de forma nativa tus workloads serverless de Cloud Run directamente con los recursos estáticos del backend de almacenamiento de objetos, lo que elimina la necesidad de bibliotecas cliente de la nube y servicios de terceros.