如何在 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 保留用户上传的图像文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CloudFormation 模板中为 Elastic Beanstalk 启动配置指定安全组?

如何在 Elastic Beanstalk Cloud Formation 脚本中强制 ELB 配置

如何在 Elastic Beanstalk 配置文件中为 ALB 设置 HTTPS 重定向

如何在 Elastic Beanstalk 配置文件中为 ALB 设置 HTTPS 重定向

如何在 AWS Elastic Beanstalk 上修改 Nginx 配置

如何在没有负载均衡器的情况下使用配置文件在 Amazon Elastic Beanstalk 实例中配置 SSL?