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オブジェクトにアクセスするのは数日前まで驚くほど上手く動作していたので、私には明らかではありません。
[* "リアルタイムでアクセスする必要のないオブジェクトの場合、Amazon S3にはGLACIERストレージクラスも用意されています。" *](http://docs.aws.amazon.com/AmazonS3/latest/dev/ object-archival.html) –
@ Michael-sqlbot私は知っています - それは問題ではありません! –
あなたがそのリンクをたどったとすると、それが問題ではないと言う理由はわかりません。オブジェクトが 'GLACIER'ストレージクラスを持っているときにリアルタイムでアクセスすることはできません。試してみるとエラーになります。また、 "オブジェクトはまだS3にあるので" * ...その意味が分からないのは、 'GLACIER'ストレージクラスに遷移したオブジェクトがS3オブジェクトであり、まだS3コンソールに表示されていますが、そのペイロードがS3の内部バッキングストアの代わりに氷河。 –