如何从EC2实例无SSH上传文件至S3?附Mac端上传示例
从Mac上传文件到S3及EC2直接传S3的实用方案
首先,你贴的Mac上传S3的代码是完全可行的,我帮你整理成更规范的格式:
import boto3 s3 = boto3.resource('s3', region_name="us-west-1") s3.meta.client.upload_file('/User/gantao/amz.jpg', 'gantao_created', 'amz.jpg')
当然有无需SSH连接EC2实例,直接让EC2上传文件到S3的方法!给你分享几种常用且安全的方案:
- 通过EC2用户数据自动执行上传:在启动EC2实例时,配置用户数据(User Data),让实例启动后自动运行上传命令。比如用AWS CLI的话,用户数据可以这样写:
#!/bin/bash # Amazon Linux 2默认预装AWS CLI,其他系统可自行添加安装命令 aws s3 cp /path/to/ec2/local/file s3://your-target-bucket/desired-path/
⚠️ 关键提醒:一定要给EC2实例绑定IAM角色,并赋予该角色s3:PutObject(必要时加上s3:ListBucket)权限,这样实例无需存储敏感的AWS Access Key就能访问S3,完全符合AWS安全最佳实践。
- 在EC2上部署Python脚本自动运行:和你Mac上的逻辑类似,把上传脚本放在EC2实例里,通过用户数据设置成启动时执行,或者配置成systemd服务实现定时/触发式运行。示例代码:
import boto3 # 绑定IAM角色后无需手动配置凭证,boto3会自动获取实例权限 s3 = boto3.resource('s3', region_name='us-west-1') s3.meta.client.upload_file('/ec2/local/path/your-file.jpg', 'your-bucket-name', 'uploaded-file.jpg')
利用SSM Run Command远程执行上传:如果你不想预先在EC2里配置脚本,也可以用AWS Systems Manager的Run Command功能,直接在AWS控制台或通过CLI发送上传命令到EC2实例,全程无需SSH连接。前提是EC2实例已安装SSM Agent并有权限接收SSM命令。
开启S3 Transfer Acceleration优化速度:如果EC2实例和S3桶不在同一区域,开启S3的Transfer Acceleration功能后,上传时指定加速端点就能提升传输速率。比如AWS CLI命令可以加上
--endpoint-url https://your-bucket.s3-accelerate.amazonaws.com。
内容的提问来源于stack exchange,提问作者Joey Kim
相关产品推荐
相关产品推荐

