[英]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.