web-dev-qa-db-fra.com

Un moyen d'écrire des fichiers directement sur S3 en utilisant boto3?

J'ai écrit un script python pour traiter de très gros fichiers (peu TB au total), que je vais exécuter sur une instance EC2. Ensuite, je veux stocker les fichiers traités dans un compartiment S3. Actuellement, mon script enregistre d’abord les données sur le disque, puis les télécharge sur S3. Malheureusement, cela coûtera très cher compte tenu du temps supplémentaire que cela prend à attendre que l'instance commence par écrire sur le disque puis à l'envoyer.

Est-il possible d'utiliser boto3 pour écrire des fichiers directement dans un compartiment S3?

Edit: pour clarifier ma question, je demande si j’ai un objet en mémoire, écrivant directement cet objet sur S3 sans le sauvegarder au préalable sur le disque.

5
Richard Sun

Vous pouvez utiliser put_object pour cela. Il suffit de transmettre votre objet fichier en tant que corps.

Par exemple:

import boto3

client = boto3.client('s3')
response = client.put_object( 
    Bucket='your-s3-bucket-name',
    Body='bytes or seekable file-like object',
    Key='Object key for which the PUT operation was initiated'
)
6
Nicholas

Cela fonctionne avec la méthode S3 put_object:

key = 'filename'
response = s3.put_object(Bucket='Bucket_Name',
                         Body=json_data,
                         Key=key)
0
Abdul Rehman