如何无需本地中转直接将网站文件下载至S3存储桶?
直接将外部100GB数据集传输到AWS S3的方案
没问题!完全可以实现把100GB的数据集直接从外部网站传到S3,不用先存本地折腾~不过S3本身没有原生的「从外部URL拉取并存储」功能,所以最常用且低成本的方式是借助EC2实例中转(毕竟EC2和同区域S3之间的传输免费,而且带宽拉满的话速度很快)。下面是我整理的实操步骤:
一、前期准备
- 确保你有AWS账号,且拥有创建EC2实例、操作目标S3桶的权限
- 选和目标S3桶同区域的EC2实例(划重点!跨区域不仅费钱,速度还慢)
- 实例类型不用太夸张,
t3.large这类中等配置就够应付100GB的传输,别选微型实例就行
二、EC2实例操作步骤
创建并连接实例
- 启动EC2时选常用的镜像,比如Amazon Linux 2或Ubuntu,默认都带基础工具
- 安全组配置:允许出站的HTTP/HTTPS(要能访问外部数据集网站),同时允许你用SSH连接实例
- 用SSH工具(比如终端或Putty)连上你的EC2实例
安装必备工具
- 大部分系统默认带
wget/curl,如果没有就装:- Amazon Linux 2/CentOS:
sudo yum install wget curl -y - Ubuntu/Debian:
sudo apt update && sudo apt install wget curl -y
- Amazon Linux 2/CentOS:
- 装AWS CLI(用来和S3交互):
- 系统包管理器就能装,比如Amazon Linux 2用
sudo yum install aws-cli -y,Ubuntu用sudo apt install awscli -y
- 系统包管理器就能装,比如Amazon Linux 2用
- 配置AWS CLI:运行
aws configure,按提示输入你的Access Key ID、Secret Access Key、默认区域(和S3桶一致)、输出格式选json就行
- 大部分系统默认带
传输数据集到S3(两种方式)
- 方式一:先下载到EC2本地再上传(适合需要先验证文件完整性的情况)
- 下载数据集:
wget https://你的数据集URL(替换成实际的下载链接) - 上传到S3:
aws s3 cp 文件名.zip s3://你的桶名/存储路径/
- 下载数据集:
- 方式二:流式传输(强烈推荐!)
- 不用占EC2本地磁盘空间,直接把下载的数据流管道到S3,完美适配大文件:
这里的wget -qO- https://你的数据集URL | aws s3 cp - s3://你的桶名/存储路径/文件名.zip-代表从标准输入读取数据,全程不用落地到本地磁盘,省空间还快
- 不用占EC2本地磁盘空间,直接把下载的数据流管道到S3,完美适配大文件:
- 方式一:先下载到EC2本地再上传(适合需要先验证文件完整性的情况)
验证传输结果
- 传完后用
aws s3 ls s3://你的桶名/存储路径/检查文件是否存在 - 如果源站提供了文件哈希值,可以用
aws s3 cp s3://你的桶名/存储路径/文件名.zip - | md5sum(或者对应哈希算法)对比,确保文件没损坏
- 传完后用
清理资源(别忘!)
- 确认文件上传成功后,要么停止EC2实例(以后还能用),要么直接终止(不用了就删,避免不必要的扣费)
- 如果用了方式一,记得删掉EC2本地的下载文件:
rm 文件名.zip
三、其他可选方案
要是不想用EC2,也可以看看AWS DataSync,但DataSync更适合迁移现有存储系统的数据,对于从外部URL拉取的场景,EC2还是最灵活、成本最低的选择。
内容的提问来源于stack exchange,提问作者awrd2019
相关产品推荐
相关产品推荐

