boto s3写不起作用,但读取文件有效

时间:2016-03-31 22:10:32

标签: amazon-s3 boto

您好我正在使用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中完美运行。

1 个答案:

答案 0 :(得分:0)

恕我直言,“它在localhost中完美运行”显示错误。

事实上: 对于S3连接,除非您定义无密码策略以允许特定主机写入数据,否则显而易见的方法是使用您的IAM凭证连接到S3。因此,在您的本地计算机中,它将起作用,因为boto3只是从您的aws访问文件夹中获取凭据和配置。

现在你有两个选择。

  1. 脏方法:创建另一个有权写入S3的IAM用户,将其设置在托管应用程序的EC2实例上

  2. 配置S3存储桶策略,添加限制以从EC2实例IP地址写入。因为VPC内的EC2可以通过端点直接连接到S3。在此处查看广告投放管理政策设置:http://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html