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