Archiveオブジェクトのリアルタイムアクセスを有効にしない場合、Archiveオブジェクトは復元した後にのみアクセスできます。 アーカイブオブジェクトのリアルタイムアクセスは、Cold ArchiveオブジェクトとDeep Cold Archiveオブジェクトではサポートされていません。 Cold ArchiveオブジェクトとDeep Cold Archiveオブジェクトは、復元後にのみアクセスできます。 ほとんどの場合、アーカイブオブジェクトの復元には数分、Cold Archiveオブジェクトの復元には数時間、Deep Cold Archiveオブジェクトの復元には12〜48時間が必要です。 前回の復元時間は参考のためである。 復元時間は、実際のシナリオに基づいて変化し得る。 このトピックでは、アーカイブ、コールドアーカイブ、およびDeep Cold Archiveオブジェクトを復元する方法について説明します。
使用上の注意
RestoreObject操作は、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブオブジェクトでのみ呼び出すことができます。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
オブジェクトを復元するには、
oss:RestoreObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
Archive オブジェクトの復元
次のサンプルコードは、Archiveオブジェクトを復元する方法の例を示しています。
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をインポートします。*;
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";
// アーカイブオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。
String objectName = "exampledir/object";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
// オブジェクトがアーカイブオブジェクトかどうかを確認します。
StorageClass storageClass = objectMetadata.getObjectStorageClass();
if (storageClass == StorageClass.Archive) {
// Restore the object.
ossClient.restoreObject(bucketName, objectName);
// オブジェクトが復元されるのを待つ時間を指定します。
do {
Thread.sleep(1000);
objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
} while (!objectMetadata.isRestoreCompleted());
}
// 復元されたオブジェクトを照会します。
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
ossObject.getObjectContent().close();
} 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();
}
}
}
}
Cold Archiveオブジェクトを復元する
次のサンプルコードは、Cold Archiveオブジェクトを復元する方法の例を示しています。
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をインポートします。*;
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";
// Cold Archiveオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。
String objectName = "exampledir/object";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// Cold Archiveオブジェクトの復元モードを指定します。
// RestoreTier.RESTORE_TIER_EXPEDITEDは、オブジェクトが1時間以内に復元されることを指定します。
// RestoreTier.RESTORE_TIER_STANDARDは、オブジェクトが2〜5時間以内に復元されることを指定します。
// RestoreTier.RESTORE_TIER_BULKは、オブジェクトが5〜12時間以内に復元されることを指定します。
RestoreJobParameters jobParameters = new RestoreJobParameters(RestoreTier.RESTORE_TIER_EXPEDITED);
// パラメーターを設定します。 たとえば、オブジェクトの復元モードを標準に設定し、オブジェクトが復元された状態のままである期間を2日に設定します。
// 最初のパラメーターは、オブジェクトが復元された状態のままである期間 (日) を指定します。 デフォルト値は 1 です。 このパラメーターは、アーカイブおよびコールドアーカイブオブジェクトに対して有効になります。
// jobParametersはオブジェクトの復元モードを指定し、Cold Archiveオブジェクトに対してのみ有効になります。
RestoreConfiguration configuration = new RestoreConfiguration(2, jobParameters);
// オブジェクトの復元要求を開始します。
ossClient.restoreObject(bucketName, objectName, configuration);
} 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();
}
}
}
}
Deep Coldアーカイブオブジェクトの復元
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をインポートします。*;
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";
// Deep Cold Archiveオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。
String objectName = "exampledir/object";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// 復元モードを設定します。 この例では、復元モードはRESTORE_TIER_STANDARDです。
// RestoreTier.RESTORE_TIER_EXPEDITEDは、オブジェクトが12時間以内に復元されることを指定します。
// RestoreTier.RESTORE_TIER_STANDARDは、オブジェクトが48時間以内に復元されることを指定します。
RestoreJobParameters jobParameters = new RestoreJobParameters(RestoreTier.RESTORE_TIER_STANDARD);
// オブジェクトが復元された状態のままである期間 (日) を指定します。 デフォルト値は 1 です。 この例では、有効期間は2日です。
RestoreConfiguration configuration = new RestoreConfiguration(2, jobParameters);
// オブジェクトの復元要求を開始します。
ossClient.restoreObject(bucketName, objectName, configuration);
} 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();
}
}
}
}
参考資料
Archive、Cold Archive、およびDeep Cold Archiveオブジェクトの復元に使用される完全なサンプルコードについては、GitHubをご参照ください。
アーカイブ、コールドアーカイブ、およびディープコールドアーカイブオブジェクトを復元するために呼び出すことができるAPI操作の詳細については、「RestoreObject」をご参照ください。