2016-05-06 1 views
2

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 ....

+1

[* "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) –

+0

@ Michael-sqlbot Je sais - et ce n'est pas le problème! –

+0

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. –

Répondre

1

Une politique de cycle de vie Amazon S3 peut être utilisé pour archiver des objets de S3 dans Amazon Glacier.

lors de l'archivage (comme indiqué par une classe de stockage de Glacier), l'objet encore « apparaît » comme dans S3 (il apparaît dans les listes, vous pouvez voir sa taille et métadonnées), mais le contenu de l'objet est maintenu dans Glacier. Par conséquent, le contenu ne peut pas être consulté.

Pour récupérer le contenu d'un objet dans S3 avec une classe de stockage de Glacier, vous devez RestoreObject pour récupérer le contenu dans S3. Cela prend 3-5 heures. Vous définissez également une durée pour combien de temps le contenu doit rester dans S3 (où sera stocké avec une classe de stockage de Reduced Redundancy). Une fois l'objet restauré, vous pouvez récupérer le contenu de l'objet.

+0

ok, donc si les données sont déplacées définitivement jours glacier ou non, tant que la politique de cycle de vie pousse vers Glacier à un moment donné toutes les données sont stockées dans Glacier tout de suite, et ce qui est affiché dans S3 est rien mais une référence à l'objet dans Glacier - correct? –

+0

Le "déménagement" à Glacier ne se produit pas immédiatement. Ça commence du jour au lendemain, mais j'ai aussi entendu des histoires de ça prendre quelques jours. Apparemment, l'avantage de facturation entre en vigueur immédiatement, même si les données n'ont pas encore été déplacées. Une fois que le contenu est déplacé vers Glacier, c'est comme vous le dites - S3 maintient une référence à l'objet dans Glacier. –