1. Introducción
Cloud Run es una plataforma de procesamiento administrada que te permite ejecutar contenedores sin estado que se pueden invocar a través de solicitudes HTTP. Se basa en el proyecto de código abierto Knative, lo que permite trasladar cargas de trabajo entre plataformas. Cloud Run es una plataforma sin servidores que quita la complejidad de la administración de la infraestructura para que puedas enfocarte en lo que más importa: compilar aplicaciones extraordinarias.
El objetivo de este instructivo es crear una aplicación web sencilla y, luego, implementarla en Cloud Run.
2. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.
- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
- El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como
PROJECT_ID
). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto. - Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.
Inicia Cloud Shell
Si bien Google Cloud se puede operar de manera remota desde tu laptop, en este instructivo usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
Activar Cloud Shell
- En la consola de Cloud, haz clic en Activar Cloud Shell.
Si es la primera vez que inicias Cloud Shell, verás una pantalla intermedia que describe en qué consiste. Si apareció una pantalla intermedia, haz clic en Continuar.
El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.
Esta máquina virtual está cargada con todas las herramientas de desarrollo necesarias. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que mejora considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer con un navegador.
Una vez que te conectes a Cloud Shell, deberías ver que estás autenticado y que el proyecto está configurado con tu ID del proyecto.
- En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
gcloud auth list
Resultado del comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Ejecuta el siguiente comando en Cloud Shell para confirmar que el comando de gcloud conoce tu proyecto:
gcloud config list project
Resultado del comando
[core] project = <PROJECT_ID>
De lo contrario, puedes configurarlo con el siguiente comando:
gcloud config set project <PROJECT_ID>
Resultado del comando
Updated property [core/project].
3. Habilitación de las API
En Cloud Shell, habilita las APIs de Artifact Registry, Cloud Build y Cloud Run:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com
Esto mostrará un mensaje de éxito similar a este:
Operation "operations/..." finished successfully.
Ya tienes todo listo para comenzar a trabajar y escribir tu aplicación...
4. Escribe la aplicación
En este paso, compilarás una aplicación de Python simple basada en Flask que responderá a las solicitudes HTTP.
Directorio de trabajo
Usa Cloud Shell para crear un directorio de trabajo llamado helloworld-python
y cámbiate a él:
mkdir ~/helloworld-python cd ~/helloworld-python
main.py
Crea un archivo llamado main.py
:
touch main.py
Edita el archivo con tu editor de línea de comandos preferido (nano, vim o emacs) o haz clic en el botón del editor de Cloud Shell:
Para editar directamente el archivo con el editor de Cloud Shell, usa este comando:
cloudshell edit main.py
main.py
from flask import Flask, request
app = Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
who = request.args.get("who", default="World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Development only: run "python main.py" and open http://localhost:8080
# When deploying to Cloud Run, a production-grade WSGI HTTP server,
# such as Gunicorn, will serve the app.
app.run(host="localhost", port=8080, debug=True)
Este código crea un servicio web básico que responde a las solicitudes HTTP GET con un mensaje amigable.
requirements.txt
Agrega un archivo llamado requirements.txt
para definir las dependencias:
touch requirements.txt
Para editar directamente el archivo con el editor de Cloud Shell, usa este comando:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/flask
Flask==3.0.2
# https://pypi.org/project/gunicorn
gunicorn==21.2.0
Procfile
Por último, agrega un archivo llamado Procfile
para especificar cómo se entregará la aplicación:
touch Procfile
Para editar directamente el archivo con el editor de Cloud Shell, usa este comando:
cloudshell edit Procfile
Procfile
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Asegúrate de que todos los archivos estén presentes en el directorio de trabajo:
ls
Se deberían mostrar los siguientes archivos:
main.py Procfile requirements.txt
Tu aplicación está lista para implementarse, pero primero probémosla...
5. Prueba la aplicación
Para probar la aplicación, crea un entorno virtual:
virtualenv venv
Activa el entorno virtual:
source venv/bin/activate
Instala las dependencias:
pip install -r requirements.txt
Deberías recibir un mensaje de confirmación como el siguiente:
... Successfully installed Flask ... gunicorn ...
Inicia la aplicación:
python main.py
Los registros muestran que estás en modo de desarrollo:
* Serving Flask app 'main' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://localhost:8080 Press CTRL+C to quit ...
En la ventana de Cloud Shell, haz clic en el ícono Web Preview
y selecciona Preview on port 8080
:
Se debería abrir una ventana del navegador que muestre el mensaje Hello World!
.
También puedes abrir otra sesión de Cloud Shell (una nueva pestaña de la terminal). Para ello, haz clic en el ícono +
y envía una solicitud web a la aplicación que se ejecuta de forma local:
curl localhost:8080
Deberías recibir la siguiente respuesta:
Hello World!
Cuando termines, vuelve a la sesión principal de Cloud Shell y detén el comando python main.py
con CTRL+C
.
Sal del entorno virtual:
deactivate
Por último, quita el directorio del entorno virtual:
rm -r venv/
Tu aplicación funciona como se esperaba. Vamos a implementarla...
6. Implementa en Cloud Run
Cloud Run es regional, lo que significa que la infraestructura que ejecuta tus servicios se ubica en una región específica, y Google la administra para que esté disponible de manera redundante en todas las zonas de esa región. Define la región que usarás para la implementación, por ejemplo:
REGION="europe-west9"
Asegúrate de que sigues en el directorio de trabajo:
ls
Se deberían mostrar los siguientes archivos:
main.py Procfile requirements.txt
Implementa la aplicación en Cloud Run:
gcloud run deploy helloworld-python \ --source . \ --platform managed \ --region $REGION \ --allow-unauthenticated
- Puedes definir una región predeterminada con este comando:
gcloud config set run/region $REGION
- También puedes hacer que Cloud Run sea administrado de forma predeterminada con este comando:
gcloud config set run/platform managed
- La opción
--allow-unauthenticated
hace que el servicio esté disponible de forma pública. Para evitar solicitudes sin autenticar, usa--no-allow-unauthenticated
en su lugar.
La primera vez, recibirás un mensaje para crear un repositorio de Artifact Registry. Presiona Intro para validar lo siguiente:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
Esto inicia la carga de tu código fuente al repositorio de Artifact Registry y la compilación de tu imagen de contenedor:
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
Luego, espera un momento hasta que se complete la implementación. Si la operación es exitosa, la línea de comandos mostrará la URL de servicio:
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
Puedes obtener la URL del servicio con este comando:
SERVICE_URL=$( \ gcloud run services describe helloworld-python \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
Se debería mostrar un resultado similar al siguiente:
https://helloworld-python-PROJECTHASH-REGIONID.a.run.app
Ahora puedes usar tu aplicación abriendo la URL de servicio en un navegador web:
También puedes llamar a la aplicación desde Cloud Shell:
curl $SERVICE_URL?who=me
Esto debería mostrar el saludo esperado:
Hello me!
¡Felicitaciones! Acabas de implementar una aplicación en Cloud Run. Cloud Run escala la imagen del contenedor automáticamente y de forma horizontal para controlar las solicitudes que se reciben y, luego, reduce la escala cuando disminuye la demanda. Solo debes pagar por la CPU, la memoria y las herramientas de redes que se utilicen durante la administración de la solicitud.
7. Limpia
Si bien Cloud Run no cobra cuando el servicio no se usa, es posible que se te cobre por el almacenamiento de la imagen de contenedor en Artifact Registry. Puedes borrar tu repositorio o proyecto de Cloud para evitar que se generen cargos. Si borras el proyecto de Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.
Para borrar el repositorio de imágenes de contenedor, sigue estos pasos:
gcloud artifacts repositories delete cloud-run-source-deploy \ --location $REGION
Para borrar el servicio de Cloud Run, haz lo siguiente:
gcloud run services delete helloworld-python \ --platform managed \ --region $REGION
Para borrar tu proyecto de Google Cloud,
- Recupera tu ID del proyecto actual:
PROJECT_ID=$(gcloud config get-value core/project)
- Asegúrate de que este sea el proyecto que quieres borrar:
echo $PROJECT_ID
- Borra el proyecto:
gcloud projects delete $PROJECT_ID
8. ¡Felicitaciones!
Creaste una aplicación web sencilla y la implementaste en Cloud Run.
Más información
- Consulta la documentación de Cloud Run.
- Completa Dev to Prod in Three Easy steps with Cloud Run para explorar más opciones.
- Completa Django en Cloud Run para crear una base de datos de Cloud SQL, implementar Django y administrar las credenciales con Secret Manager
- Consulta más codelabs de Cloud Run...
Licencia
Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.