Crea e implementa un planificador de dietas con tecnología de IA con Streamlit, Gemini Pro, Vertex AI y BigQuery

1. Introducción

9370c0f92c692ebb.png

En este codelab, aprenderás a compilar e implementar un planificador de dietas potenciado por IA. Para la IU con Streamlit, el modelo de LLM con Gemini Pro 2.5, el orquestador del motor de IA agentiva con Vertex AI para el desarrollo de IA agentiva, BigQuery para almacenar datos y Cloud Run para la implementación.

En el codelab, seguirás un enfoque paso a paso de la siguiente manera:

  1. Prepara tu proyecto de Google Cloud y habilita todas las APIs necesarias en él
  2. Crea un planificador de dietas basado en IA con Streamlit, Vertex AI y BigQuery
  3. Implementa la aplicación en Cloud Run

Descripción general de la arquitectura

84e3f3620dc4ed68.png

Requisitos previos

  • Un proyecto de Google Cloud Platform (GCP) con facturación habilitada
  • Conocimientos básicos de Python

Qué aprenderás

  • Cómo crear un planificador de dietas con IA agentiva usando Streamlit, Vertex AI y almacenar datos en BigQuery
  • Cómo implementar la aplicación en Cloud Run

Requisitos

  • Navegador web Chrome
  • Una cuenta de Gmail
  • Un proyecto de Cloud con la facturación habilitada

2. Configuración básica y requisitos

Configuración del entorno de autoaprendizaje

  1. 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.

fbef9caa1602edd0.png

37d264871000675d.png

5e3ff691252acf41.png

  • 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.
  1. 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.

3. Antes de comenzar

Configura el proyecto de Cloud en el editor de Cloud Shell

En este codelab, se supone que ya tienes un proyecto de Google Cloud con la facturación habilitada. Si aún no lo tienes, puedes seguir las instrucciones que se indican a continuación para comenzar.

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información para verificar si la facturación está habilitada en un proyecto .
  3. Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud y que viene precargado con bq. Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.

26f20e837ff06119.png

  1. Una vez que te conectes a Cloud Shell, verifica que ya te autenticaste y que el proyecto se configuró con el ID de tu proyecto con el siguiente comando:
gcloud auth list
  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto.
gcloud config list project
  1. Si tu proyecto no está configurado, usa el siguiente comando para hacerlo:
gcloud config set project <YOUR_PROJECT_ID>

Como alternativa, también puedes ver el ID de PROJECT_ID en la consola.

bb98435b79995b15.jpeg

Haz clic en él y verás todos tus proyectos y el ID del proyecto en el lado derecho.

ffa73dee57de5307.jpeg

  1. Habilita las APIs requeridas con el siguiente comando. Este proceso puede tardar unos minutos, así que ten paciencia.
gcloud services enable aiplatform.googleapis.com \
                           run.googleapis.com \
                           cloudbuild.googleapis.com \
                           cloudresourcemanager.googleapis.com \
                    bigquery.googleapis.com

Si el comando se ejecuta correctamente, deberías ver un mensaje similar al que se muestra a continuación:

Operation "operations/..." finished successfully.

La alternativa al comando de gcloud es a través de la consola, buscando cada producto o usando este vínculo.

Si olvidas alguna API, puedes habilitarla durante el curso de la implementación.

Consulta la documentación para ver los comandos y el uso de gcloud.

Configura el directorio de trabajo de la aplicación

  1. Haz clic en el botón Abrir editor para abrir un editor de Cloud Shell en el que puedes escribir tu código 6f8e18e89d3198c0.png
  2. Asegúrate de que el proyecto de Cloud Code esté configurado en la esquina inferior izquierda (barra de estado) del editor de Cloud Shell, como se destaca en la siguiente imagen, y que esté configurado en el proyecto activo de Google Cloud en el que tienes habilitada la facturación. Haz clic en Autorizar si se te solicita. Es posible que el botón Cloud Code - Sign In tarde en aparecer después de inicializar el editor de Cloud Shell. Ten paciencia.

4e372d87c51afa30.png

A continuación, prepararemos nuestro entorno de Python.

Configuración del entorno

Prepara el entorno virtual de Python

El siguiente paso es preparar el entorno de desarrollo. En este codelab, usaremos Python 3.12 y virtualenv de Python para simplificar la necesidad de crear y administrar la versión de Python y el entorno virtual.

  1. Si aún no abriste la terminal, haz clic en Terminal -> New Terminal o usa Ctrl + Mayúsculas + C.

8635b60ae2f45bbc.jpeg

  1. Crea una carpeta nueva y cambia la ubicación a esta carpeta con el siguiente comando:
mkdir agent_diet_planner
cd agent_diet_planner
  1. Crea un nuevo virtualenv con el siguiente comando
python -m venv .env
  1. Activa virtualenv con el siguiente comando
source .env/bin/activate
  1. Crea requirements.txt. Haz clic en Archivo → Archivo de texto nuevo y completa el contenido que se muestra a continuación. Luego, guárdalo como requirements.txt.
streamlit==1.33.0
google-cloud-aiplatform
google-cloud-bigquery
pandas==2.2.2
db-dtypes==1.2.0
pyarrow==16.1.0
  1. Luego, instala todas las dependencias de requirements.txt con el siguiente comando:
pip install -r requirements.txt
  1. Escribe el siguiente comando para verificar que estén instaladas todas las dependencias de las bibliotecas de Python.
pip list

Configura archivos de configuración

Ahora, deberemos configurar los archivos de configuración para este proyecto. Los archivos de configuración se usan para almacenar variables y credenciales de cuentas de servicio.

  1. El primer paso es crear una cuenta de servicio. Escribe cuenta de servicio en la búsqueda y, luego, haz clic en Cuenta de servicio. 18c210d5d1e2a666.png
  2. Haz clic en + Crear cuenta de servicio. Ingresa el nombre de la cuenta de servicio y, luego, haz clic en Crear y continuar. 67cad62d367e236a.png
  3. En el permiso, elige el rol Usuario de cuenta de servicio. Haz clic en + Agregar otro rol y elige los roles de IAM : Administrador de BigQuery, Administrador de Cloud Run, Invocador de Cloud Run, Agente de servicio de Vertex AI y Usuario de Vertex AI. Luego, haz clic en Listo. be84afdc13678f6c.png
  4. Haz clic en Correo electrónico de la cuenta de servicio, haz clic en la tecla de tabulación, haz clic en Agregar clave → Crear clave nueva. 50989af3bb9e1538.png
  5. Elige json y, luego, haz clic en Crear. Guarda este archivo de cuenta de servicio de forma local para el siguiente paso a4a119672da532da.png
  6. Crea una carpeta llamada .streamlit con la siguiente configuración. Haz clic con el botón derecho del mouse, selecciona Nueva carpeta y escribe el nombre de la carpeta .streamlit.
  7. Haz clic con el botón derecho en la carpeta .streamlit, luego, en Archivo nuevo y completa el valor que se indica a continuación. Luego, guárdalo como secrets.toml.
# secrets.toml (for Streamlit sharing)
# Store in .streamlit/secrets.toml

[gcp]
project_id = "your_gcp_project"
location = "us-central1"

[gcp_service_account]
type = "service_account"
project_id = "your-project-id"
private_key_id = "your-private-key-id"
private_key = '''-----BEGIN PRIVATE KEY-----
YOUR_PRIVATE_KEY_HERE
-----END PRIVATE KEY-----'''
client_email = "your-sa@project-id.iam.gserviceaccount.com"
client_id = "your-client-id"
auth_uri = "https://accounts.google.com/o/oauth2/auth"
token_uri = "https://oauth2.googleapis.com/token"
auth_provider_x509_cert_url = "https://www.googleapis.com/oauth2/v1/certs"
client_x509_cert_url = "https://www.googleapis.com/robot/v1/metadata/x509/your-sa%40project-id.iam.gserviceaccount.com"
  1. Actualiza los valores de project_id, private_key_id, private_key, client_email y client_id , and auth_provider_x509_cert_url según la cuenta de servicio que creaste en el paso anterior.

Prepara el conjunto de datos de BigQuery

El siguiente paso es crear un conjunto de datos de BigQuery para guardar los resultados de la generación en BigQuery.

  1. Escribe BigQuery en la búsqueda y, luego, haz clic en BigQuery.
  2. Haz clic en 2f2e87396859bc74.pngy, luego, en Crear conjunto de datos.
  3. Ingresa el ID del conjunto de datos diet_planner_data y, luego, haz clic en Crear conjunto de datos 2055cda1ee0360bd.png.

4. Crea apps de Planificador de dieta con agentes

Compilaremos una interfaz web simple con 4 entradas que se verá de la siguiente manera:

43b20db2d5f94f38.png

Cambia el peso, la altura, la edad y el género según tu perfil y, luego, haz clic en Generar. Llamará al modelo de LLM Gemini Pro 2.5 en la biblioteca de Vertex AI y almacenará los resultados generados en BigQuery.

El código se separará en 6 partes para que no sea demasiado largo.

Crea la función para calcular el estado del IMC

  1. Haz clic con el botón derecho en la carpeta agent_diet_planner → Archivo nuevo… → ingresa el nombre de archivo bmi_calc.py y, luego, presiona Intro.
  2. Completa el código con lo siguiente:
# Add this function to calculate BMI and health status
def calculate_bmi_status(weight, height):
   """
   Calculate BMI and return status message
   """
   height_m = height / 100  # Convert cm to meters
   bmi = weight / (height_m ** 2)
  
   if bmi < 18.5:
       status = "underweight"
       message = "⚠️ Your BMI suggests you're underweight. Consider increasing calorie intake with nutrient-dense foods."
   elif 18.5 <= bmi < 25:
       status = "normal"
       message = "✅ Your BMI is in the healthy range. Let's maintain this balance!"
   elif 25 <= bmi < 30:
       status = "overweight"
       message = "⚠️ Your BMI suggests you're overweight. Focus on gradual weight loss through balanced nutrition."
   else:
       status = "obese"
       message = "❗ Your BMI indicates obesity. Please consult a healthcare provider for personalized guidance."
  
   return {
       "value": round(bmi, 1),
       "status": status,
       "message": message
   }

Crear apps principales del planificador de dieta del agente

  1. Haz clic con el botón derecho en la carpeta agent_diet_planner → Archivo nuevo… → ingresa el nombre de archivo app.py y, luego, presiona Intro.
  2. Completa el código con lo siguiente:
import os
from google.oauth2 import service_account
import streamlit as st
from google.cloud import bigquery
from vertexai.preview.generative_models import GenerativeModel
import vertexai
import datetime
import time
import pandas as pd
from bmi_calc import calculate_bmi_status

# Get configuration from environment
PROJECT_ID = os.environ.get("GCP_PROJECT_ID", "your_gcp_project_id")
LOCATION = os.environ.get("GCP_LOCATION", "us-central1")

#CONSTANTS Dataset and table in BigQuery
DATASET = "diet_planner_data"
TABLE = "user_plans"

# Initialize Vertex AI
vertexai.init(project=PROJECT_ID, location=LOCATION)

# Initialize BigQuery client
try:
   # For Cloud Run, use default credentials
   bq_client = bigquery.Client()
except:
   # For local development, use service account from secrets
   if "gcp_service_account" in st.secrets:
       service_account_info = dict(st.secrets["gcp_service_account"])
       credentials = service_account.Credentials.from_service_account_info(service_account_info)
       bq_client = bigquery.Client(credentials=credentials, project=PROJECT_ID)
   else:
       st.error("BigQuery client initialization failed")
       st.stop()

Cambia el valor your_gcp_project_id por el ID de tu proyecto.

Create agent diet planner main apps - setup_bq_tables

En esta sección, crearemos una función llamada setup_bq_table con 1 parámetro de entrada bq_client. Esta función definirá el esquema en la tabla de BigQuery y creará una tabla si no existe.

Completa el código con lo siguiente debajo del código anterior en app.py.

# Create BigQuery table if not exists
def setup_bq_table(bq_client):
   dataset_id = f"{st.secrets['gcp']['project_id']}.{DATASET}"
   table_id = f"{dataset_id}.{TABLE}"
  
   schema = [
       bigquery.SchemaField("user_id", "STRING", mode="REQUIRED"),
       bigquery.SchemaField("timestamp", "TIMESTAMP", mode="REQUIRED"),
       bigquery.SchemaField("weight", "FLOAT", mode="REQUIRED"),
       bigquery.SchemaField("height", "INTEGER", mode="REQUIRED"),
       bigquery.SchemaField("age", "INTEGER", mode="REQUIRED"),
       bigquery.SchemaField("gender", "STRING", mode="REQUIRED"),
       bigquery.SchemaField("diet_plan", "STRING", mode="REQUIRED")
   ]
  
   try:
       bq_client.get_table(table_id)
   except:
       table = bigquery.Table(table_id, schema=schema)
       bq_client.create_table(table)
       st.toast("BigQuery table created successfully")

Crea las apps principales del planificador de dietas del agente: generate_diet_plan

En esta sección, crearemos una función llamada generate_diet_plan con 1 parámetro de entrada. Esta función llamará al modelo de LLM Gemini Pro 2.5 con la instrucción de definición y generará resultados.

Completa el código con lo siguiente debajo del código anterior en app.py.

# Generate diet plan using Gemini Pro
def generate_diet_plan(params):
   try:
       model = GenerativeModel("gemini-2.5-pro")
       prompt = f"""
       Create a personalized 7-day diet plan for:
       - {params['gender']}, {params['age']} years old
       - Weight: {params['weight']} kg
       - Height: {params['height']} cm
      
       Include:
       1. Daily calorie target
       2. Macronutrient breakdown (carbs, protein, fat)
       3. Meal timing and frequency
       4. Food recommendations
       5. Hydration guidance
      
       Make the plan:
       - Nutritionally balanced
       - Practical for daily use
       - Culturally adaptable
       - With portion size guidance
       """
      
       response = model.generate_content(prompt)
       return response.text
   except Exception as e:
       st.error(f"AI generation error: {str(e)}")
       return None

Create agent diet planner main apps - save_to_bq

En esta sección, crearemos una función llamada save_to_bq con 3 parámetros de entrada : bq_client, user_id y plan. Esta función guardará el resultado de la generación en la tabla de BigQuery.

Completa el código con lo siguiente debajo del código anterior en app.py.

# Save user data to BigQuery
def save_to_bq(bq_client, user_id, plan):
   try:
       dataset_id = f"{st.secrets['gcp']['project_id']}.{DATASET}"
       table_id = f"{dataset_id}.{TABLE}"
      
       row = {
           "user_id": user_id,
           "timestamp": datetime.datetime.utcnow().isoformat(),
           "weight": st.session_state.user_data["weight"],
           "height": st.session_state.user_data["height"],
           "age": st.session_state.user_data["age"],
           "gender": st.session_state.user_data["gender"],
           "diet_plan": plan
       }
      
       errors = bq_client.insert_rows_json(table_id, [row])
       if errors:
           st.error(f"BigQuery error: {errors}")
       else:
           return True
   except Exception as e:
       st.error(f"Data saving error: {str(e)}")
       return False

Create agent diet planner main apps - main

En esta sección, crearemos una función llamada main sin parámetros de entrada. Esta función se encarga principalmente de controlar la secuencia de comandos de la IU de Streamlit, mostrar el resultado generado, mostrar el resultado histórico generado de la tabla de BigQuery y descargar datos en un archivo de Markdown.

Completa el código con lo siguiente debajo del código anterior en app.py.

# Streamlit UI
def main():
   st.set_page_config(page_title="AI Diet Planner", page_icon="🍏", layout="wide")
  
   # Initialize session state
   if "user_data" not in st.session_state:
       st.session_state.user_data = None
   if "diet_plan" not in st.session_state:
       st.session_state.diet_plan = None
  
   # Initialize clients
   #bq_client = init_clients()
   setup_bq_table(bq_client)
  
   st.title("🍏 AI-Powered Diet Planner")
   st.markdown("""
   <style>
   .stProgress > div > div > div > div {
       background-color: #4CAF50;
   }
   [data-testid="stForm"] {
       background: #f0f5ff;
       padding: 20px;
       border-radius: 10px;
       border: 1px solid #e6e9ef;
   }
   </style>
   """, unsafe_allow_html=True)
  
   # User input form
   with st.form("user_profile", clear_on_submit=False):
       st.subheader("Your Profile")
       col1, col2 = st.columns(2)
      
       with col1:
           weight = st.number_input("Weight (kg)", min_value=30.0, max_value=200.0, value=70.0)
           height = st.number_input("Height (cm)", min_value=100, max_value=250, value=170)
          
       with col2:
           age = st.number_input("Age", min_value=18, max_value=100, value=30)
           gender = st.selectbox("Gender", ["Man", "Woman"])
      
       submitted = st.form_submit_button("Generate Diet Plan")
      
       if submitted:
           user_data = {
               "weight": weight,
               "height": height,
               "age": age,
               "gender": gender
           }

           st.session_state.user_data = user_data
           # Calculate BMI
           bmi_result = calculate_bmi_status(weight, height)

           # Display BMI results in a visually distinct box
           with st.container():
               st.subheader("📊 Your Health Assessment")
               col1, col2 = st.columns([1, 3])
      
               with col1:
                   st.metric("BMI", bmi_result["value"])
          
               with col2:
                   if bmi_result["status"] != "normal":
                       st.warning(bmi_result["message"])
                   else:
                       st.success(bmi_result["message"])
      
           # Add BMI scale visualization
           st.markdown(f"""
           <div style="background:#f0f2f6;padding:10px;border-radius:10px;margin-top:10px">
           <small>BMI Scale:</small><br>
           <div style="display:flex;height:20px;background:linear-gradient(90deg,
           #4e79a7 0%,
           #4e79a7 18.5%,
           #60bd68 18.5%,
           #60bd68 25%,
           #f28e2b 25%,
           #f28e2b 30%,
           #e15759 30%,
           #e15759 100%);position:relative">
           <div style="position:absolute;left:{min(100, max(0, (bmi_result["value"]/40)*100))}%;top:-5px">

           </div>
           </div>
           <div style="display:flex;justify-content:space-between">
           <span>Underweight (<18.5)</span>
           <span>Healthy (18.5-25)</span>
           <span>Overweight (25-30)</span>
           <span>Obese (30+)</span>
           </div>
           </div>
           """, unsafe_allow_html=True)

           # Store BMI in session state
           st.session_state.bmi = bmi_result         
  
   # Plan generation and display
   if submitted and st.session_state.user_data:
       with st.spinner("🧠 Generating your personalized diet plan using Gemini AI..."):
           #diet_plan = generate_diet_plan(st.session_state.user_data)
           diet_plan = generate_diet_plan({**st.session_state.user_data,"bmi": bmi_result["value"],
                                           "bmi_status": bmi_result["status"]
           })

           if diet_plan:
               st.session_state.diet_plan = diet_plan
              
               # Generate unique user ID
               user_id = f"user_{int(time.time())}"
              
               # Save to BigQuery
               if save_to_bq(bq_client, user_id, diet_plan):
                   st.toast("✅ Plan saved to database!")
  
   # Display generated plan
   if st.session_state.diet_plan:
       st.subheader("Your Personalized Diet Plan")
       st.markdown("---")
       st.markdown(st.session_state.diet_plan)
      
       # Download button
       st.download_button(
           label="Download Plan",
           data=st.session_state.diet_plan,
           file_name="my_diet_plan.md",
           mime="text/markdown"
       )
      
       # Show history
       st.subheader("Your Plan History")
       try:
           query = f"""
               SELECT timestamp, weight, height, age, gender
               FROM `{st.secrets['gcp']['project_id']}.{DATASET}.{TABLE}`
               WHERE user_id LIKE 'user_%'
               ORDER BY timestamp DESC
               LIMIT 5
           """
           history = bq_client.query(query).to_dataframe()
           if not history.empty:
               history["timestamp"] = pd.to_datetime(history["timestamp"])
               st.dataframe(history.style.format({
                   "weight": "{:.1f} kg",
                   "height": "{:.0f} cm"
               }))
           else:
               st.info("No previous plans found")
       except Exception as e:
           st.error(f"History load error: {str(e)}")

if __name__ == "__main__":
   main()

Guarda el código con el nombre app.py.

5. Implementa apps con Cloud Build en Cloud Run

Por supuesto, queremos mostrar esta increíble app a los demás. Para ello, podemos empaquetar esta aplicación y, luego, implementarla en Cloud Run como un servicio público al que puedan acceder otras personas. Para ello, volvamos a ver la arquitectura

84e3f3620dc4ed68.png

Primero, necesitamos un Dockerfile. Haz clic en File->New Text File, copia y pega el siguiente código y, luego, guárdalo como Dockerfile.

# Use official Python image
FROM python:3.12-slim

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PORT 8080

# Install system dependencies
RUN apt-get update && \
   apt-get install -y --no-install-recommends \
   build-essential \
   libpq-dev \
   && rm -rf /var/lib/apt/lists/*

# Set working directory
WORKDIR /app

# Copy requirements
COPY requirements.txt .

# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Copy application files
COPY . .

# Expose port
EXPOSE $PORT

# Run the application
CMD ["streamlit", "run", "app.py", "--server.port", "8080", "--server.address", "0.0.0.0"]

A continuación, crearemos cloudbuild.yaml para compilar apps y convertirlas en imágenes de Docker, enviarlas a Artifact Registry y, luego, implementarlas en Cloud Run.

Haz clic en File->New Text File, copia y pega el siguiente código y, luego, guárdalo como cloudbuild.yaml.

steps:
 # Build Docker image
 - name: 'gcr.io/cloud-builders/docker'
   args: ['build', '-t', 'gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID', '--no-cache',
        '--progress=plain',
        '.']
   id: 'Build'
   timeout: 1200s
   waitFor: ['-']
   dir: '.'
  # Push to Container Registry
 - name: 'gcr.io/cloud-builders/docker'
   args: ['push', 'gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID']
   id: 'Push'
   waitFor: ['Build']
  # Deploy to Cloud Run
 - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
   entrypoint: gcloud
   args:
     - 'run'
     - 'deploy'
     - 'diet-planner-service'
     - '--image=gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID'
     - '--port=8080'
     - '--region=us-central1'
     - '--platform=managed'
     - '--allow-unauthenticated'
     - '--set-env-vars=GCP_PROJECT_ID=$PROJECT_ID,GCP_LOCATION=us-central1'
     - '--cpu=1'
     - '--memory=1Gi'
     - '--timeout=300'
   waitFor: ['Push']

options:
 logging: CLOUD_LOGGING_ONLY
 machineType: 'E2_HIGHCPU_8'
 diskSizeGb: 100

images:
 - 'gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID'

En este punto, ya tenemos todos los archivos necesarios para compilar apps y convertirlas en imágenes de Docker, enviarlas a Artifact Registry y, luego, implementarlas en Cloud Run. Ahora, implementémoslas. Navega a la terminal de Cloud Shell y asegúrate de que el proyecto actual esté configurado en tu proyecto activo. Si no es así, usa el comando gcloud config para establecer el ID del proyecto:

gcloud config set project [PROJECT_ID]

Luego, ejecuta el siguiente comando para compilar las apps y convertirlas en imágenes de Docker, enviarlas a Artifact Registry y, luego, implementarlas en Cloud Run.

gcloud builds submit --config cloudbuild.yaml

Compilará el contenedor de Docker según el Dockerfile que proporcionamos anteriormente y lo enviará a Artifact Registry. Luego, implementaremos la imagen construida en Cloud Run. Todo este proceso se define en los pasos de cloudbuild.yaml.

Ten en cuenta que permitimos el acceso no autenticado aquí porque se trata de una aplicación de demostración. Se recomienda usar la autenticación adecuada para tus aplicaciones empresariales y de producción.

Una vez que se complete la implementación, podemos verificarla en la página de Cloud Run. Para ello, busca Cloud Run en la barra de búsqueda superior de la consola de Cloud y haz clic en el producto de Cloud Run.

3c460765656fc072.png

Después de eso, puedes inspeccionar el servicio implementado que aparece en la página Servicio de Cloud Run. Haz clic en el servicio para que podamos obtener la URL del servicio.

93dc975d3caeab0e.png

La URL del servicio aparecerá en la barra superior.

9325464321c106f8.pngUsa tu aplicación desde la ventana de incógnito o tu dispositivo móvil. Ya debería estar disponible.

6. Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en este codelab:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.
  2. En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.
  4. Como alternativa, puedes ir a Cloud Run en la consola, seleccionar el servicio que acabas de implementar y borrarlo.