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

Google Cloud Workflows同存储桶复制对象触发404未找到异常

问题描述

我编写了一个Google Cloud Workflows工作流,用于在同一个Cloud Storage存储桶内复制文件,工作流代码如下:

main:
  steps:
    - list:
        call: googleapis.storage.v1.objects.list
        args:
          bucket: "**************"
          prefix: "xxx/extra_cost_commute.txt"
        result: listResult
    - log-files:
        call: sys.log
        args:
          data: ${listResult}
          severity: "INFO"
    - copy:
        call: googleapis.storage.v1.objects.copy
        args:
          sourceBucket: "**************"
          sourceObject: "xxx/extra_cost_commute.txt"
          destinationBucket: "**************"
          destinationObject: "yyy/new_extra_cost_commute.txt"
        result: copyResult
    - log-copy:
        call: sys.log
        args:
          data: ${copyResult}
          severity: "INFO"

其中list步骤可正常返回对象xxx/extra_cost_commute.txt,但copy步骤触发了404 Not found异常,错误信息如下:

HTTP server responded with error code 404
in step "copy", routine "main", line: 15
{
  "body": "Not Found",
  "code": 404,
  "headers": {
    "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
    "Cache-Control": "no-cache, no-store, max-age=0, must-revalidate",
    "Content-Length": "9",
    "Content-Type": "text/html; charset=UTF-8",
    "Date": "Mon, 13 May 2024 19:42:39 GMT",
    "Expires": "Mon, 01 Jan 1990 00:00:00 GMT",
    "Pragma": "no-cache",
    "Server": "UploadServer",
    "Vary": "Origin, X-Origin",
    "X-Guploader-Uploadid": ""
  },
  "message": "HTTP server responded with error code 404",
  "tags": [
    "HttpError"
  ]
}

我使用gcloud命令通过gcr.io/google.com/cloudsdktool/google-cloud-cli:alpine镜像的batch连接器测试复制操作可正常执行,请问问题出在哪里?

问题排查与解决
  • 权限差异问题:gcloud测试用的是本地身份(用户账号或指定服务账号),而Workflows运行依赖自身的服务账号。list仅需storage.objects.list权限,但copy需要同时拥有源对象的storage.objects.get和目标路径的storage.objects.create权限。
    1. 找到Workflows对应的服务账号,格式为[你的项目编号]@cloudworkflows.gserviceaccount.com
    2. 给该账号授予存储桶的Storage Object Admin角色,或更细粒度的storage.objects.get和storage.objects.create权限
  • 路径参数校验:检查sourceBucket、sourceObject、destinationBucket的取值是否与list步骤完全一致,避免多余空格、大小写错误(对象路径区分大小写)。
  • 目标路径验证:Cloud Storage没有真实目录,但若目标路径前缀从未被使用过,可能出现误判。可以先尝试将文件复制到存储桶根目录(比如destinationObject: "new_extra_cost_commute.txt"),验证是否能成功。
  • API参数格式确认:确保googleapis.storage.v1.objects.copy的参数符合要求,比如sourceObject是完整的对象路径,没有遗漏或多余层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:06:01