Deploy: 7 servicios en Cloud Run
El comando de deploy
Sección titulada «El comando de deploy»Cada agente se despliega con gcloud run deploy desde su directorio. Este es el comando completo para Platform Architect:
gcloud run deploy platform-architect \ --source=./platform_architect \ --no-allow-unauthenticated \ --memory=1Gi \ --cpu=1 \ --min-instances=0 \ --max-instances=1 \ --cpu-throttling \ --timeout=300 \ --set-secrets=GEMINI_API_KEY=GEMINI_API_KEY:latest \ --port=8080 \ --region=us-central1Flags clave:
| Flag | Efecto |
|---|---|
--source | Directorio con el Dockerfile. Cloud Build construye la imagen automáticamente. |
--no-allow-unauthenticated | Requiere IAM identity token para acceder. Ningún agente es público. |
--memory=1Gi | Suficiente para ADK + Gemini SDK. 512Mi puede causar OOM con contextos grandes. |
--cpu=1 | 1 vCPU. Los agentes son I/O bound (esperan respuesta de Gemini), no CPU bound. |
--min-instances=0 | Scale to zero — no paga cuando no hay tráfico. |
--max-instances=1 | Limita a 1 instancia por agente. Suficiente para demo y desarrollo. |
--cpu-throttling | Reduce CPU cuando no procesa requests. Ahorra costos. |
--timeout=300 | 5 minutos. Algunos agentes (Web Portal) generan respuestas largas. |
--set-secrets | Inyecta la API key desde Secret Manager como variable de entorno. |
--port=8080 | Puerto estándar de Cloud Run. Debe coincidir con el EXPOSE del Dockerfile. |
Detalle importante
Sección titulada «Detalle importante»Los nombres de servicio en Cloud Run solo aceptan minúsculas, números y guiones. El directorio web_portal se despliega como servicio web-portal:
gcloud run deploy web-portal --source=./web_portal ...Deploy de los 7 agentes
Sección titulada «Deploy de los 7 agentes»Cada agente usa los mismos flags. Solo cambian --source y el nombre del servicio:
gcloud run deploy platform-architect --source=./platform_architect --no-allow-unauthenticated --memory=1Gi --cpu=1 --min-instances=0 --max-instances=1 --cpu-throttling --timeout=300 --set-secrets=GEMINI_API_KEY=GEMINI_API_KEY:latest --port=8080 --region=us-central1
gcloud run deploy infrastructure --source=./infrastructure --no-allow-unauthenticated --memory=1Gi --cpu=1 --min-instances=0 --max-instances=1 --cpu-throttling --timeout=300 --set-secrets=GEMINI_API_KEY=GEMINI_API_KEY:latest --port=8080 --region=us-central1
gcloud run deploy security --source=./security --no-allow-unauthenticated --memory=1Gi --cpu=1 --min-instances=0 --max-instances=1 --cpu-throttling --timeout=300 --set-secrets=GEMINI_API_KEY=GEMINI_API_KEY:latest --port=8080 --region=us-central1
gcloud run deploy cicd --source=./cicd --no-allow-unauthenticated --memory=1Gi --cpu=1 --min-instances=0 --max-instances=1 --cpu-throttling --timeout=300 --set-secrets=GEMINI_API_KEY=GEMINI_API_KEY:latest --port=8080 --region=us-central1
gcloud run deploy observability --source=./observability --no-allow-unauthenticated --memory=1Gi --cpu=1 --min-instances=0 --max-instances=1 --cpu-throttling --timeout=300 --set-secrets=GEMINI_API_KEY=GEMINI_API_KEY:latest --port=8080 --region=us-central1
gcloud run deploy devex --source=./devex --no-allow-unauthenticated --memory=1Gi --cpu=1 --min-instances=0 --max-instances=1 --cpu-throttling --timeout=300 --set-secrets=GEMINI_API_KEY=GEMINI_API_KEY:latest --port=8080 --region=us-central1
gcloud run deploy web-portal --source=./web_portal --no-allow-unauthenticated --memory=1Gi --cpu=1 --min-instances=0 --max-instances=1 --cpu-throttling --timeout=300 --set-secrets=GEMINI_API_KEY=GEMINI_API_KEY:latest --port=8080 --region=us-central1Deploy en paralelo con tmux
Sección titulada «Deploy en paralelo con tmux»Para no esperar ~5 minutos por cada agente (35 min total secuencial), usa el script que despliega los 7 en paralelo con tmux:
./deploy-all-tmux.shEl script abre 7 paneles de tmux, uno por agente, y ejecuta los deploys simultáneamente. Tiempo total: ~5-7 minutos en lugar de ~35.
Verificación
Sección titulada «Verificación»Lista todos los servicios deployados:
gcloud run services list --region=us-central1Deberías ver los 7 servicios con estado ✔ Ready:
SERVICE REGION URL LAST DEPLOYEDcicd us-central1 https://cicd-XXXXXXXXXX-uc.a.run.app 2026-XX-XXdevex us-central1 https://devex-XXXXXXXXXX-uc.a.run.app 2026-XX-XXinfrastructure us-central1 https://infrastructure-XXXXXXXXXX-uc.a.run.app 2026-XX-XXobservability us-central1 https://observability-XXXXXXXXXX-uc.a.run.app 2026-XX-XXplatform-architect us-central1 https://platform-architect-XXXXXXXXXX-uc.a.run.app 2026-XX-XXsecurity us-central1 https://security-XXXXXXXXXX-uc.a.run.app 2026-XX-XXweb-portal us-central1 https://web-portal-XXXXXXXXXX-uc.a.run.app 2026-XX-XXHealth check
Sección titulada «Health check»Verifica que los 7 agentes responden correctamente. Este loop obtiene un identity token y hace curl a cada servicio:
SERVICES="platform-architect infrastructure security cicd observability devex web-portal"
for SERVICE in $SERVICES; do URL=$(gcloud run services describe $SERVICE --region=us-central1 --format='value(status.url)') TOKEN=$(gcloud auth print-identity-token --audiences=$URL) STATUS=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $TOKEN" "$URL/.well-known/agent.json") echo "$SERVICE: $STATUS"doneTodos deberían responder 200. Si alguno responde 403, revisa los permisos IAM. Si responde 500, revisa los logs con gcloud run logs read $SERVICE.
Siguiente paso: Demo — orquestador HTTP y cadena completa →