web-dev-qa-db-ja.com

boto3を使用してS3にファイルを直接書き込む方法はありますか?

非常に大きなファイルを処理するためのpythonスクリプトを記述しました(合計TB))、これをEC2インスタンスで実行します。その後、処理されたファイルをS3バケットに保存します。現在、スクリプトは最初にデータをディスクに保存してからS3にアップロードします。残念ながら、インスタンスが最初にディスクに書き込み、次にアップロードするのを待つ余分な時間がかかるため、これはかなりコストがかかります。 。

Boto3を使用してS3バケットに直接ファイルを書き込む方法はありますか?

編集:私の質問を明確にするために、私はメモリにオブジェクトがあるかどうかを尋ねています。最初にオブジェクトをディスクに保存せずに、そのオブジェクトを直接S3に書き込みます。

11
Richard Sun

これには put_object を使用できます。ファイルオブジェクトをボディとして渡すだけです。

例えば:

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'
)
9
Nicholas

S3 put_object 方法:

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