【问题标题】:Any way to write files DIRECTLY to S3 using boto3?有什么方法可以使用 boto3 将文件直接写入 S3?
【发布时间】:2018-07-07 14:13:07
【问题描述】:

我编写了一个 python 脚本来处理非常大的文件(总共几 TB),我将在 EC2 实例上运行它。之后,我想将处理后的文件存储在 S3 存储桶中。目前,我的脚本首先将数据保存到磁盘,然后将其上传到 S3。不幸的是,考虑到等待实例首先写入磁盘然后上传所花费的额外时间,这将非常昂贵。

有没有办法使用 boto3 将文件直接写入 S3 存储桶?

编辑:为了澄清我的问题,我问我是否在内存中有一个对象,直接将该对象写入 S3,而无需先将对象保存到磁盘上。

【问题讨论】:

    标签: python amazon-web-services amazon-s3 boto3


    【解决方案1】:

    您可以为此使用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'
    )
    

    【讨论】:

    • 这正是我所需要的。对于任何想知道的人,我的脚本现在将首先使用 pickle.dumps 创建对象的字节表示。然后,我如上所述使用 put_object 直接写入 S3。要稍后检索对象,请使用 get_object 从 S3 获取并使用 pickle.loads 来取消它。
    • 关键是什么?
    • @Jwan622 那是你的文件名
    • 在仍然使用高级 API 的情况下是否可行?即boto3.transfer?
    【解决方案2】:

    它使用 S3 put_object 方法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多