2017-04-10 2 views
1

Je dois télécharger un fichier plus volumineux vers le valut d'AWS Glacier. En raison de la taille, je ne suis pas en mesure de le faire en une seule requête, j'ai donc besoin de le diviser en parties plus petites et d'utiliser le téléchargement en plusieurs parties.Téléchargement en plusieurs parties de haut niveau avec Boto3 (Python) vers AWS Glacier?

Est-ce que Boto3 contient une méthode qui prend un gros fichier, le divise et télécharge ses parties une par une? Comme je peux voir le client Java a une telle méthode (extrait de docs AWS):

L'API de haut niveau fournit une méthode que vous pouvez utiliser pour télécharger les archives de toute taille. Selon le fichier que vous téléchargez, la méthode télécharge une archive en une seule opération ou utilise le support de téléchargement multipart dans Amazon Glacier pour télécharger l'archive en plusieurs parties.

J'ai essayé d'utiliser:

boto3.client(...).upload_archive(...) 

mais est ne se fend pas un fichier et je reçois une erreur.

Existe-t-il un autre moyen de le faire sans implémenter tout ce matériel de bas niveau (fractionnement du fichier, envoi de plusieurs requêtes, fin du téléchargement ...)?

+0

Veuillez rechercher le paramètre de configuration upload_file()/upload_fileobj() qui utilise s3transfer config http://boto3.readthedocs.io/en/latest/reference/customizations/s3.html#boto3.s3.transfer.TransferConfig – mootmoot

+0

@mootmoot Je dois l'envoyer à AWS Glacier, pas à AWS S3. – lenrok258

+0

Le module glacier n'utilise pas le transfert s3. Vous pouvez vous poser une question/demande ici: https://github.com/boto/boto3 Bien que vous pouvez utiliser S3 comme solution de rechange. i.e utilise le téléchargement s3 et définit le transit du cycle de vie vers Glacier en 1 jour. – mootmoot

Répondre

-1

Peut-être que c'est ce que vous cherchez? https://boto3.readthedocs.io/en/latest/reference/services/glacier.html#Glacier.Client.upload_multipart_part

Je vais ajouter quelques informations pertinentes à partir des docs.

upload_multipart_part (** kwargs)

Cette opération télécharge une partie d'une archive. Vous pouvez télécharger des pièces d'archives dans n'importe quel ordre. Vous pouvez également les télécharger en parallèle. Vous pouvez télécharger jusqu'à 10 000 pièces pour un téléchargement en plusieurs parties.

Amazon Glacier rejette votre part téléversement demande si l'une des conditions suivantes est remplie:

  • SHA256 hachage arbre ne correspond pas à faire en sorte que les données de la pièce n'est pas corrompu dans la transmission, vous calculez un arbre SHA256 hash de la pièce et incluez-le dans votre demande. Lors de la réception des données de pièce, Amazon Glacier calcule également un hachage d'arbre SHA256. Si ces valeurs de hachage ne correspondent pas , l'opération échoue.
  • La taille de la pièce ne correspond pas La taille de chaque pièce à l'exception de la dernière doit correspondre à la taille spécifiée dans la demande InitiateMultipartUpload correspondante. La taille de la dernière pièce doit être de la même taille ou inférieure à la taille spécifiée.
  • La plage ne s'aligne pas La valeur de la plage d'octets dans la demande n'est pas alignée avec la taille de pièce spécifiée dans la demande d'initialisation correspondante . Par exemple, si vous spécifiez une taille de pièce de 4194304 octets (4 Mo), puis 0 à 4194303 octets (4 Mo - 1) et 4194304 (4 Mo) à 8388607 (8 Mo - 1) sont des plages de pièces valides. Toutefois, si vous définissez une valeur de plage de de 2 Mo à 6 Mo, la plage n'est pas alignée sur la taille de la pièce et le téléchargement échouera.

Voici le syntx demande

response = client.upload_multipart_part(
vaultName='string', 
uploadId='string', 
range='string', 
body=b'bytes'|file 

)

et les descriptions des paramètres

accountid (string)

La valeur AccountId est le compte AWS ID du compte qui possède le coffre-fort. Vous pouvez spécifier un ID de compte AWS ou éventuellement un seul '-' (trait d'union), auquel cas Amazon Glacier utilise l'ID de compte AWS associé aux informations d'identification utilisées pour signer la demande. Si vous utilisez un identifiant de compte, n'incluez aucun trait d'union ('-') dans l'ID.

VAULTNAME (string) [Obligatoire]

Le nom de la voûte.

uploadId (string) [Obligatoire]

L'ID de téléchargement du téléchargement multipart.

somme de contrôle (string)

Le hachage d'arbre de SHA256 des données en cours de téléchargement.

gamme (string)

identifie la plage d'octets dans les archives assemblé qui seront téléchargées dans cette partie. Amazon Glacier utilise ces informations pour assembler l'archive dans la séquence appropriée. Le format de cet en-tête est conforme à la RFC 2616. Un exemple d'en-tête est Content-Range: bytes 0-4194303/*.

corps (octets ou objet de type fichier adressable)

Les données à télécharger.

+0

Envisagez d'ajouter des informations ici plutôt qu'un simple lien. Si l'adresse Web change, cela gardera la question utile. – user3486184

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [De l'avis] (/ review/low-quality-posts/16926968) – whrrgarbl