从Google Cloud Bucket传数据到AWS存储桶时出现“No URLS matched”错误如何解决
Command exception : NO URLs MATCHED 错误产生原因 - 源存储桶对象动态变动:任务运行数小时才报错说明前期可正常匹配文件,扫描到传输的时间差内,部分源GCS桶内的对象被删除、移动、重命名,导致传输工具无法匹配到之前记录的对象URL。
- 源桶访问权限临时失效:跨云传输依赖的GCP服务账号权限中途被收回、密钥过期,后续拉取对象列表时会被判定路径不存在,抛出匹配错误。
- 传输工具批次缓存失效:
gsutil、rclone这类同步工具会分批次拉取源桶对象列表,批次间隔过长时,后一次拉取的列表和前一次缓存的地址差异过大,导致旧缓存的URL无法匹配到现有对象。 - 特殊路径编码不兼容:前期传输的都是常规命名的文件,后续扫描到包含特殊字符、非UTF-8编码文件名的对象时,工具对路径的编码处理和GCS的存储规则不匹配,无法识别对应URL。
- 生命周期规则触发变动:传输过程中刚好触发GCS桶的生命周期规则,部分对象被删除、归档到冷存储,未适配冷存储读取权限的工具会判定对应URL不存在。
解决方案
- 确认源桶对象变动:执行
gsutil ls gs://<你的GCS源桶前缀>验证报错时段是否有对象被操作,存在业务增量变动时,给同步命令添加--exclude参数排除正在被读写的动态路径,或选择业务低峰期执行全量同步。 - 校验权限配置:确认GCP服务账号的密钥有效期大于任务预估总时长,全程保留
storage.objects.list、storage.objects.get、storage.buckets.get权限,不要附加临时权限限制。 - 调整同步扫描参数:使用
gsutil rsync时添加--batch-size=100参数缩小单批次扫描的对象数量,减少批次时间差;使用rclone时添加--fast-list --no-traverse参数降低路径缓存失效概率。 - 兼容特殊路径编码:给同步命令添加编码适配参数,比如
gsutil添加-R参数递归扫描时强制用UTF-8解析路径,提前扫描源桶所有文件名,对包含特殊字符的文件单独重命名后传输。 - 适配生命周期规则:同步期间临时暂停源桶对应路径的生命周期删除、归档规则,或给同步工具添加归档存储读取权限,比如
gsutil添加--read-from-archive参数支持直接读取归档类对象。 - 增量重试兜底:首次全量同步结束后再执行一次同步命令,仅传输差异文件,覆盖单次运行过程中临时对象变动导致的匹配失败问题。
内容的提问来源于stack exchange,提问作者Stanford
相关产品推荐
相关产品推荐

