繁体   English   中英

通过与S3交互的Elastic Beanstalk部署Flask应用

[英]Deploying Flask app to via Elastic Beanstalk which interacts with S3

我有一个Flask应用,看起来像这样:

from flask import Flask
import boto3

application = Flask(__name__)

@application.route("/")
def home():
    return "Server successfully loaded"

@application.route("/app")
def frontend_from_aws():
    s3 = boto3.resource("s3")
    frontend = s3.Object(bucket_name = "my_bucket", key = "frontend.html")
    return frontend.get()["Body"].read()

if __name__ == "__main__":
    application.debug = True
    application.run()

当我在本地测试时,一切工作都很好,但是当我将应用程序部署到Elastic Beanstalk时,第二个端点给出了内部服务器错误:

服务器遇到内部错误,无法完成您的请求。 服务器超载或应用程序中有错误。

尽管我不确定自己会在哪里查看,但日志中没有发现任何令人震惊的内容。 有任何想法吗?


更新:作为一项测试,我将frontend.html移到了另一个存储桶,并相应地修改了“ / app”终结点,并且神秘地工作正常。 因此,显然这与原始存储桶的设置有关。 有人知道正确的设置是什么吗?

您是否像在本地计算机上一样在Elastc Beanstalk实例上设置了AWS凭证(即,在〜/ .aws / credentials中)?

我找到了一个快速而肮脏的解决方案:IAM策略(AWS控制台->身份和访问管理->策略)。 有一个名为AmazonS3FullAccess的现有策略,在将aws-elasticbeanstalk-ec2-role附加到该策略后,我的应用程序便可以随意读写S3。 我猜想通过创建自定义角色和策略可以实现更细微的访问管理,但这对我而言已经足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM