【问题标题】:downloading a file from Internet into S3 bucket从 Internet 下载文件到 S3 存储桶
【发布时间】:2013-10-15 00:28:50
【问题描述】:

我想直接从 Internet 上抓取一个文件并将其粘贴到 S3 存储桶中,然后将其复制到 PIG 集群中。由于文件的大小和我不太好的互联网连接,先将文件下载到我的电脑上,然后再上传到亚马逊可能不是一种选择。

我有什么办法可以抓取互联网文件并将其直接粘贴到 S3 中?

【问题讨论】:

标签: amazon-web-services amazon-s3


【解决方案1】:

通过curl 下载数据并将内容直接传送到S3。数据直接流式传输到 S3,而不是存储在本地,避免了任何内存问题。

curl "https://download-link-address/" | aws s3 cp - s3://aws-bucket/data-file

如上所述,如果本地计算机上的下载速度太慢,请启动 EC2 实例 ssh 并在那里执行上述命令。

【讨论】:

  • 如果文件是文本文件,使用:curl -s "url" |cat| aws s3 cp - "s3://..."
  • 如果您的文件大于 50GB,请将 --expected-size <size_in_bytes> 添加到末尾。来自文档:“在这些情况下未能包含此参数可能会导致上传失败,因为上传的部分太多。”
【解决方案2】:

对于经验不足的任何人(如我),以下是通过 EC2 进行的更详细的流程描述:

  1. 在与目标 S3 存储桶相同的区域中启动 Amazon EC2 实例。最小的可用(默认 Amazon Linux)实例应该没问题,但请确保为其提供足够的存储空间来保存您的文件。如果您需要高于 ~20MB/s 的传输速度,请考虑选择具有更大管道的实例。

  2. 启动与新 EC2 实例的 SSH 连接,然后下载文件,例如使用 wget。 (例如,要通过 FTP 下载整个目录,您可以使用wget -r ftp://name:passwd@ftp.com/somedir/。)

  3. 使用 AWS CLI(请参阅 Amazon's documentation)将文件上传到您的 S3 存储桶。例如,aws s3 cp myfolder s3://mybucket/myfolder --recursive(对于整个目录)。 (在此命令生效之前,您需要将 S3 安全凭证添加到配置文件中,如 Amazon 文档中所述。)

  4. 终止/销毁您的 EC2 实例。

【讨论】:

    【解决方案3】:

    [2017 年编辑] 我在 2013 年给出了原始答案。今天我建议使用 AWS Lambda 下载文件并将其放在 S3 上。这是想要的效果 - 将对象放置在 S3 上而不涉及服务器。

    [原答案] 不能直接做。

    为什么不使用 EC2 实例而不是您的本地 PC?同区域从EC2到S3的上传速度非常好。

    关于从/到 s3 的流读/写,我使用 python 的smart_open

    【讨论】:

    • 我认为这是我必须要做的。我查看了文档,可能会使用 python 和 boto。只需要弄清楚整个 s3 关键思想以及文件是如何引用的......
    • 这正是我所做的。原来用 boto 和 python 上传文件非常容易。谢谢!
    • 你能解释一下或给出一个简短的代码示例如何在不真正“下载”的情况下“流式传输”它。是不是类似于 writeFileOutputBufferToS3()?
    • 不,我认为最后一句话是错误的。答案是不支持它(直接下载到 S3)。 EC2 建议在这种情况下很好,但您必须下载然后上传文件(尽管您不一定要创建本地文件)。
    【解决方案4】:

    您可以使用 Python 将文件从 Internet 流式传输到 AWS S3。

    s3=boto3.resource('s3')
    http=urllib3.PoolManager()
    
    urllib.request.urlopen('<Internet_URL>')   #Provide URL
    s3.meta.client.upload_fileobj(http.request('GET', 'Internet_URL>', preload_content=False), s3Bucket, key, 
        ExtraArgs={'ServerSideEncryption':'aws:kms','SSEKMSKeyId':'<alias_name>'})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2017-02-16
      • 2019-09-06
      • 1970-01-01
      • 2019-02-16
      • 2015-11-02
      • 2019-05-30
      相关资源
      最近更新 更多