ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

【计算机工具类-容器和编排Skills】gcp-cloud-run 技能

【计算机工具类-容器和编排Skills】gcp-cloud-run 技能 在GCP上构建生产就绪无服务器应用的专门技能。涵盖Cloud Run服务(容器化)、Cloud Run Functions(事件驱动)、冷启动优化和Pub/Sub事件驱动架构。下载地址Skill源码下载地址agentic-awesome-skills/skills/gcp-cloud-run at main · sickn33/agentic-awesome-skills · GitHub技能概述gcp-cloud-run 技能是一个用于在GCP上构建生产就绪无服务器应用的技能。它涵盖Cloud Run服务(容器化)、Cloud Run Functions(事件驱动)、冷启动优化和Pub/Sub事件驱动架构帮助开发者构建高效、可扩展的无服务器应用。主要功能Cloud Run服务容器化Web服务和APICloud Run Functions事件驱动函数冷启动优化最小化冷启动延迟并发配置正确的并发设置Pub/Sub集成事件驱动处理Cloud SQL连接安全数据库连接核心原则Cloud Run用于容器Functions用于简单事件处理器使用启动CPU加速和最小实例优化冷启动根据工作负载设置并发(从8开始调整)内存包括/tmp文件系统 - 相应规划仅在需要时使用VPC Connector(增加延迟)容器应快速启动且无状态优雅处理信号以实现干净关闭Cloud Run服务模式何时使用Web应用和API需要任何运行时或库具有多个端点的复杂服务无状态容器化工作负载Dockerfile示例# Dockerfile - 多阶段构建以获得更小的镜像FROM node:20-slim AS builderWORKDIR /appCOPY package*.json ./RUN npm ci --onlyproductionFROM node:20-slimWORKDIR /app# 仅复制生产依赖COPY --frombuilder /app/node_modules ./node_modulesCOPY src ./srcCOPY package.json ./# Cloud Run使用PORT环境变量ENV PORT8080EXPOSE 8080# 以非root用户运行USER nodeCMD [node, src/index.js]部署命令# 直接gcloud部署gcloud run deploy my-service \--source . \--region us-central1 \--allow-unauthenticated \--memory 512Mi \--cpu 1 \--min-instances 1 \--max-instances 100 \--concurrency 80 \--cpu-boostCloud Run Functions模式何时使用简单事件处理器Pub/Sub消息处理Cloud Storage触发器HTTP webhooksHTTP函数示例// index.jsconst functions require(google-cloud/functions-framework);functions.http(helloHttp, (req, res) {const name req.query.name || req.body.name || World;res.send(Hello, ${name}!);});Pub/Sub函数示例const functions require(google-cloud/functions-framework);functions.cloudEvent(processPubSub, (cloudEvent) {// 解码Pub/Sub消息const message cloudEvent.data.message;const data message.data ? JSON.parse(Buffer.from(message.data, base64).toString()) : {};console.log(Received message:, data);// 处理消息processMessage(data);});冷启动优化优化影响优化措施效果Startup CPU Boost冷启动快50%Min Instances消除流量高峰的冷启动Distroless镜像更小攻击面更快拉取延迟初始化将重加载推迟到第一个请求优化命令# 启用启动CPU加速gcloud run deploy my-service \--cpu-boost \--region us-central1# 设置最小实例gcloud run deploy my-service \--min-instances 1 \--region us-central1并发配置并发指南并发值适用场景Concurrency1仅用于CPU密集型或不安全代码Concurrency8-20内存密集型工作负载Concurrency80默认值适合I/O密集型Concurrency250最大值用于非常轻量的处理器Pub/Sub集成创建推送订阅# 创建主题gcloud pubsub topics create orders# 创建到Cloud Run的推送订阅gcloud pubsub subscriptions create orders-push \--topic orders \--push-endpoint https://my-service-xxx.run.app/pubsub \--ack-deadline 600处理Pub/Sub推送消息const express require(express);const app express();app.use(express.json());app.post(/pubsub, async (req, res) {// 验证请求来自Pub/Subif (!req.body.message) {return res.status(400).send(Invalid Pub/Sub message);}try {// 解码消息数据const message req.body.message;const data message.data ? JSON.parse(Buffer.from(message.data, base64).toString()) : {};console.log(Processing order:, data);await processOrder(data);// 返回200确认res.status(200).send(OK);} catch (error) {console.error(Processing failed:, error);// 返回500触发重试res.status(500).send(Processing failed);}});Cloud SQL连接# 使用Cloud SQL连接部署gcloud run deploy my-service \--add-cloudsql-instances PROJECT:REGION:INSTANCE \--set-env-vars INSTANCE_CONNECTION_NAMEPROJECT:REGION:INSTANCE \--set-env-vars DB_NAMEmydb \--set-env-vars DB_USERmyuserSecret Manager集成# 创建密钥echo -n my-secret-value | gcloud secrets create my-secret --data-file-# 作为环境变量挂载gcloud run deploy my-service \--update-secretsAPI_KEYmy-secret:latest# 作为文件卷挂载gcloud run deploy my-service \--update-secrets/secrets/api-keymy-secret:latest注意事项/tmp文件系统计入内存Cloud Run使用内存文件系统作为/tmp。写入/tmp的任何文件都会消耗容器的内存分配。512MB容器下载200MB文件到/tmp后只剩约300MB给应用。建议流式处理而非缓冲使用Cloud Storage处理大文件。并发1导致扩展瓶颈设置并发为1意味着每个容器一次只处理一个请求。在流量高峰期间100个并发请求100个容器实例每个实例都有冷启动开销。建议仅在绝对必要时使用并发1。非请求处理时CPU被限制默认情况下Cloud Run在不主动处理请求时将CPU限制到接近零。建议使用--cpu-throttlingfalse启用CPU始终分配或将后台工作移至Cloud Tasks。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表