您好我正在使用boto将文件写入S3存储桶。我最近删除了一个EC2实例并启动了一个新的密钥对。我现在可以从存储桶中读取文件,但是当我尝试写入文件时,它会失败并且没有错误。我可以看到存储桶中的文件。这是代码:
conn = S3Connection()
bucket = conn.get_bucket('my-bucket')
keylist = bucket.list()
k = Key(bucket)
def upload_file():
# Get the name of the uploaded files
uploaded_files = request.files.getlist("file[]")
current_date = time.strftime("%x").split("/")[0]+time.strftime("%x").split("/")[1]+time.strftime("%x").split("/")[2]
filenames = []
for file in uploaded_files:
# Check if the file is one of the allowed types/extensions
if file and allowed_file(file.filename):
# Make the filename safe, remove unsupported chars
filename = secure_filename(file.filename)
file_contents = file.read()
k.key = current_date + "/" + file.filename
print "uploading files now "
k.set_contents_from_string(file_contents)
我不确定这是否是因为新密钥对。它确实提供了读访问权限。但写不会发生。是因为新的实例吗?仅供参考,它在localhost中完美运行。
答案 0 :(得分:0)
恕我直言,“它在localhost中完美运行”显示错误。
事实上: 对于S3连接,除非您定义无密码策略以允许特定主机写入数据,否则显而易见的方法是使用您的IAM凭证连接到S3。因此,在您的本地计算机中,它将起作用,因为boto3只是从您的aws访问文件夹中获取凭据和配置。
现在你有两个选择。
脏方法:创建另一个有权写入S3的IAM用户,将其设置在托管应用程序的EC2实例上
配置S3存储桶策略,添加限制以从EC2实例IP地址写入。因为VPC内的EC2可以通过端点直接连接到S3。在此处查看广告投放管理政策设置:http://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html