簡體   English   中英

如何在AWS Elastic Beanstalk上部署Flask與運行腳本不同?

[英]How is Deploying Flask on AWS Elastic Beanstalk different from running script?

在ec2實例上部署Flask應用程序(換句話說,在任何計算機上運行腳本)和通過AWS Elastic Beanstalk部署Flask應用程序有什么區別? Flask 部署文檔說:

雖然重量輕且易於使用,但Flask的內置服務器不適合生產,因為它不能很好地擴展,默認情況下一次只能提供一個請求。 此處記錄了可用於在生產中正確運行Flask的一些選項。

他們推薦的部署選項之一是AWS Elastic Beanstalk。 然而,當我閱讀亞馬遜關於如何部署Flask應用程序的解釋時,似乎他們正在使用與Flask內置的完全相同的服務器應用程序,例如,它是單線程的,因此無法處理同時發出的請求。 據我所知,Elastic Beanstalk允許您部署多個副本,但它似乎仍然使用內置的Flask服務器應用程序。 我錯過了什么?

TL; DR完全不同 - Elastic Beanstalk 確實使用了比Flask開發服務器更好的WSGI運行器!

然而,當我閱讀亞馬遜關於如何部署Flask應用程序的解釋時,他們似乎正在使用與Flask內置的完全相同的服務器應用程序

幾乎,但不完全。

您可以通過自行刪除run-with-built-in-server部分來確認不是這種情況 - 即示例中的以下內容:

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()

你將無法使用python application.py在本地運行它,但它仍然可以在EB上運行!

EB Python平台使用自己的WSGI服務器(帶有mod_wsgi的Apache,我看過的最后一個)和一些假設/配置來查找你的WSGI可調用:

為Elastic Beanstalk配置Python項目

默認情況下,Elastic Beanstalk會查找名為application.py的文件來啟動您的應用程序。 如果在您創建的Python項目中不存在這種情況,則需要對應用程序的環境進行一些調整。

如果你查看了aws:elasticbeanstalk:container:python命名空間的文檔,你會看到你可以配置它來尋找你的WSGI應用程序的其他地方:

WSGIPath :包含WSGI應用程序的文件。 此文件必須具有“應用程序”可調用。 默認值: application.py

彈性計算資源(AWS和其他)通常允許動態負載平衡,並在需要時啟動更多計算資源。

如果部署在單個ec2實例上,並且此實例達到容量,則用戶將遇到性能不佳的情況。 如果彈性部署,則會動態添加新資源,以確保順暢的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM