使用boto3(python)将文件从s3下载到本地计算机

时间:2019-12-17 02:18:40

标签: python amazon-s3 amazon-ec2 boto3

我正在尝试使用python脚本自动将文件从AWS s3下载到我的本地计算机。 python脚本本身托管在ubuntu(AWS ec2实例)上,因此无法识别本地计算机上的目录。

这是我的代码:

import os
import boto3
from boto3.session import Session
print("this script downloads the file from s3 to local machine")

s3 = boto3.resource('s3')

BUCKET_NAME = 'sfbucket.myBucket'
KEY = 'sf_events.json'

s3.Bucket(BUCKET_NAME).download_file(KEY, '/Users/Documents/my_file.json')

print('end')

但是,这给了我以下错误:

FileNotFoundError: [Errno 2] No such file or directory: '/Users/Documents/my_file.json.CDC5FEf4'

谁能告诉我我在做什么错?如果我将输出目录替换为/home/ubuntu/,则可以正常工作,但是我希望文件在本地计算机上。预先感谢。

2 个答案:

答案 0 :(得分:1)

该脚本必须在您的本地Windows计算机上运行,​​而不是在EC2实例上。

或者,您可以简单地使用aws cli

aws s3 cp s3://sfbucket.myBucket/sf_events.json /Users/Documents/my_file.json

答案 1 :(得分:1)

当您尝试使用EC2实例下载文件时,本机不知道您的本地路径/Users/Documents/my_file.json

您有两个选择:

  1. 直接在本地计算机上运行此脚本。 在这种情况下,您必须在本地计算机上运行此脚本,并确保您有权访问此存储桶。

  2. 在EC2实例中运行此脚本并复制。 在这种情况下,您必须将文件下载到/home/ubuntu/的某个位置,然后在本地计算机中从EC2复制。 您可以使用[SCP] [1]

您可以在本地计算机上安装SCP服务器,但问题是您的本地计算机可能没有私有IP,因此每次更改本地IP时都必须更新脚本。也许您应该考虑直接在EC2实例上对该文件执行任何操作,或者如果它是真正的手动操作,也许通过电子邮件发送?