使用 CLI 将烧瓶应用程序部署到弹性 beanstalk 时出现 502 错误

Posted

技术标签:

【中文标题】使用 CLI 将烧瓶应用程序部署到弹性 beanstalk 时出现 502 错误【英文标题】:502 error deploying flask application to elastic beanstalk using CLI 【发布时间】:2020-12-11 14:42:53 【问题描述】:

在将非常简单的 Hello, World 类型的烧瓶应用程序部署到 AWS Elastic Beanstalk 时遇到问题。我正在使用 eb CLI 工具,安装在 Mac 上,带有 brew 和 python 3。下面的一些示例代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

@app.route('/<username>')
def hello_user(username):
    return f'Hello, username!'

# run the app.
if __name__ == "__main__":
    # Setting debug to True enables debug output. This line should be
    # removed before deploying a production app.
    
    app.debug = True
    app.run(port=8000)

它按预期在本地运行,我可以通过 CLI 部署它,但是当我访问应用程序时,我得到一个 502 Bad Gateway。

我试过了:

使用控制台中的 URL 和 eb open 访问应用程序。 在 URL 末尾指定端口 5000(默认烧瓶)和 8000。 使用app.run()app.run(port=8000) 没有成功。

我查看了文档,但找不到修复方法。如果人们有任何他们认为会有所帮助的建议或链接,我们将不胜感激。

【问题讨论】:

【参考方案1】:

您的应用程序应称为application 而不是app

以下是更正后的application.py 文件。我验证它可以使用Python 3.7 running on 64bit Amazon Linux 2/3.1.0 平台:

from flask import Flask

application = Flask(__name__)

@application.route('/')
def hello_world():
    return 'Hello, World!'

@application.route('/<username>')
def hello_user(username):
    return f'Hello, username!'

# run the app.
if __name__ == "__main__":
    # Setting debug to True enables debug output. This line should be
    # removed before deploying a production app.
    
    application.debug = True
    application.run(port=8000)

【讨论】:

太棒了,感谢@Marcin 的建议。我在文档中找不到该详细信息,但它确实解决了我的问题。 @Shay 没问题。遗憾的是,EB 文档现在有点混乱,因为其中一些仍在谈论 Amazon Linux 1,而新的 EB 平台正在使用 Amazon Linux 2。但很高兴它成功了 :-)

以上是关于使用 CLI 将烧瓶应用程序部署到弹性 beanstalk 时出现 502 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS 弹性 beantalk 上部署 Flask 应用程序

Flask 应用程序未在 AWS 弹性 beantalk 上部署

如何从 cli 本地连接到现有的弹性 beanstalk 实例?

重命名使用 AWS cli 生成的用于 beanstalk 部署的战争

将 node.js 应用程序部署到弹性 beanstalk(使用 express)

如何解决烧瓶应用程序的heroku部署错误