データレプリケーションは、オブジェクトとオブジェクト操作 (作成、上書き、削除など) をソースバケットから宛先バケットに自動的にレプリケートします。 Object Storage Service (OSS) は、クロスリージョンレプリケーション (CRR) と同一リージョンレプリケーション (SRR) をサポートしています。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
データレプリケーションを有効にするには、
oss:PutBucketReplication
権限が必要です。 データレプリケーション規則を照会するには、oss:GetBucketReplication
権限が必要です。 データをレプリケートできるリージョンを照会するには、oss:GetBucketReplicationLocation
権限が必要です。 データレプリケーションタスクの進行状況を照会するには、oss:GetBucketReplicationProgress
権限が必要です。 データレプリケーションを無効にするには、oss:DeleteBucketReplication
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
データレプリケーションの有効化
データレプリケーションを有効にする前に、ソースバケットとターゲットバケットがバージョン管理されていないか、バージョン管理が有効になっていることを確認してください。
次のサンプルコードは、データレプリケーションルールを設定する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.AddBucketReplicationRequestをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// データをレプリケートする宛先バケットを指定します。
文字列targetBucketName = "yourTargetBucketName";
// 宛先バケットが配置されているリージョンを指定します。
// CRRを有効にする場合は、ソースバケットと宛先バケットを異なるリージョンに配置する必要があります。 SRRを有効にする場合は、ソースバケットと宛先バケットが同じリージョンにある必要があります。
文字列targetBucketLocation = "yourTargetBucketLocation";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
AddBucketReplicationRequest request = new AddBucketReplicationRequest(bucketName);
request.setTargetBucketName(targetBucketName);
request.setTargetBucketLocation(targetBucketLocation);
// 履歴データを複製するかどうかを指定します。 デフォルトでは、履歴データはレプリケートされます。 この例では、履歴データは複製されない。
request.setEnableHistoricalObjectReplication(false);
// データ複製に使用するOSSを許可するロールの名前を指定します。 SSE-KMSを使用して、宛先バケットにレプリケートされるオブジェクトを暗号化する場合は、ロールを指定する必要があります。
// request.setSyncRole("yourRole");
// SSE-KMSを使用して暗号化されたオブジェクトを複製するかどうかを指定します。
// request.setSseKmsEncryptedObjectsStatus("Enabled");
// SSE-KMSで使用する顧客マスターキー (CMK) IDを指定します。 ステータスが [有効] に設定されている場合、キーIDを指定する必要があります。
// request.setReplicaKmsKeyID("3542abdd-5821-4fb5-a425-90adca ***");
// リストプレフィックス=新しいArrayList();
// prefixes.add("image/");
// prefixes.add("ビデオ");
// prefixes.add("a");
// プレフィックス。add("A");
// 複製するオブジェクトの名前に含まれるプレフィックスを指定します。 プレフィックスを指定すると、名前にプレフィックスが含まれているオブジェクトのみが宛先バケットにレプリケートされます。
// request.setObjectPrefixList (プレフィックス);
// リストアクション=新しいArrayList();
// actions.add(AddBucketReplicationRequest.ReplicationAction.ALL);
// 宛先バケットにレプリケートできる操作を指定します。 デフォルト値はALLです。これは、ソースバケット内のオブジェクトに対して実行されたすべての操作が宛先バケットにレプリケートされることを示します。
// request.setReplicationActionList (アクション);
ossClient.addBucketReplication(request);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
データ複製ルールの照会
次のサンプルコードは、バケットのデータレプリケーションルールを照会する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.ReplicationRuleをインポートします。java.util.Listをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// データ複製ルールを照会します。
List<ReplicationRule> rules = ossClient.getBucketReplication(bucketName);
for (ReplicationRule rule : rules) {
System.out.println(rule.getReplicationRuleID());
System.out.println(rule.getTargetBucketLocation());
System.out.println(rule.getTargetBucketName());
}
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
データをレプリケートできるリージョンの照会
次のサンプルコードは、データをレプリケートできるリージョンをクエリする方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.ReplicationRuleをインポートします。java.util.Listをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// データをレプリケートできるバケットのリージョンを照会します。
List<String> locations = ossClient.getBucketReplicationLocation(bucketName);
for (String loc : locations) {
System.out.println(loc);
}
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
データ複製タスクの進行状況の照会
履歴データ複製タスクと増分データ複製タスクの進行状況を照会できます。
履歴データ複製タスクの進行状況は、パーセンテージで表されます。 履歴データレプリケーションが有効になっているバケットに対してのみ、履歴データレプリケーションタスクの進行状況を照会できます。
増分データレプリケーションタスクの進行状況は、時点として表されます。 時点より前にソースバケットに格納されているデータがレプリケートされます。
次のサンプルコードは、データレプリケーションタスクの進行状況を照会する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.BucketReplicationProgressをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// データレプリケーションルールのIDを指定します。
文字列ruleId = "yourRuleId";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
BucketReplicationProgressプロセス=ossClient.getBucketReplicationProgress(bucketName, ruleId);
System.out.println(process.getReplicationRuleID());
System.out.println(process.isEnableHistoricalObjectReplication());
// データ複製タスクの進行状況を照会します。
System.out.println(process.getHistoricalObjectProgress());
// リアルタイムデータ複製タスクの進行状況を照会します。
System.out.println(process.getNewObjectProgress());
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
データレプリケーションの無効化
次のサンプルコードでは、データレプリケーションを無効にする方法の例を示します。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
文字列ruleId = "yourRuleId";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// データ複製を無効にします。 データレプリケーションを無効にした後も、宛先バケットにレプリケートされたオブジェクトは引き続き存在します。 ただし、ソースバケット内のオブジェクトに対するすべての変更は、宛先バケットにレプリケートされなくなります。
ossClient.de leteBucketReplication(bucketName, ruleId);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
参考資料
データレプリケーションの完全なサンプルコードについては、『GitHub』をご参照ください。
データレプリケーションを有効にするために呼び出すAPI操作の詳細については、「PutBucketReplication」をご参照ください。
データレプリケーション規則を照会するために呼び出すAPI操作の詳細については、「GetBucketReplication」をご参照ください。
データをレプリケートできるリージョンを照会するために呼び出すAPI操作の詳細については、「GetBucketReplicationLocation」をご参照ください。
データレプリケーションタスクの進行状況を照会するために呼び出すことができるAPI操作の詳細については、「GetBucketReplicationProgress」をご参照ください。
データレプリケーションを無効にするために呼び出すことができるAPI操作の詳細については、「DeleteBucketReplication」をご参照ください。