如何在 Elastic Beanstalk 中配置 Flask 应用程序以使用 S3 保留用户上传的图像文件

Posted

技术标签:

【中文标题】如何在 Elastic Beanstalk 中配置 Flask 应用程序以使用 S3 保留用户上传的图像文件【英文标题】:How to configure Flask app in Elastic Beanstalk to retain user uploaded image files using S3 【发布时间】:2021-05-05 06:27:33 【问题描述】:

我有一个 Flask 应用程序,它具有图像上传功能,例如用户个人资料照片和用户为列表上传的照片。该应用程序位于 Elastic Beanstalk 上。

我注意到,每当我在进行更改后运行“eb deploy”命令重新部署时,它都会清除用户上传的图像文件并且链接已损坏。我假设这是因为它重新启动服务器并删除了文件...我假设我需要定义另一个位置来存储这些文件,以便在重新部署时不会清除它们?

如何创建 S3 存储桶并将其与烧瓶应用程序连接,以便用户上传的文件保存在存储桶中,即使在我重新启动服务器/重新部署后仍保持不变。如果这不是正确的方法,那是什么?

【问题讨论】:

【参考方案1】:

我假设这是因为它会重新启动服务器并删除文件。

没错。当您进行新部署时,EB 将从 /var/app/current 中删除您当前的应用程序并替换为新的应用程序。

如果这不是正确的方法,那是什么?

这是正确的方法。为此,您需要三件事:

    为图像创建的存储桶。 S3 权限已添加到您的 EB instance role,以便您的应用程序可以写入/读取存储桶中的图像。 修改了 Flask 应用以使用 boto3 与存储桶进行交互。

根据您希望如何让用户看到您的图片,您可以让图片公开可读,或通过pre-signed S3 url 限制其可访问性。

更新

读取/写入存储桶的 IAM 策略:


    "Version": "2012-10-17",
    "Statement": [
        
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::<your-bucket-name>/*"
        
    ]

【讨论】:

如何配置图片上传权限?我看到的大部分内容都是日志? @sn22 我用可以添加到实例角色的示例策略更新了答案。 知道了。非常感谢!!

以上是关于如何在 Elastic Beanstalk 中配置 Flask 应用程序以使用 S3 保留用户上传的图像文件的主要内容,如果未能解决你的问题,请参考以下文章