2016-05-06 32 views
2

S3バケットからオブジェクト(アーカイブ)をダウンロードし、データをローカルに抽出し、その上で操作を実行する(Java)ソフトウェアを書きました。 数日前に、S3の「フォルダ」内のすべてのオブジェクトのライフサイクルポリシーを作成後2日間自動的に氷河に移動するように設定しました。アーカイブする前にデータをDLして抽出する時間があります。ただし、プログラムでデータにアクセスする際に、Amazon Webサービスがエラーにストレージクラス氷河でS3オブジェクトにアクセスする

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: The operation is not valid for the object's storage class 

を投げる私は、これは、オブジェクトのストレージクラスは氷河に更新されているという事実によるものであると仮定します。 は、これまでのところ、私はS3のデータにアクセスするには、次のコードを使用しています

public static void downloadObjectFromBucket(String bucketName, String pathToObject, String objectName) throws IOException{ 
    AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());   
    S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, pathToObject)); 
    InputStream reader = new BufferedInputStream(object.getObjectContent()); 
    File file = new File(objectName);  
    OutputStream writer = new BufferedOutputStream(new FileOutputStream(file)); 
    int read = -1; 
     while ((read = reader.read()) != -1) { 
      writer.write(read); 
     } 
    writer.flush(); 
    writer.close(); 
    reader.close(); 
} 

私は自分のコードを更新したり、AWSコンソールでいくつかの設定を変更する必要がありますか?オブジェクトがまだS3にあり、すべてのS3オブジェクトにアクセスするのは数日前まで驚くほど上手く動作していたので、私には明らかではありません。

+1

[* "リアルタイムでアクセスする必要のないオブジェクトの場合、Amazon S3にはGLACIERストレージクラスも用意されています。" *](http://docs.aws.amazon.com/AmazonS3/latest/dev/ object-archival.html) –

+0

@ Michael-sqlbot私は知っています - それは問題ではありません! –

+0

あなたがそのリンクをたどったとすると、それが問題ではないと言う理由はわかりません。オブジェクトが 'GLACIER'ストレージクラスを持っているときにリアルタイムでアクセスすることはできません。試してみるとエラーになります。また、 "オブジェクトはまだS3にあるので" * ...その意味が分からないのは、 'GLACIER'ストレージクラスに遷移したオブジェクトがS3オブジェクトであり、まだS3コンソールに表示されていますが、そのペイロードがS3の内部バッキングストアの代わりに氷河。 –

答えて

1

Amazon S3 ライフサイクルポリシー S3からAmazon Glacierにオブジェクトをアーカイブするために使用することができます。

アーカイブされた場合(ストレージクラスGlacierで示されるように)、オブジェクトはまだS3に表示されます(リストに表示されます。サイズとメタデータは表示されます)。オブジェクトの内容が保持されます氷河で。したがって、コンテンツにアクセスすることはできません。

S3のオブジェクトの内容をストレージクラスGlacierで取得するには、内容をS3に取得するためにRestoreObjectが必要です。これには3〜5時間かかります。また、コンテンツがS3に残る期間(期間はReduced Redundancy)を指定します。オブジェクトが復元されると、オブジェクトの内容を取得できます。

+0

okだから、データは氷河に確実に氷河に移動したかどうかにかかわらず、ライフサイクルポリシーがある時点でそれを氷河に押し込む限り、すべてのデータは氷河に直ちに格納され、S3に表示されるものは短くない氷河のオブジェクトへの参照 - 正しい? –

+0

氷河への「移動」はすぐには起こりません。それは一晩で始まりますが、私はまた数日かかることについての話も聞いてきました。明らかに、データがまだ移動していなくても、請求の恩恵は即座に有効になります。コンテンツが氷河に移されると、それはあなたの言う通りです - S3は氷河のオブジェクトへの参照を維持します。 –

関連する問題