You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将第一代Cloud Functions迁移至Cloud Run Functions?附创建限制背景

迁移GCP第一代Cloud Functions到Cloud Run Functions

补充背景:自2025年8月起,GCP中创建传统第一代Cloud Functions仅支持通过gcloud CLI、API或Terraform完成,且Cloud Run Functions已整合至Cloud Run UI,迁移是更便捷的后续管理方案。

结论

完全支持将第一代Cloud Functions迁移至Cloud Run Functions,两者在运行环境、触发逻辑等层面兼容性良好,可通过工具和少量代码调整完成迁移。

迁移实操示例

1. 导出原有函数代码与配置

先将第一代函数的代码和配置导出到本地目录,方便后续调整:

gcloud functions export YOUR_FUNCTION_NAME --destination=./func-local-backup --region=YOUR_REGION

2. 代码适配调整

Cloud Run Functions的请求响应格式和第一代略有差异,以下是主流语言的适配示例:

  • Node.js
    第一代函数代码:
    exports.helloWorld = (req, res) => {
      res.send('Hello World!');
    };
    
    适配后代码:
    export const helloWorld = (req) => {
      return new Response('Hello World!', { status: 200 });
    };
    
  • Python
    第一代函数代码:
    def hello_world(request):
        return "Hello World!"
    
    适配后代码:
    def hello_world(request):
        return "Hello World!", 200
    

3. 部署到Cloud Run Functions

使用gcloud CLI将调整后的代码部署为Cloud Run Functions:

gcloud run deploy YOUR_NEW_FUNCTION_NAME \
  --source=./func-local-backup \
  --region=YOUR_REGION \
  --allow-unauthenticated # 若需要公开访问则添加此参数,否则移除

4. 迁移非HTTP触发器

如果原函数使用了Pub/Sub、Cloud Storage等非HTTP触发器,需要重新绑定到新的Cloud Run Functions:
以Pub/Sub触发器为例:

# 为Cloud Run服务添加Pub/Sub触发器的调用权限
gcloud run services add-iam-policy-binding YOUR_NEW_FUNCTION_NAME \
  --member=serviceAccount:cloud-run-pubsub-invoker@system.gserviceaccount.com \
  --role=roles/run.invoker \
  --region=YOUR_REGION

# 创建Pub/Sub订阅并关联到Cloud Run服务的端点
gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \
  --topic=YOUR_EXISTING_TOPIC_NAME \
  --push-endpoint=https://YOUR_FUNCTION_URL.run.app \
  --push-auth-service-account=YOUR_PROJECT_NUMBER-compute@developer.gserviceaccount.com

内容的提问来源于stack exchange,提问作者Learn2Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:42:43