- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 权限配置指南
-
工具指南
- OBS工具汇总
-
OBS Browser+
- OBS Browser+简介
- OBS Browser+功能概述
- 下载OBS Browser+
- 安装OBS Browser+
- 登录OBS Browser+
- 桶的基本操作
- 桶的高级配置
- 对象操作
- 任务管理
- 最佳实践
-
常见问题
- 在哪里可以获取AK和SK?
- 如何获取子用户IAM的用户ID?
- 是否可以同时装两个不同站点的OBS Browser+工具?
- OBS Browser+与OBS Browser的不同之处?
- OBS Browser+支持迁移OBS Browser保存的账号信息和任务信息吗?
- 为什么我运行了百万级别的任务后,感觉任务执行较慢?
- 为什么OBS Browser+上显示的桶中对象数量和桶内存储用量与实际的不一致?
- 为什么通过OBS Browser+设置桶ACL后,旧配置中的deliver属性会被覆盖为false?
- 使用账号登录时,界面提示“没有权限登录”
- 使用账号登录时,界面提示“获取用户的Token失败”
- 使用账号登录时,界面提示“账号或者密码错误”
- 定时上传是否采用增量
- 如何永久分享文件或文件夹
- 如何访问指定桶或指定目录
- 目录分享是否支持分享后取消分享
- 是否支持统计文件夹内的文件数目及大小
- 如何解决DNS解析失败
- 是否支持列举特殊字符对象
- 恢复对象任务状态一直是恢复中
- 卸载OBS Browser+
- obsutil
- obsfs(已下线)
- 最佳实践
-
API参考
- 使用前必读
- API概览
- 如何调用API
- 快速入门
-
API
- 桶的基础操作
-
桶的高级配置
- 设置桶策略
- 获取桶策略
- 删除桶策略
- 设置桶ACL
- 获取桶ACL
- 设置桶日志管理配置
- 获取桶日志管理配置
- 设置桶的生命周期配置
- 获取桶的生命周期配置
- 删除桶的生命周期配置
- 设置桶的多版本状态
- 获取桶的多版本状态
- 设置桶默认存储类型
- 获取桶默认存储类型
- 设置桶的跨区域复制配置
- 获取桶的跨区域复制配置
- 删除桶的跨区域复制配置
- 设置桶标签
- 获取桶标签
- 删除桶标签
- 设置桶配额
- 获取桶配额
- 获取桶存量信息
- 设置桶清单
- 获取桶清单
- 列举桶清单
- 删除桶清单
- 设置桶的自定义域名
- 获取桶的自定义域名
- 删除桶的自定义域名
- 设置桶的加密配置
- 获取桶的加密配置
- 删除桶的加密配置
- 设置桶归档存储对象直读策略
- 获取桶归档存储对象直读策略
- 删除桶归档存储对象直读策略
- 设置镜像回源规则
- 获取镜像回源规则
- 删除镜像回源规则
- 设置DIS通知策略
- 获取DIS通知策略
- 删除DIS通知策略
- 设置在线解压策略
- 获取在线解压策略
- 删除在线解压策略
- 配置桶级默认WORM策略
- 获取桶级默认WORM策略
- 静态网站托管
- 对象操作
- 多段操作
- 服务端加密
- Data+
- 错误码
- 权限和授权项
- 附录
-
SDK参考
- SDK概述
- SDK功能矩阵
-
Java
- 使用前须知(Java SDK)
- Java SDK接口概览(Java SDK)
- 使用前准备(Java SDK)
- 下载与安装SDK(Java SDK)
- 快速入门(Java SDK)
- 初始化(Java SDK)
- 管理桶(Java SDK)
- 管理并行文件系统(Java SDK)
- 上传对象(Java SDK)
- 下载对象(Java SDK)
- 管理对象(Java SDK)
- 临时授权访问(Java SDK)
- 多版本控制(Java SDK)
- 生命周期管理(Java SDK)
- 跨域资源共享(Java SDK)
- 设置访问日志(Java SDK)
- 静态网站托管(Java SDK)
- 桶标签管理(Java SDK)
- 服务端加密(Java SDK)
- 客户端加密(Java SDK)
- 问题定位(Java SDK)
- 异常处理(Java SDK)
-
常见问题(Java SDK)
- 本文档是否适用于union SDK?
- 如何使对象可以被匿名用户访问?(Java SDK)
- SDK的重试机制是什么?(Java SDK)
- 如何获取桶的静态网站访问地址?(Java SDK)
- 如何获取对象URL?(Java SDK)
- 公网环境下如何提高上传大文件速度?(Java SDK)
- 如何进行分段上传?(Java SDK)
- 如何进行分段下载?(Java SDK)
- 如果桶内已存在同名对象,如何判定覆盖上传成功?(Java SDK)
- 对于加密类型的对象如何使用URL进行下载?(Java SDK)
- 如何生成SSE-C方式的加密密钥(Java SDK)
- 如何获取SecurityToken?(Java SDK)
- SDK是否支持批量上传、下载或复制对象?(Java SDK)
- 如何指定Content-SHA256?(Java SDK)
- 为什么SDK源码中包含acs.amazonaws.com关键字?(Java SDK)
- 如何理解Content-Type(MIME)?(Java SDK)
- 如何获取账号ID和用户ID?
- 如何实现上传对象时限速(Java SDK)
- 如何实现下载对象时限速(Java SDK)
- 如何设置referer头域(Java SDK)
-
Python
- 使用前须知(Python SDK)
- Python SDK接口概览
- 使用前准备(Python SDK)
- 下载与安装SDK(Python SDK)
- 快速入门(Python SDK)
- 初始化(Python SDK)
-
桶相关接口(Python SDK)
- 创建桶(Python SDK)
- 获取桶列表(Python SDK)
- 判断桶是否存在(Python SDK)
- 删除桶(Python SDK)
- 列举桶内对象(Python SDK)
- 列举桶内多版本对象(Python SDK)
- 获取桶元数据(Python SDK)
- 获取桶区域位置(Python SDK)
- 获取桶存量信息(Python SDK)
- 设置桶配额(Python SDK)
- 获取桶配额(Python SDK)
- 设置桶存储类型(Python SDK)
- 获取桶存储类型(Python SDK)
- 设置桶ACL(Python SDK)
- 获取桶ACL(Python SDK)
- 设置桶日志管理配置(Python SDK)
- 获取桶日志管理配置(Python SDK)
- 设置桶策略(Python SDK)
- 获取桶策略(Python SDK)
- 删除桶策略(Python SDK)
- 设置桶的生命周期配置(Python SDK)
- 获取桶的生命周期配置(Python SDK)
- 删除桶的生命周期配置(Python SDK)
- 设置桶的Website配置(Python SDK)
- 获取桶的Website配置(Python SDK)
- 删除桶的Website配置(Python SDK)
- 设置桶的多版本状态(Python SDK)
- 获取桶的多版本状态(Python SDK)
- 设置桶的CORS配置(Python SDK)
- 获取桶的CORS配置(Python SDK)
- 删除桶的CORS配置(Python SDK)
- 设置桶标签(Python SDK)
- 获取桶标签(Python SDK)
- 删除桶标签(Python SDK)
-
对象相关接口(Python SDK)
- 上传对象简介(Python SDK)
- 上传对象-文本上传(Python SDK)
- 上传对象-流式上传(Python SDK)
- 上传对象-文件上传(Python SDK)
- 上传对象-追加上传(Python SDK)
- 上传对象-断点续传上传(Python SDK)
- 上传对象-获取上传进度(Python SDK)
- 上传对象-基于表单上传(Python SDK)
- 下载对象简介(Python SDK)
- 下载对象-二进制下载(Python SDK)
- 下载对象-流式下载(Python SDK)
- 下载对象-文件下载(Python SDK)
- 下载对象-范围下载(Python SDK)
- 下载对象-断点续传下载(Python SDK)
- 下载对象-获取下载进度(Python SDK)
- 上传对象-创建文件夹(Python SDK)
- 复制对象(Python SDK)
- 删除对象(Python SDK)
- 批量删除对象(Python SDK)
- 获取对象元数据(Python SDK)
- 修改对象元数据(Python SDK)
- 设置对象ACL(Python SDK)
- 获取对象ACL(Python SDK)
- 恢复归档或深度归档存储对象(Python SDK)
- 多段相关接口(Python SDK)
- 客户端加密相关接口(Python SDK)
- 服务编排接口(Python SDK)
- 其他接口(Python SDK)
- 异常处理(Python SDK)
- 常见问题(Python SDK)
- C
-
Go
- 使用前须知(Go SDK)
- Go SDK接口概览
- 使用前准备(Go SDK)
- 下载与安装SDK(Go SDK)
- 快速入门(Go SDK)
- 初始化(Go SDK)
-
桶相关接口(Go SDK)
- 桶相关接口说明(Go SDK)
- 创建桶(Go SDK)
- 获取桶列表(Go SDK)
- 判断桶是否存在(Go SDK)
- 删除桶(Go SDK)
- 列举桶内对象(Go SDK)
- 列举桶内多版本对象(Go SDK)
- 获取桶元数据(Go SDK)
- 获取桶区域位置(Go SDK)
- 获取桶存量信息(Go SDK)
- 设置桶配额(Go SDK)
- 获取桶配额(Go SDK)
- 设置桶存储类型(Go SDK)
- 获取桶存储类型(Go SDK)
- 设置桶ACL(Go SDK)
- 获取桶ACL(Go SDK)
- 设置桶日志管理配置(Go SDK)
- 获取桶日志管理配置(Go SDK)
- 设置桶策略(Go SDK)
- 获取桶策略(Go SDK)
- 删除桶策略(Go SDK)
- 设置桶的生命周期配置(Go SDK)
- 获取桶的生命周期配置(Go SDK)
- 删除桶的生命周期配置(Go SDK)
- 设置桶的网站配置(Go SDK)
- 获取桶的网站配置(Go SDK)
- 删除桶的网站配置(Go SDK)
- 设置桶的多版本状态(Go SDK)
- 获取桶的多版本状态(Go SDK)
- 设置桶的CORS配置(Go SDK)
- 获取桶的CORS配置(Go SDK)
- 删除桶的CORS配置(Go SDK)
- 设置桶标签(Go SDK)
- 获取桶标签(Go SDK)
- 删除桶标签(Go SDK)
- 设置桶加密配置(Go SDK)
- 获取桶加密配置(Go SDK)
- 删除桶加密配置(Go SDK)
- 设置桶的自定义域名(Go SDK)
- 获取桶的自定义域名(Go SDK)
- 删除桶的自定义域名(Go SDK)
- 并行文件系统相关接口(Go SDK)
- 对象相关接口(Go SDK)
- 多段相关接口(Go SDK)
- 其他接口(Go SDK)
- 单链接限速(Go SDK)
- 异常处理(Go SDK)
- 常见问题(Go SDK)
- BrowserJS
- .NET
- Android
- iOS
- PHP
-
Node.js
- SDK下载(Node.js SDK)
- 示例程序(Node.js SDK)
- 技术支持渠道(Node.js SDK)
- 快速入门(Node.js SDK)
- 初始化(Node.js SDK)
-
管理桶(Node.js SDK)
- 创建桶(Node.js SDK)
- 列举桶列表(Node.js SDK)
- 判断桶是否存在(Node.js SDK)
- 删除桶(Node.js SDK)
- 获取桶元数据(Node.js SDK)
- 设置桶ACL(Node.js SDK)
- 获取桶ACL(Node.js SDK)
- 设置桶策略(Node.js SDK)
- 获取桶策略(Node.js SDK)
- 删除桶策略(Node.js SDK)
- 获取桶区域位置(Node.js SDK)
- 获取桶存量信息(Node.js SDK)
- 设置桶配额(Node.js SDK)
- 获取桶配额(Node.js SDK)
- 设置桶存储类别(Node.js SDK)
- 获取桶存储类别(Node.js SDK)
- 上传对象(Node.js SDK)
- 下载对象(Node.js SDK)
- 管理对象(Node.js SDK)
- 多段相关接口(Node.js SDK)
- 临时授权访问(Node.js SDK)
- 多版本控制(Node.js SDK)
- 生命周期管理(Node.js SDK)
- 桶的CORS配置(Node.js SDK)
- 设置访问日志(Node.js SDK)
- 静态网站托管(Node.js SDK)
- 标签管理(Node.js SDK)
- 服务端加密(Node.js SDK)
- 异常处理(Node.js SDK)
- 常见问题(Node.js SDK)
-
Harmony(公测)
- 使用前须知(Harmony SDK)
- Harmony SDK接口概览(Harmony SDK)
- 使用前准备(Harmony SDK)
- 下载与安装SDK(Harmony SDK)
- 快速入门(Harmony SDK)
- 初始化(Harmony SDK)
-
桶相关接口(Harmony SDK)
- 创建桶(Harmony SDK)
- 获取桶列表(Harmony SDK)
- 判断桶是否存在(Harmony SDK)
- 删除桶(Harmony SDK)
- 列举桶内对象(Harmony SDK)
- 列举桶内多版本对象(Harmony SDK)
- 获取桶元数据(Harmony SDK)
- 获取桶区域位置(Harmony SDK)
- 获取桶存量信息(Harmony SDK)
- 设置桶配额(Harmony SDK)
- 获取桶配额(Harmony SDK)
- 设置桶存储类型(Harmony SDK)
- 获取桶存储类型(Harmony SDK)
- 设置桶ACL(Harmony SDK)
- 获取桶ACL(Harmony SDK)
- 设置桶日志管理配置(Harmony SDK)
- 获取桶日志管理配置(Harmony SDK)
- 设置桶策略(Harmony SDK)
- 获取桶策略(Harmony SDK)
- 删除桶策略(Harmony SDK)
- 设置桶的生命周期配置(Harmony SDK)
- 获取桶的生命周期配置(Harmony SDK)
- 删除桶的生命周期配置(Harmony SDK)
- 设置桶的Website配置(Harmony SDK)
- 获取桶的Website配置(Harmony SDK)
- 删除桶的Website配置(Harmony SDK)
- 设置桶的多版本状态(Harmony SDK)
- 获取桶的多版本状态(Harmony SDK)
- 设置桶的CORS配置(Harmony SDK)
- 获取桶的CORS配置(Harmony SDK)
- 删除桶的CORS配置(Harmony SDK)
- 设置桶标签(Harmony SDK)
- 获取桶标签(Harmony SDK)
- 删除桶标签(Harmony SDK)
- 设置桶的加密配置(Harmony SDK)
- 获取桶的加密配置(Harmony SDK)
- 删除桶的加密配置(Harmony SDK)
- 设置桶的自定义域名(Harmony SDK)
- 获取桶的自定义域名(Harmony SDK)
- 删除桶的自定义域名(Harmony SDK)
- 并行文件系统相关接口(Harmony SDK)
- 对象相关接口(Harmony SDK)
- 多段相关接口(Harmony SDK)
- 其他接口(Harmony SDK)
- 异常处理(Harmony SDK)
- 常见问题(Harmony SDK)
- 场景代码示例
-
常见问题
-
产品咨询
- 如何获取OBS的终端节点?
- 我可以在OBS中存储多少数据?
- 我如何选择将数据存储在哪个区域?
- OBS支持使用HTTPS协议访问吗?
- OBS中的数据可以让其他用户访问吗?
- 访问OBS链接提示告警信息的原因和解决办法
- 已删除的数据是否可以恢复?
- 访问OBS域名失败,连接不上CA证书
- 为什么OBS存储的数据丢失了?
- OBS是否支持流量监控?
- OBS上传下载速率的影响因素有哪些?
- 对象存储与SAN存储和NAS存储相比较有什么优势?
- OBS的文件夹与文件系统的文件夹是否一样?
- OBS、EVS和SFS有什么区别?
- 如何判断是否内网访问OBS?
- 我的OBS桶性能是否会受其他用户业务的影响?
- OBS总览页数据不一致的原因是什么?
- 境外数据传输回国场景下的丢包和网络稳定性问题
-
计费相关
- 桶内无对象,为什么还会产生存储费用?
- 桶内无对象为什么会产生流量?
- 已购买资源包,为什么仍然扣费?
- 配置CDN回源,并购买回源流量包,计费未走回源流量包
- 账号欠费后已充值,为什么OBS资源仍然不可用?
- 资源包是否必须购买?是否能指定给具体的桶使用?
- 资源包是否支持退订或修改?
- 资源包到期后OBS资源会如何处理?
- 并行文件系统是否支持资源包?
- 请求次数是如何计算的?
- 是否支持购买请求次数?
- OBS存储资源包使用超量后是否会限制对桶的写入
- 当月未用完的资源包用量是否会结转到下个月?
- 哪些资源包会按月更新额度,哪些不会?
- 购买了回源流量包是否还需要购买公网流出流量包?
- 如何购买专属对象存储?
- OBS账单为什么会出现0.01元的计费?
- 查询账单时,为什么会有大量的公网流出流量?
- 权限相关
-
桶和对象相关
- 创建桶失败
- 上传对象失败
- 下载对象失败
- 删除桶失败
- 删除对象失败
- 通过URL访问对象失败
- 如何在浏览器中在线预览OBS中的对象?
- 我可以修改对象名称吗?
- 我可以在线编辑OBS中的对象吗?
- 如何获取对象访问路径?
- 我可以修改桶所在的区域吗?
- 如何修改桶所属的企业项目?
- 我可以在桶间进行文件复制吗?
- 我可以在桶间进行文件移动吗?
- 我可以上传同名对象到同一个文件夹中吗?
- OBS是否支持断点续传功能?
- OBS是否支持批量上传文件?
- OBS是否支持批量下载文件?
- OBS是否支持批量删除对象或清空桶?
- 无法搜索到桶中对象或对象不存在返回403
- 使用IE浏览器访问带有中文字符的对象URL地址报错如何处理?
- 为什么配置了跨域访问OBS(CORS)仍然报错?
- 如何查看桶内的文件夹大小?
- 如何上传超过5GB的大对象?
- 数据安全、迁移和备份
- 多版本控制
- 服务端加密
- 跨区域复制
- 域名管理
- 静态网站托管
- 图片处理
- 并行文件系统
- 监控
- OBS控制台使用相关
- OBS Browser+和obsutil等工具相关
- API和SDK等开发者相关
- Data+
-
产品咨询
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
跨区域复制
当前,OBS支持一个源桶到一个目标桶配置一条复制所有对象的跨区域复制规则,或多条按前缀匹配的跨区域复制规则。
跨区域复制不保证时效性,配置跨区域复制规则后,可能会出现对象不会立即进行复制的情况,请耐心等待。
开启WORM保留策略的桶暂不支持跨区域复制能力。
使用场景
跨区域复制能够为用户提供跨区域数据容灾的能力,满足用户数据复制到异地进行备份的需求。
跨区域复制是指通过创建跨区域复制规则,将一个桶(源桶)中的数据自动、异步地复制到不同区域的另外一个桶(目标桶)中,源桶和目标桶必须属于同一个账号,暂不支持跨账号复制。
在配置跨区域复制规则时,您可以按前缀匹配请求复制部分对象,也可以请求复制桶中的所有对象。复制到目标桶的对象是源桶中对象的精确副本。它们具有相同的对象名称和元数据,包括:对象内容、大小、最后修改时间、创建者、版本号、用户定义的元数据以及ACL。默认情况下复制对象的存储类别,与源对象保持一致。您也可以为复制对象指定一个存储类别。

- 合规性要求
虽然OBS默认跨多个地理位置较远的可用区存储数据,但是合规性要求所规定的数据存储距离可能更远。通过跨区域复制,可以在远距离OBS区域之间复制数据以满足这些合规性要求。
- 最大限度减少延迟
客户需要在多地访问相同的OBS资源。为了最大限度缩短访问对象时的延迟,您可以使用跨区域复制,在离客户较近的区域中创建对象副本。
- 数据复制
- 数据备份与容灾
出于对数据安全性以及可用性的考虑,您希望对所有写入OBS的数据,都在另一个区域的数据中心显式地创建一个备份,以防止在数据发生不可逆损毁时,有安全、可用的备份数据。
- 易维护
您在两个不同OBS区域中具有分析同一组对象的计算集群。您可能选择在这些区域中维护对象副本。
须知:
OBS帮助您将存储于华为云对象存储的业务数据复制到指定Region,但华为云并不感知您的数据的具体内容,也不对您使用本服务的合法合规性负责。如果您的复制涉及跨境传输,请确保您使用本服务符合法律法规的要求。
复制的内容
启用跨区域复制规则后,符合以下条件的对象会复制到目标桶中:
- 新上传的对象(归档存储或深度归档存储对象除外)。
- 有更新的对象,比如对象内容有更新,或者某一对象跨区域复制成功后源桶对象ACL设置有更新。
- 桶中的历史对象(需要开启“同步历史对象”功能,且归档存储或深度归档存储对象除外)。
例如,7月28号,源桶开启了跨区域复制,上传了对象A和B,此时目标桶同步复制了A和B。7月29号,源桶上传了对象C,这个时候目标桶只会复制C,不会再次复制A和B。7月30号,源桶修改了对象A,目标桶只会复制A,不会再次复制B和C。
跨区域复制不支持SSE-C加密的对象复制。
约束与限制
桶版本限制
- 桶版本号为3.0及以上的桶支持跨区域复制功能。桶版本号可以在OBS管理控制台上,进入桶概览页后,在“基本信息”中查看。
源桶和目标桶状态限制:
- 源桶和目标桶的多版本控制状态必须保持一致。
功能限制:
- 源桶中归档存储或深度归档存储类型的对象不支持跨区域复制到目标桶。
- 如果目标桶所属区域不支持存储类别,则复制后对象的存储类别均为标准存储类型。
- OBS目前仅支持一个源桶同时复制到一个目标桶,不支持一个源桶同时复制到多个目标桶。允许修改目标桶,但修改目标桶会更改所有已创建规则的目标桶。
- 开启跨区域复制功能后,源桶将不再支持追加写对象。
- 同一个源桶只能创建一条复制所有对象的跨区域复制规则,或多条(最多100条)按前缀匹配的跨区域复制规则。
时间限制:
- 跨区域复制不保证时效性,配置跨区域复制规则后,可能会出现对象不会立即进行复制的情况,请耐心等待。
区域限制:
- 源桶和目标桶必须属于不同的区域,同区域的桶不能进行数据复制。
- 跨区域复制支持的区域情况如图2所示。√表示两个区域可连通,x表示两个区域不可连通。
同步历史对象相关:
- 启用跨区域复制功能之前上传的对象,默认不会被复制到目标桶,除非开启了“同步历史对象”功能。
- 启用历史对象复制后,修改跨区域复制配置可能导致历史对象不复制,建议在历史对象复制完成前不要改变该桶的跨区域复制配置。
多版本控制相关:
- 当源桶、目标桶多版本控制处于开启或暂停状态,且跨区域复制规则处于开启状态时,在源桶中不指定版本删除对象,目标桶会同步删除此对象。
- 在启用跨区域复制过程中,如果您修改目标桶的多版本控制状态,会导致对象复制失败;如果您尝试修改源桶多版本控制状态,必须先删除复制配置,然后才能进行修改。
权限相关:
- 源桶或目标桶都需要一直保证桶拥有者具有读写权限,以确保数据能够成功同步。如果源桶或目标桶的读写权限错误,导致系统没有读源对象或者写目标对象的权限,这种对象将一直复制不成功,即使将权限修改正确后,也不会重新复制。
- 不建议您对目标桶中的副本对象进行删除、覆盖或者修改ACL操作,此类操作可能导致目标桶中对象最新版本或者对象访问控制权限与源区域不一致。
- 如果已复制成功的源对象的ACL发生变化,在该对象匹配的复制策略未发生变化的情况下,这些变化会同步复制到对象副本,但已复制成功的历史对象不会同步源对象的ACL变化。
其他约束与限制
- 源桶中的对象只能被复制到一个目标桶中,且复制过去的对象不能再被复制到另外一个目标桶。例如有两个不同区域的桶A和桶B,桶A数据可以复制到桶B中,桶B数据也可以复制到桶A中,但桶B中存储的桶A数据的副本不会复制,同理桶A中存储的桶B数据的副本也不会复制。
- 在启用跨区域复制过程中,如果您删掉OBS云服务委托,会导致对象复制状态为FAILED。
- 源桶中生命周期规则到期删除对象的操作不会被复制到目标桶中,即源桶中通过生命周期规则删除的对象,在目标桶中不会被同步删除。
例如:您在1月16日配置了跨区域复制规则,将源桶A中的对象a.txt和aa.txt全部复制到了目标桶B中,而在1月20日a.txt被源桶A配置的生命周期规则删除,那么已经复制到目标桶B中的a.txt不会同步被删除。
前提条件
源桶的版本号为3.0及以上,并且源桶所在区域支持跨区域复制功能。各区域的支持情况,请在功能总览页面搜索“跨区域复制”查询。
使用方式
OBS支持通过控制台、API、obsutil方式配置跨区域复制,不支持通过SDK、OBS Browser+方式配置跨区域复制。
使用OBS控制台
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 在OBS管理控制台桶列表中,单击待操作的桶,进入“对象”页面。
- 在左侧导航栏,单击“容灾备份 > 跨区域复制”。
- 单击“创建规则”,系统将弹出“创建跨区域复制规则”对话框,如图3所示。
说明:
- 源桶和目标桶的多版本控制状态必须保持一致。
- 一个源桶的跨区域复制只能有一个目标桶和IAM委托,后面创建的规则中的目标桶和IAM委托会覆盖已创建规则的目标桶和委托。
- 根据业务规划配置跨区域复制规则,参数的详细说明如表1所示。
表1 跨区域复制规则参数 参数
说明
状态
选择启用或者禁用当前规则。源桶和目标桶的多版本控制状态必须保持一致。
源桶
复制对象
在源桶中选择要复制的对象。
- 所有对象:复制所有对象到目标桶。
- 按前缀匹配:复制具有相同前缀的对象到目标桶。
前缀
- 按前缀匹配对象时,输入的对象名前缀不能为空,长度限制为1024个字符。
- 当按前缀配置时,如果指定的前缀名与某条已配置的规则指定的前缀名存在包含关系,OBS会将两条规则视为同一条,而禁止您配置本条规则。例如,系统中已存在指定前缀名为“abc”的规则,则不允许再配置指定前缀以“abc”字段开头的规则。
- 如果要复制文件夹,对象名前缀需要使用/作为最后一个字符(例如,imgs/)。
同步历史对象
选择是否将创建本规则前已经存在于桶中的对象同步复制到目标桶,默认不同步。
目标桶
区域
选择目标桶所在区域,目标桶需要与源桶处于不同区域。
桶
选择目标桶。
修改复制对象的存储类别
默认不勾选,即保持与源桶中对象的存储类别一致。勾选后可以配置复制到目标桶的对象的存储类别。
权限
复制使用KMS加密的对象
不论是否勾选,OBS均会尝试复制KMS加密对象。
- 如果勾选该项,下方的“IAM委托”仅会展示全局项目下配置了任意权限,并且源桶和目标桶区域均配置了KMS Administrator或Tenant Administrator权限的OBS云服务委托。
- 如果不勾选该项,下方的“IAM委托”仅会展示全局项目下配置了任意权限,且源桶或目标桶区域不包含KMS Administrator或Tenant Administrator权限的OBS云服务委托。
如果目标区域没有启用KMS服务或者委托中没有赋予源桶和目标桶所在区域“KMS Administrator”权限,则源桶中KMS加密对象会复制失败,导致对象复制状态为FAILED。
源桶中以任意KMS密钥加密的对象,复制到目标桶后都会以目标桶所在区域的默认密钥“obs/default”进行加密。
IAM委托
将您资源的操作权限委托给OBS,OBS使用此委托执行对象的跨区域复制。
第一次使用时,您需要单击“查看IAM委托”去创建一个新的委托用于跨区域复制。如果已经创建,可以从下拉列表中选择。
说明:
委托要求:
此IAM委托必须为“对象存储服务 OBS”的云服务委托。其中“对象存储服务”项目需要具有“OBS Administrator”权限。如果勾选了“复制使用KMS加密的对象”,源桶和目标桶所在区域还需要具有“KMS Administrator”权限。
- (可选)创建IAM委托,参见创建用于跨区域复制的委托。
- 单击“确定”,完成跨区域复制规则创建。
使用API
使用命令行工具obsutil
命令结构:
- Windows操作系统
- 复制单个对象
obsutil cp obs://srcbucket/key obs://dstbucket/[dest] [-dryRun][-u] [-crr] [-vlength] [-vmd5] [-p=1] [-threshold=52428800] [-versionId=xxx] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-cpd=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 批量复制对象
obsutil cp obs://srcbucket[/key] obs://dstbucket[/dest] -r [-dryRun][-f] [-flat] [-u] [-crr] [-vlength] [-vmd5] [-j=1] [-p=1] [-threshold=52428800] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-include=*.xxx] [-exclude=*.xxx] [-timeRange=time1-time2] [-mf] [-o=xxx] [-cpd=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 复制单个对象
- macOS/Linux操作系统
- 复制单个对象
./obsutil cp obs://srcbucket/key obs://dstbucket/[dest] [-dryRun] [-u] [-crr] [-vlength] [-vmd5] [-p=1] [-threshold=52428800] [-versionId=xxx] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-cpd=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 批量复制对象
./obsutil cp obs://srcbucket[/key] obs://dstbucket[/dest] -r [-dryRun] [-f] [-flat] [-u] [-crr] [-vlength] [-vmd5] [-j=1] [-p=1] [-threshold=52428800] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-include=*.xxx] [-exclude=*.xxx] [-timeRange=time1-time2] [-mf] [-o=xxx] [-cpd=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 复制单个对象
- 复制的源路径和目标路径不能完全相同。
- 批量复制时,源路径和目标路径不能相互嵌套(目标路径以源路径为前缀时,可能会产生递归复制;源路径以目标路径为前缀时,可能会产生覆盖拷贝)。
运行示例:
- 以Windows操作系统为例,运行obsutil cp obs://bucket-test/key obs://bucket-test2 ,复制单个对象。
obsutil cp obs://bucket-test/key obs://bucket-test2 Start at 2024-09-30 08:30:09.0815415 +0000 UTC Parallel: 3 Jobs: 3 Threshold: 50.00MB PartSize: auto CheckpointDir: xxxx [=====================================================] 100.00% 6/s 0s Waiting for the copied key to be completed on server side. Copy successfully, 19B, obs://bucket-test/key --> obs://bucket-test2/key ext.txt, cost [1708], status [200], request id [00000192420D227E4017336A12F1DC22]
- 以Windows操作系统为例,运行obsutil cp obs://bucket-test/temp/ obs://bucket-test2 -f -r,批量复制对象。
obsutil cp obs://bucket-test/temp/ obs://bucket-test2 -r -f Start at 2024-09-30 08:34:02.7819703 +0000 UTC Parallel: 5 Jobs: 5 Threshold: 50.00MB PartSize: auto CheckpointDir: xxxx Task id: 0476929d-9d23-4dc5-b2f8-0a0493f027c5 OutputDir: xxxx [=============================================================] 100.00% 10/s 0s Succeed count: 5 Failed count: 0 Metrics [max cost:298 ms, min cost:192 ms, average cost:238.00 ms, average tps:9.71, transferred size: 7.20MB] Task id: 0476929d-9d23-4dc5-b2f8-0a0493f027c5
- 更多运行示例,请参见复制示例。
参数说明:
参数 |
约束 |
描述 |
---|---|---|
srcbucket |
必选 |
源桶名。 |
dstbucket |
必选 |
目标桶名。 |
dest |
可选 |
复制对象时的目标对象名,或批量复制时目标对象名前缀。 |
key |
复制对象时必选 批量复制时可选 |
复制对象时的源对象名,或批量复制时源对象名前缀。 规则如下:
|
fr |
附加参数,复制对象时可选 |
复制对象时生成结果清单文件。 |
flat |
附加参数,批量复制时可选 |
批量复制时,不包含上一级父对象名前缀。 |
dryRun |
附加参数,可选 |
测试模式运行,不执行实际的复制操作。 |
crr |
附加参数,可选 |
复制时使用客户端跨区域复制模式,以通过数据流的方式从源桶直接复制数据到目标桶,且两个桶可以是任意两个OBS服务的桶。
须知:
开启跨区域复制后,因为会占用执行命令主机上传和下载的双向带宽、CPU和内存等资源,可能会影响执行命令主机的性能。 |
vlength |
附加参数,可选 |
复制完成后,验证目标桶对象大小是否与源桶中对象的大小一致。 必须与crr参数配合使用。 |
vmd5 |
附加参数,可选 |
复制完成后,验证目标桶的MD5值是否与源桶中对象的MD5值一致。
注意:
如果您的业务涉及加密场景,请勿使用该参数。 |
u |
附加参数,可选 |
增量复制操作,设置该参数后,复制每个源对象时会对比目标桶中对应路径的目标对象,仅在目标对象不存在,或者目标对象大小与源对象大小不一致,或者目标对象的最后修改时间早于源对象的最后修改时间时进行复制。 |
p |
附加参数,可选 |
每个分段复制任务的最大并发数,默认为配置文件中的defaultParallels。 |
threshold |
附加参数,可选 |
开启分段复制任务的阈值,单位:字节,默认为配置文件中的defaultBigfileThreshold。
|
versionId |
附加参数,复制对象时可选 |
复制单个对象时可指定的源对象版本号。 |
acl |
附加参数,可选 |
复制对象时可指定的目标对象的预定义访问策略。支持的值:
以上四个值分别对应:私有读写、公共读、公共读写、桶拥有者完全控制,四种预定义访问策略。 |
sc |
附加参数,可选 |
复制对象时可指定的目标对象的存储类型。支持的值:
|
meta |
附加参数,可选 |
复制对象时可指定的目标对象的标准和自定义元数据。格式为:key1:value1#key2:value2#key3:value3。
|
fs |
附加参数,可选 |
是否使用并行文件系统的列举方式,如果桶是并行文件系统,推荐加上该参数。
注意:
|
ps |
附加参数,可选 |
每个分段复制任务的段大小,单位:字节,取值范围是100KB~5GB,默认为配置文件中的defaultPartSize。
|
cpd |
附加参数,可选 |
生成断点记录文件的文件夹,默认为运行obsutil命令的用户目录的子文件夹.obsutil_checkpoint。 每个分段复制任务会产生唯一对应的断点记录文件并保存至该文件夹的copy子文件夹下,分段任务执行成功后,对应的断点记录文件会被自动删除;分段任务执行失败或被中断后,下次执行该分段任务时会尝试通过对应的断点记录文件恢复任务。 |
r |
附加参数,批量复制时必选 |
按指定源桶的对象名前缀批量复制对象。 |
f |
附加参数,批量复制时可选 |
强制操作,不进行询问提示。 |
j |
附加参数,批量复制时可选 |
批量复制时的最大并发数,默认为配置文件中的defaultJobs。 工具会保证该值至少为1。 |
exclude |
附加参数,批量复制时可选 |
不包含源对象的匹配模式,如:*.txt。
须知:
|
include |
附加参数,批量复制时可选 |
包含源对象的匹配模式,如:*.jpg。
须知:
|
timeRange |
附加参数,批量复制时可选 |
复制对象时的时间段匹配模式,仅复制最后修改时间在该时间段内的对象。 该匹配模式优先级低于对象名匹配模式:exclude和include,优先执行对象名匹配模式后才会执行该匹配模式。
须知:
|
mf |
附加参数,可选 |
设置名称匹配模式(include、exclude)和时间匹配模式(timeRange)对对象名以“/”结尾的对象也生效。 |
o |
附加参数,可选 |
生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(可能包含成功结果、失败结果和警告结果三个文件),默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。
|
config |
附加参数,可选 |
运行当前命令时的自定义配置文件,可支持的配置参数请参考配置参数说明。 |
e |
附加参数,可选 |
指定终端节点。 |
i |
附加参数,可选 |
指定用户的AK。 |
k |
附加参数,可选 |
指定用户的SK。 |
t |
附加参数,可选 |
指定用户的securitytoken。 |
响应结果:
字段名 |
描述 |
---|---|
Parallel |
请求中的-p参数。 |
Jobs |
请求中的-j参数。 |
Threshold |
请求中的-threshold参数。 |
PartSize |
请求中的-ps参数。 |
Exclude |
请求中的-exclude参数。 |
Include |
请求中的-include参数。 |
TimeRange |
请求中的-timeRange参数。 |
VerifyLength |
请求中的-vlength参数。 |
VerifyMd5 |
请求中的-vmd5参数。 |
CheckpointDir |
请求中的-cpd参数。 |
OutputDir |
请求中的-o参数。 |
ArcDir |
请求中的-arcDir参数。 |
Succeed count |
成功的任务数。 |
Failed count |
失败的任务数。 |
Skip count |
增量上传/下载/复制、同步上传/下载/复制跳过的任务数。 跳过的任务数也会记录到成功的任务数中。 |
Warning count |
执行完成但包含警告的任务数。
|
Succeed bytes |
上传/下载成功的字节数。 |
max cost |
所有任务中的最长耗时,单位:毫秒。 |
min cost |
所有任务中的最短耗时,单位:毫秒。 |
average cost |
平均耗时,单位:毫秒。 |
average tps |
平均每秒的任务完成个数。 |
Task id |
每次运行的唯一标识号,用于查找批量任务生成的结果清单文件。 |
相关操作
创建用于跨区域复制的委托
- 在OBS控制台“创建跨区域复制规则”对话框,单击“查看IAM委托”,进入“统一身份认证服务”控制台“委托”页面。
- 单击“创建委托”,进行委托创建。
- 输入“委托名称”。
- “委托类型”选择“云服务”。
- “云服务”选择“对象存储服务 OBS”。
- 选择“持续时间”。
- 单击“完成”。
- 在“创建成功”提示弹窗,单击“立即授权”,进行授权操作。
- 在“选择策略”页面,单击右上角的“新建策略”,创建自定义策略。
- 输入“策略名称”,“策略内容”按照如下设置:
- 云服务:选择“对象存储服务(OBS)”。
- 操作:请选择下表中的操作。
操作
描述
obs:object:GetObject
获取对象内容、获取对象元数据。
obs:object:DeleteObjectVersion
删除对象、批量删除对象。
obs:object:PutObjectVersionAcl
设置对象ACL。
obs:object:AbortMultipartUpload
取消多段上传任务。
obs:object:PutObjectAcl
设置对象ACL。
obs:object:DeleteObject
删除对象、批量删除对象。
obs:bucket:HeadBucket
获取桶元数据。
obs:object:PutObject
PUT上传、POST上传、复制对象、追加写对象、初始化上传段任务、上传段、合并段
obs:object:GetObjectVersionAcl
获取对象ACL。
obs:bucket:GetBucketVersioning
获取桶的多版本状态。
obs:bucket:ListBucketMultipartUploads
列举多段上传任务。
obs:object:ListMultipartUploadParts
列举已上传的段。
obs:object:ModifyObjectMetaData
修改对象元数据。
obs:bucket:ListBucketVersions
列举桶内多版本对象。
obs:bucket:ListBucket
列举桶内对象。
obs:object:GetObjectVersion
获取对象内容、获取对象元数据。
obs:object:GetObjectAcl
获取对象ACL。
obs:bucket:GetReplicationConfiguration
获取桶的跨区域复制配置。
- 资源:选择“特定资源”。
- object:选择“通过资源路径指定”,资源路径格式为“OBS:*:*:object:桶名称/对象名称”。
此处分别添加源桶和目标桶中所有的对象资源,如:OBS:*:*:object:piccomp/*和OBS:*:*:object:piccomp-output/*分别表示源桶piccomp和目标桶piccomp-output中的所有对象。
- bucket:选择“通过资源路径指定”,资源路径格式为“OBS:*:*:bucket:桶名称”。
此处分别添加源桶和目标桶资源,如:OBS:*:*:bucket:piccomp和OBS:*:*:bucket:piccomp-output分别表示源桶piccomp和目标桶piccomp-output。
- object:选择“通过资源路径指定”,资源路径格式为“OBS:*:*:object:桶名称/对象名称”。
图4 自定义策略设置 - 单击页面右下角的“下一步”,进入为该委托授权的页面。
- 选择19创建的自定义策略,单击页面右下角的“下一步”。
- 选择授权范围方案时,选择“全局服务资源”,单击下方的“确定”完成委托创建。
- (可选)如果勾选了“复制使用KMS加密的对象”,源桶和目标桶所在区域还需要具有“KMS CMKFullAccess”权限。
- 在“统一身份认证服务”管理控制台“委托”页面,单击上一步创建的委托名称。
- 选择“授权记录”页签,单击“授权”。
- 在“选择策略”页面选择“KMS CMKFullAccess”权限,单击下方的“下一步”。
- 选择授权范围方案时,选择“指定区域项目资源”,分别选择源桶和目标桶所在区域的项目,单击下方的“确定”完成委托创建。