Java
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.AddBucketReplicationRequest;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.common.comm.SignVersion;
public class Demo {
    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 填写Endpoint对应的Region信息,例如cn-hangzhou。
        String region = "cn-hangzhou";
        // 强烈建议不要把访问凭证保存到工程代码里,否则可能导致访问凭证泄露,威胁您账号下所有资源的安全。本代码示例以从环境变量中获取访问凭证为例。运行本代码示例之前,请先配置环境变量。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写源Bucket名称。
        String bucketName = "src-bucket";
        // 指定数据要复制到的目标Bucket。目标Bucket与源Bucket必须属于相同账号。
        String targetBucketName = "dest-bucket";
        // 指定目标Bucket所在地域。目标Bucket与源Bucket必须处于相同地域。
        String targetBucketLocation = "oss-cn-hangzhou";
        // 创建OSSClient实例。
        // 当OSSClient实例不再使用时,调用shutdown方法以释放资源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // 显式声明使用 V4 签名算法
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();
        try {
            AddBucketReplicationRequest request = new AddBucketReplicationRequest(bucketName);
            request.setTargetBucketName(targetBucketName);
            request.setTargetBucketLocation(targetBucketLocation);
            // 默认复制历史数据。此处设置为false,表示禁止复制历史数据。
            request.setEnableHistoricalObjectReplication(false);
            // 指定授权OSS进行数据复制的角色名称,且该角色必须已被授予源Bucket执行同区域复制以及目标Bucket接收复制对象的权限。
            request.setSyncRole("yourRole");
            // 指定OSS是否复制通过SSE-KMS加密创建的对象。
            //request.setSseKmsEncryptedObjectsStatus("Enabled");
            // 指定SSE-KMS密钥ID。如果指定Status为Enabled,则必须指定该元素。
            //request.setReplicaKmsKeyID("3542abdd-5821-4fb5-a425-90adca***");
            //List prefixes = new ArrayList();
            //prefixes.add("image/");
            //prefixes.add("video");
            //prefixes.add("a");
            //prefixes.add("A");
            // 指定待复制Object的前缀Prefix。指定Prefix后,只有匹配该Prefix的Object才会复制到目标Bucket。
            //request.setObjectPrefixList(prefixes);
            //List actions = new ArrayList();
            //actions.add(AddBucketReplicationRequest.ReplicationAction.PUT);
            // 将源Bucket内Object的新增、更新操作复制到目标Bucket。
            //request.setReplicationActionList(actions);
            ossClient.addBucketReplication(request);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}        
Python
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写源Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写源Bucket名称,例如src-bucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'src-bucket')
replica_config = ReplicationRule(
    # 指定数据要复制到的目标Bucket。目标Bucket与源Bucket必须属于相同账号。
    target_bucket_name='dest-bucket',
    # 指定目标Bucket所在地域。目标Bucket与源Bucket必须处于相同地域。
    target_bucket_location='oss-cn-hangzhou',
    # 指定授权OSS进行数据复制的角色名称,且该角色必须已被授予源Bucket执行同区域复制以及目标Bucket接收复制对象的权限。
    sync_role_name='roleNameTest',
)
# 指定待复制Object的前缀Prefix。指定Prefix后,只有匹配该Prefix的Object才会复制到目标Bucket。
# prefix_list = ['prefix1', 'prefix2']
# 设置数据复制规则。
# replica_config = ReplicationRule(
     # prefix_list=prefix_list,
     # 将源Bucket内Object的新增、更新操作复制到目标Bucket。
     # action_list=[ReplicationRule.PUT],
     # 指定数据要复制到的目标Bucket。
     # target_bucket_name='dest-bucket',
     # 指定目标Bucket所在地域。
     # target_bucket_location='yourTargetBucketLocation',
     # 默认复制历史数据。此处设置为False,表示禁止复制历史数据。
     # is_enable_historical_object_replication=False,    
     # 复制通过SSE-KMS加密创建的对象。
     # sse_kms_encrypted_objects_status=ReplicationRule.ENABLED
     # 指定SSE-KMS密钥ID。如果指定复制通过SSE-KMS加密创建的对象,则必须指定该元素。
     # replica_kms_keyid='9468da86-3509-4f8d-a61e-6eab1eac****',
  #)
# 开启数据复制。
bucket.put_bucket_replication(replica_config)
Go
package main
import (
	"encoding/xml"
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)
func HandleError(err error) {
	fmt.Println("Error:", err)
	os.Exit(-1)
}
// 开启数据复制。
func main() {
	// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 创建OSSClient实例。
	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 指定源Bucket名称。
	srcbucketName := "yourSrcBucket"
	// 指定数据要复制到的目标Bucket。
	destBucketName := "yourDestBucket"
	// 指定待复制Object的前缀prefix_1和prefix_2。指定Prefix后,只有匹配该Prefix的Object才会复制到目标Bucket。
	// 如果您需要将源Bucket中的所有Object复制到目标Bucket,则无需设置Prefix。
	prefix1 := "prefix_1"
	prefix2 := "prefix_2"
	// 指定SSE-KMS密钥ID。如果指定Status为Enabled,则必须指定该元素。
	keyId := "c4d49f85-ee30-426b-a5ed-95e9****"
	// 指定OSS是否复制通过SSE-KMS加密创建的对象。
	source := "Enabled"
	prefixSet := oss.ReplicationRulePrefix{Prefix: []*string{&prefix1, &prefix2}}	
	reqReplication := oss.PutBucketReplication{
		Rule: []oss.ReplicationRule{
			{
				PrefixSet: &prefixSet,
				//将源Bucket内Object的新增、更新操作复制到目标Bucket。
				Action: "PUT",				
				Destination: &oss.ReplicationRuleDestination{
					Bucket: destBucketName,
					// 指定目标Bucket所在地域。源Bucket与目标Bucket必须处于不同的地域。
					Location: "oss-cn-hangzhou",					
				},
				// 默认复制历史数据。此处设置为disabled,表示禁止复制历史数据。
				HistoricalObjectReplication: "disabled",
				// 指定授权OSS进行数据复制的角色名称,且该角色必须已被授予源Bucket执行同区域复制以及目标Bucket接收复制对象的权限。
				SyncRole:                "yourRole",
				EncryptionConfiguration: &keyId,
				SourceSelectionCriteria: &source,
			},
		},
	}
	xmlBody, err := xml.Marshal(reqReplication)
	if err != nil {
		HandleError(err)
	}
	err = client.PutBucketReplication(srcbucketName, string(xmlBody))
	if err != nil {
		HandleError(err)
	}
	fmt.Println("Put Bucket Replication Success!")
}