J'ai écrit un logiciel (java) qui télécharge des objets (archives) à partir d'un compartiment S3, extrait les données localement et y effectue des opérations. Il y a quelques jours, j'ai mis la politique de cycle de vie de tous les objets dans le "dossier" dans S3 à déplacer automatiquement sur glacier 2 jours après la création, de sorte que j'ai le temps de DL et extraire les données avant qu'il soit archivé. Cependant, lors de l'accès aux données par programmation, Amazon Web Services renvoie une erreurAccéder aux objets S3 avec la classe de stockage Glacier
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: The operation is not valid for the object's storage class
Je suppose que cela est dû au fait que les classes de stockage des objets ont été mis à jour Glacier. Jusqu'à présent, j'ont utilisé le code ci-dessous pour accéder à mes données 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();
}
Dois-je mettre à jour mon code ou modifier certains paramètres dans la console AWS? On ne sait pas pour moi, puisque les objets sont encore dans S3 et l'accès à tous les objets S3 a travaillé à merveille jusqu'à il y a quelques jours où je me suis adapté les politiques du cycle de vie ....
[* "Pour les objets auxquels vous n'avez pas besoin d'accéder en temps réel, Amazon S3 propose également la classe de stockage GLACIER." *] (Http://docs.aws.amazon.com/AmazonS3/latest/dev/ object-archive.html) –
@ Michael-sqlbot Je sais - et ce n'est pas le problème! –
En supposant que vous avez suivi ce lien, je ne comprends pas pourquoi vous diriez que ce n'est pas le problème. Les objets ne sont pas accessibles en temps réel quand ils ont la classe de stockage 'GLACIER', et c'est l'erreur que vous obtenez si vous essayez. En outre, * "puisque les objets sont toujours en S3" * ... ne sais pas ce que cela signifie, car les objets transférés dans la classe de stockage 'GLACIER' sont toujours des objets S3, toujours visibles dans la console S3, mais leur charge utile est stockée dans Glacier au lieu du magasin de soutien interne de S3. –