PutBucketReplication接口用于為存儲空間(Bucket)指定數據復制規則。OSS支持跨區域復制(Cross-Region Replication)和同區域復制(Same-Region Replication)。
注意事項
數據復制是以異步(近實時)方式將源Bucket中的文件(Object)以及對Object的創建、更新和刪除等操作自動復制到目標Bucket。使用數據復制時,有如下注意事項:
數據復制采用異步復制,數據復制到目標Bucket需要一定的時間,通常幾分鐘到幾小時不等,具體取決于數據的大小。
源Bucket與目標Bucket的名稱不能相同。
使用跨區域復制時,源Bucket與目標Bucket必須處于不同的數據中心;使用同地域復制時,源Bucket與目標Bucket必須處于相同的數據中心。
請求語法
POST /?replication&comp=add HTTP/1.1
Date: GMT Date
Content-Length: ContentLength
Content-Type: application/xml
Authorization: SignatureValue
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
<?xml version="1.0" encoding="UTF-8"?>
<ReplicationConfiguration>
<Rule>
<RTC>
<Status>enabled or disabled</Status>
</RTC>
<PrefixSet>
<Prefix>prefix_1</Prefix>
<Prefix>prefix_2</Prefix>
</PrefixSet>
<Action>ALL or PUT</Action>
<Destination>
<Bucket>destbucket</Bucket>
<Location>oss-cn-hangzhou</Location>
<TransferType>oss_acc</TransferType>
</Destination>
<HistoricalObjectReplication>enabled or disabled</HistoricalObjectReplication>
</Rule>
</ReplicationConfiguration>
請求元素
名稱 | 類型 | 是否必選 | 示例值 | 描述 |
ReplicationConfiguration | 容器 | 是 | 不涉及 | 配置Bucket數據復制規則的容器。 父節點:無 子節點:Rule |
Rule | 容器 | 是 | 不涉及 | 保存數據復制規則的容器。 父節點:ReplicationConfiguration 子節點:Destination、HistoricalObjectReplication和ID |
RTC | 容器 | 否 | 不涉及 | 保存RTC狀態規則的容器。 父節點:Rule 子節點:Status |
Status | 字符串 | 否 | enabled | 開啟或關閉RTC功能。RTC功能僅支持跨區域復制時配置。 取值:
父節點:RTC 子節點:無 說明 關于RTC功能支持地域的更多信息,請參見RTC支持地域。 |
PrefixSet | 容器 | 否 | 不涉及 | 保存前綴(Prefix)的容器。每條數據復制規則中,最多可指定10條Prefix。 父節點:Rule 子節點:Prefix |
Prefix | 字符串 | 否 | source1 | 設置待復制Object的Prefix。只有匹配該Prefix的Object才被復制到目標Bucket。
父節點:PrefixSet 子節點:無 |
Action | 字符串 | 否 | ALL | 指定可以被復制到目標Bucket的操作。如果配置了Action,則新寫入的數據和歷史數據的同步都會遵循Action指定的復制操作。 Action允許以下操作類型,您可以指定一項或多項。 取值:
父節點:Rule 子節點:無 |
Destination | 容器 | 是 | 不涉及 | 保存目標Bucket信息的容器。 父節點:Rule 子節點:Bucket和Location |
Bucket | 字符串 | 是 | destbucket | 指定數據要復制到的目標Bucket。 父節點:Destination 子節點:無 |
Location | 字符串 | 是 | oss-cn-hangzhou | 目標Bucket所處的地域。 父節點:Destination 子節點:無 |
TransferType | 字符串 | 是 | oss_acc | 指定數據復制時使用的數據傳輸鏈路。 取值:
父節點:Destination 子節點:無 |
HistoricalObjectReplication | 字符串 | 否 | disabled | 指定是否復制歷史數據。即開啟數據復制前,是否將源Bucket中的數據復制到目標Bucket。 取值:
父節點:Rule 子節點:無 |
SyncRole | 字符串 | 否 | aliyunramrole | 授權OSS使用哪個角色來進行數據復制。如果指定使用SSE-KMS加密目標對象,則必須指定該元素。 說明 請確保授予角色 |
SourceSelectionCriteria | 容器 | 否 | 不涉及 | 用于標識要復制的源對象的其他篩選條件的容器。當前OSS僅支持針對SSE-KMS加密的源對象指定篩選條件。 |
SseKmsEncryptedObjects | 容器 | 否 | 不涉及 | 用于篩選使用SSE-KMS加密對象的容器。如果在數據復制規則中指定了SourceSelectionCriteria,則必須指定該元素。 |
Status | 字符串 | 否 | Enabled | 指定OSS是否復制通過SSE-KMS加密創建的對象。取值范圍如下:
|
EncryptionConfiguration | 容器 | 否 | 不涉及 | 目標對象加密配置。如果指定Status為Enabled,則必須指定該元素。 |
ReplicaKmsKeyID | 字符串 | 否 | c4d49f85-ee30-426b-a5ed-95e9139d**** | 指定SSE-KMS密鑰ID。如果指定Status為Enabled,則必須指定該元素。 |
此接口還需要包含Host、Date等公共請求頭。更多信息,請參見公共請求頭(Common Request Headers)。
響應頭
此接口僅包含公共響應頭。更多信息,請參見公共響應頭(Common Response Headers)。
示例
請求示例
POST /?replication&comp=add HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Content-Type: application/xml
Content-Length: 186
Date: Thu, 24 Sep 2015 15:39:12 GMT
Authorization: OSS qn6q**************:77Dv****************
<?xml version="1.0" encoding="UTF-8"?>
<ReplicationConfiguration>
<Rule>
<RTC>
<Status>enabled</Status>
</RTC>
<PrefixSet>
<Prefix>source1</Prefix>
<Prefix>video</Prefix>
</PrefixSet>
<Action>PUT</Action>
<Destination>
<Bucket>destbucket</Bucket>
<Location>oss-cn-beijing</Location>
<TransferType>oss_acc</TransferType>
</Destination>
<HistoricalObjectReplication>enabled</HistoricalObjectReplication>
<SyncRole>aliyunramrole</SyncRole>
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<EncryptionConfiguration>
<ReplicaKmsKeyID>c4d49f85-ee30-426b-a5ed-95e9139d****</ReplicaKmsKeyID>
</EncryptionConfiguration>
</Rule>
</ReplicationConfiguration>
返回示例
HTTP/1.1 200 OK
x-oss-request-id: 534B371674E88A4D8906****
Date: Thu, 24 Sep 2015 15:39:12 GMT
Content-Length: 0
Connection: close
Server: AliyunOSS
錯誤碼
錯誤碼 | 狀態碼 | 描述 |
InvalidTargetBucket | 400 BadRequest | 返回此錯誤的可能原因如下:
|
InvalidTargetLocation | 400 BadRequest | 目標Bucket所在的Location不是請求XML中指定的Location。 |
BucketReplicationAlreadyExist | 400 BadRequest | 源Bucket到目標Bucket已存在復制關系。 如果需要配置新的數據復制規則,請先刪除已有的數據復制規則再配置。 |
BadReplicationLocation | 400 BadRequest | 選擇的目的數據中心不合法。 您可通過GetBucketReplicationLocation來獲得合法的可復制到的數據中心。 |
NoReplicationLocation | 400 BadRequest | 使用跨區域復制時,源Bucket所在的數據中心沒有與之配對的可實施跨區域復制的數據中心。 跨區域復制數據中心的配對關系可通過訪問域名和數據中心查看。 |
TooManyReplicationRules | 400 BadRequest | 請求中配置的數據復制規則超過一條。 單次請求中只能配置一條數據復制規則。 |
TooManyIncomingReplication | 400 BadRequest | 為Bucket配置的數據復制規則個數已達到100條。請刪除不再使用的數據復制規則后重試。 單個Bucket支持配置100條數據復制規則。如果業務需求超出數量限制,請提交工單聯系我們。 |
TooManyOutgoingReplication | 400 BadRequest | 為Bucket配置的數據復制規則個數已達到100條。請刪除不再使用的數據復制規則后重試。 單個Bucket支持配置100條數據復制規則。如果業務需求超出數量限制,請提交工單聯系我們。 |
MissingArgument | 400 BadRequest | 未指定數據傳輸鏈路。 |
InvalidArgument | 400 BadRequest | 不支持指定的數據傳輸鏈路。 |
ReplicationLocationNotSupportRtc | 400 BadRequest | 不支持在該地域開啟RTC功能。關于支持開啟RTC功能的地域信息,請參見RTC地域。 |