使用Cloud Run Jobs实现24/7后台Agent的方案,对比Serverless会杀后台进程和VM高成本问题,提供具体配置步骤和避坑提示(避免SQLite)。
我如何以每月仅 5.70 美元的费用在云端 24/7 运行一个自主 AI Agent?
最近我想构建一个带有持久磁盘存储和即时 Web 仪表板的后台 Worker,但又不想承受管理虚拟机的麻烦或支付高昂的月度账单。
如果你正在构建长时间运行的 Agent,就会遇到这个熟悉的云托管困境:
标准无服务器(如 Cloud Run 服务或 Lambda):当流量停止时,容器会缩减到零——这会立即终止你的后台循环并清除 Agent 的活跃内存(RAM)。反过来,突发流量会启动多个容器,它们可能相互覆盖对方的状态文件并导致数据损坏。(注:使用 JSON 或 Markdown 文件保存状态。避免使用 SQLite,因为 Cloud Run 卷挂载有问题)
常规虚拟机(如 EC2 或 Compute Engine):可以让你的 Agent 24/7 运行,但标准 1 vCPU 机器即使在空闲时也通常花费 15 到 25 美元/月。即使你使用每月 7 美元的严重受限的分数 VM,仍需承担全部基础设施管理开销。
去年我用 ADK 构建了一个多 Agent Trend Spotter。它运行良好,但我希望使其完全自主:一个持续运行的后台 Agent,无需手动触发或高昂托管成本即可扫描和汇总技术动态。
Google Cloud 的全新 Cloud Run instances 解决了这个确切问题。它为你提供一个单一、始终在线的容器,24/7 运行,在共享 CPU 上每月费用 5.70 美元,提供免费 HTTPS 端点,并允许你像普通本地磁盘一样挂载云存储。
以下是如何使用此设置构建和部署生产级长时间运行 Agent(你可以跟随仓库中的完整源代码一起操作)。
我想及时了解 AI 和 Agent 工程领域正在发生的事情。但我不想每天早上手动打开 20 个浏览器标签页浏览不同网站,而是想构建自己的长时间运行 Agent,随时为我更新最新新闻。

以下是 Agent 的功能:
持续作为后台守护进程运行:每 30 分钟自动唤醒以收集最新新闻。注意 Cloud Run instances 每最多 7 天自动重启,因此你的 Agent 只需在重启时优雅地恢复其调度即可。
扫描 Hacker News 和其他精选的 AI 及 Agent 工程来源。
接受实时告警和移动端分享:包含一个入站 Webhook(POST /api/webhook),你可以将突发推文、iOS Share Sheet 链接或 GitHub 发行版直接推送到 Agent 进行即时摘要。
过滤噪音:移除付费墙、广告和低价值文章。
使用 Gemini 2.5 Flash 汇总:我们使用 Gemini 2.5 Flash 来保持低成本。如果需要高级推理,你可以换用更新的 Gemini 3.5 或 3.6 Flash 模型,但注意它们的输入 Token 成本比 2.5 Flash 高 5 倍(每 100 万 Token 1.50 美元 vs 0.30 美元)。对于简单的每日汇总,2.5 Flash(或同样便宜的 Gemini 3.5 Flash-Lite)速度快、能力强大,每月 API 账单仅需几美分。
安全存储数据:将每日 Markdown 简报和已见 URL 直接存储在挂载的云存储文件夹(/data)中。
提供简洁的 Web 仪表板:提供即时网页以便阅读简报或随时触发新一轮运行。
整个应用程序在一个 Cloud Run instance 中运行:

技术简报 Agent 只是一个例子。由于 Cloud Run instances 提供了始终在线的后台 Worker、免费 Web 端点和安全的本地磁盘存储,你可以将完全相同的模式用于许多开发者工作流:
持久的 Slack、Discord 或 Telegram Bot:一个与聊天网关保持长期连接、回答开发者问题并将未解决的问题同步到待办事项的 Bot。
安全与漏洞监控 Agent:一个在内部计时器上运行以监控依赖项和 CVE 安全动态、在本地磁盘缓存漏洞签名的 Agent。
DevOps 事件分诊副驾驶:一个接收来自监控工具的入站 Webhook 告警、运行后台日志查询而不超时、并渲染即时根因仪表板的 Agent。
拉取式队列 Worker:一个持续从 Pub/Sub、Kafka 或 RabbitMQ 拉取复杂任务、执行多步 LLM 推理并将结果写入存储的 Agent。
夜间 CI/CD 和 flaky 测试修复器:一个在夜间运行测试套件、分析测试日志以发现 flaky 测试、并打开带有自动修复的 Pull Request 的后台守护进程。
标准无服务器平台是为快速 Web 请求设计的。它们等待用户点击按钮,运行一秒,然后关闭。
长时间运行的后台 Agent 有不同的需求:

使用 instance,你获得的是无服务器的简洁性加上 VM 的稳定性。由于你的 instance 始终热备且有公共 HTTPS 端点,它可以轻松在一个容器中处理三种触发方式:
周期性后台轮询:在内部 asyncio 调度上自主运行,无需外部 cron 服务。
即时 Web 仪表板:打开阅读仪表板时零冷启动。
实时推送 Webhook:一个入站 POST /api/webhook 路由,允许你将突发推文、iOS 分享表链接或 GitHub 发行版告警直接推送到 Agent 进行即时摘要。
Cloud Run instances 非常适合单 Worker 后台 Agent。如果需要以下功能,你应该选择不同的工具:
大规模并行批处理作业:如果需要跨 100 个并行 Worker 同时处理 10,000 个文档,请使用 Cloud Run Jobs 或 GKE。Instance 是单一 Worker。
高流量、突发 Web API:如果你的网站突然出现数百万请求的峰值,请使用标准 Cloud Run 服务,以便你的应用可以自动扩展到数百个容器并在流量停止时缩减到零。
本地 GPU 模型托管:如果你想在专用 H100 GPU 上的容器内直接托管一个开源 70B 模型,请使用 GKE 或 Compute Engine。Cloud Run instances 专为连接 Gemini 等托管模型的 CPU 应用而构建。
除了单一 instance,你可以构建一个事件驱动系统:Cloud Scheduler 触发 Cloud Run Job 进行轮询,而缩放到零的 Cloud Run Service 托管仪表板并监听 Webhook。
虽然这种解耦方法将计算成本降至免费层几乎 0.00 美元,但你失去了单一容器的简洁性。你被迫管理多个云服务和消息队列(以防止并发 Webhook 损坏你的状态),同时接受仪表板的冷启动。

你可以在大约五分钟内将此设置部署到 Google Cloud。
export PROJECT_ID="your-project-id"
export REGION="us-west1"
export BUCKET_NAME="${PROJECT_ID}-agent-data"
export REPO_NAME="agent-repo"
gcloud config set project $PROJECT_ID
gcloud services enable run.googleapis.com storage.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com secretmanager.googleapis.com
注:Cloud Run instances 并非在每个区域都可用。请从 Cloud Run instances 位置页面选择你附近的支持区域。
gcloud storage buckets create gs://$BUCKET_NAME \
--location=$REGION \
--uniform-bucket-level-access
gcloud artifacts repositories create $REPO_NAME \
--repository-format=docker \
--location=$REGION
gcloud builds submit \
--tag ${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/tech-briefing-agent:latest .
gcloud iam service-accounts create briefing-agent-sa \
--display-name="Briefing Agent SA"
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
--member="serviceAccount:briefing-agent-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/storage.objectUser"
切勿明文传递 API 密钥。将你的 Gemini API 密钥存储在 Google Cloud Secret Manager 中并授予服务账号读取权限:
echo -n "YOUR_GEMINI_API_KEY" | gcloud secrets create gemini-api-key \
--data-file=- \
--replication-policy="automatic"
gcloud secrets add-iam-policy-binding gemini-api-key \
--member="serviceAccount:briefing-agent-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud beta run instances create tech-briefing-agent \
--image=${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/tech-briefing-agent:latest \
--region=$REGION \
--port=8080 \
--cpu=1 \
--memory=1Gi \
--public \
--service-account=briefing-agent-sa@${PROJECT_ID}.iam.gserviceaccount.com \
--add-volume mount-path=/data,type=cloud-storage,mount-options="uid=1000;gid=1000;file-mode=0700;dir-mode=0700",bucket=$BUCKET_NAME \
--set-secrets "GEMINI_API_KEY=gemini-api-key:latest" \
--set-env-vars "DATA_DIR=/data,POLL_INTERVAL_MINUTES=30"
我们设置 --cpu=1 和 --memory=1Gi 以保持 5.70 美元的成本。如果省略这些,默认值为 2 CPU 和 2 GiB(约 11.40 美元/月,参见定价表)。要改善加载时间,可以增加 CPU 和内存。
[!TIP] 如果与 Dockerfile 中定义的非 root 用户 ID 不同,请调整 mount-options 标志中的 uid=1000;gid=1000 以匹配。
当此命令完成时,Cloud Run 会为你提供实时的 HTTPS Web 地址。在浏览器中打开它以查看你的简报仪表板。
以下是 24/7 运行此服务的真实月度账单:

用不到两杯咖啡的价格,你就拥有了一个日夜运行的私有 Agent。
想深入了解 Cloud Run Instances?请查看以下官方 Google Cloud 资源:
官方发布博客:Introducing Cloud Run instances
官方文档:Create and manage Cloud Run instances
动手实验:Deploying to Cloud Run instances Codelab
源代码和 ADK 图:Tech-briefing-agent on GitHub
托管问题已经解决,接下来如何让 Agent 更加智能和弹性?如何让它在遇到付费墙时不再汇总噪音,或者构建自我修正的反思循环?
在下一部分中,我们将深入探讨使用 ADK 2.0 的图工程和 Agent 架构。