https://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/create-deploy-python-flask.html
Flask 是一種適用於 Python 的開源 Web 應用程序框架。本教程將演練生成 Flask 應用程序並將其部署到 AWS Elastic Beanstalk 環境的過程。html
小節目錄python
本教程假設您對基本 Elastic Beanstalk 操做和 Elastic Beanstalk 控制檯有必定了解。若是尚不瞭解,請按照開始使用 Elastic Beanstalk 中的說明啓動您的第一個 Elastic Beanstalk 環境。nginx
爲了遵循本指南中的步驟,您須要命令行終端或外殼,以便運行命令。命令顯示在列表中,以提示符 ($) 和當前目錄名稱(若是有)開頭:web
~/eb-project$ this is a command
this is outputthis is a command
在 Linux 和 macOS 中,可以使用您首選的外殼程序和程序包管理器。在 Windows 10 中,您能夠安裝 Windows Subsystem for Linux,獲取 Ubuntu 和 Bash 與 Windows 集成的版本。sql
Flask 須要 Python 2.7 或 3.4 或更新版本。在本教程中,咱們使用 Python 3.6 和相應的 Elastic Beanstalk 平臺版本。按照設置 Python 開發環境上的說明操做來安裝 Python。數據庫
Flask 框架將做爲此教程的一部分安裝。django
本教程還使用 Elastic Beanstalk 命令行界面 (EB CLI)。有關安裝和配置 EB CLI 的詳細說明,請參閱使用安裝腳本安裝 EB CLI 和配置 EB CLI。flask
爲應用程序建立項目目錄和虛擬環境並安裝 Flask。windows
設置項目環境瀏覽器
建立項目目錄。
~$mkdir eb-flask
~$cd eb-flask
mkdir eb-flaskcd eb-flask
建立和激活名爲 virt
的虛擬環境:
~/eb-flask$virtualenv virt
~$source virt/bin/activate
(virt) ~/eb-flask$virtualenv virtsource virt/bin/activate
您將看到您的命令提示符前面帶有 (virt)
,代表您在虛擬環境中。在本教程的其他部分中使用虛擬環境。
使用 pip install
安裝 Flask:
(virt)~/eb-flask$ pip install flask==1.0.2
pip install flask==1.0.2
使用 pip freeze
查看已安裝的庫:
(virt)~/eb-flask$ pip freeze
click==6.7
Flask==1.0.2
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
Werkzeug==0.14.1pip freeze
此命令列出虛擬環境中已安裝的全部程序包。因爲您在虛擬環境中,所以不會顯示全局安裝的程序包,例如 EB CLI。
未來自 pip freeze
的輸出保存到名爲 requirements.txt
的文件中。
(virt)~/eb-flask$ pip freeze > requirements.txt
pip freeze > requirements.txt
在部署期間,此文件將指示 Elastic Beanstalk 安裝庫。有關更多信息,請參閱 要求文件。
接下來,建立您將使用 Elastic Beanstalk 部署的應用程序。咱們會建立一個「Hello World」RESTful Web 服務。
在此目錄中建立名爲 application.py
的新文本文件,包含如下內容:
例 ~/eb-flask/application.py
from flask import Flask # print a nice greeting. def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # some bits of text for the page. header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # EB looks for an 'application' callable by default. application = Flask(__name__) # add a rule for the index page. application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # add a rule when the page is accessed with a name appended to the site # URL. application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # 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()
本示例輸出根據訪問服務所使用的路徑而變化的自定義問候語。
注意
經過在運行應用程序以前添加 application.debug = True
,能夠啓用調試輸出以防出現問題。這對於開發工做來講是一個很好的作法,可是您應該在生產代碼中刪除調試語句,由於調試輸出會暴露應用程序的內部機制。
使用 application.py
做爲文件名並提供可調用的 application
對象(在本示例中爲 Flask 對象)可容許 Elastic Beanstalk 輕鬆地找到應用程序代碼。
將 application.py
與 Python 一塊兒運行:
(virt) ~/eb-flask$ python application.py
* Serving Flask app "application" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 313-155-123python application.py
在您的 Web 瀏覽器中打開 http://127.0.0.1:5000/
。您應該看到應用程序正在運行,而且會顯示索引頁面:
檢查服務器日誌,查看請求的輸出。您可鍵入 Ctrl+C,中止 Web 服務器並返回到虛擬環境。
若是您看到的是調試輸出,請修復錯誤並確保應用程序正在本地運行,而後再爲 Elastic Beanstalk 配置應用程序。
您已添加在 Elastic Beanstalk 上部署應用程序所需的所有內容。您的項目目錄如今應該以下所示:
~/eb-flask/
|-- virt |-- application.py `-- requirements.txt
不過,不須要 virt
文件夾便可使應用程序在 Elastic Beanstalk 上運行。在部署時,Elastic Beanstalk 會在服務器實例上建立新的虛擬環境,並安裝 requirements.txt
中列出的庫。要最大程度地減少部署期間上傳的源包的大小,請添加 .ebignore 文件,此文件告知 EB CLI 忽略 virt
文件夾。
例 ~/eb-flask/.ebignore
virt
下一步,您將建立應用程序環境並使用 Elastic Beanstalk 部署已配置的應用程序。
建立環境和部署 Flask 應用程序
使用 eb init 命令,初始化 EB CLI 存儲庫:
~/eb-flask$ eb init -p python-3.6 flask-tutorial --region us-east-2
Application flask-tutorial has been created.eb init -p python-3.6 flask-tutorial --region us-east-2
此命令建立名爲 flask-tutorial
的新應用程序,並配置本地存儲庫,以最新的 Python 3.6 平臺版本建立環境。
(可選) 再次運行 eb init,以配置默認密鑰對,以便鏈接到使用 SSH 運行應用程序的 EC2 實例:
~/eb-flask$eb init
Do you want to set up SSH for your instances? (y/n):y
Select a keypair. 1) my-keypair 2) [ Create new KeyPair ]eb inity
若是您已有密鑰對,請選擇一個密鑰對,或按提示建立新密鑰對。若是您沒有看到提示或須要之後更改設置,請運行 eb init -i。
使用 eb create 建立環境並將應用程序部署到此環境中:
~/eb-flask$ eb create flask-env
eb create flask-env
環境建立大約須要 5 分鐘,將建立如下資源:
EC2 實例 – 配置來在您選擇的平臺上運行 Web 應用程序的 Amazon Elastic Compute Cloud (Amazon EC2) 虛擬機。
各平臺運行一組特定軟件、配置文件和腳本以支持特定的語言版本、框架、Web 容器或其組合。大多數平臺使用 Apache 或 nginx 做爲 Web 應用程序前的反向代理,向其轉發請求、提供靜態資產以及生成訪問和錯誤日誌。
實例安全組 – 配置 Amazon EC2 安全組以容許端口 80 上的入站流量。經過此資源,HTTP 流量能夠從負載均衡器到達運行您的 Web 應用程序的 EC2 實例。默認狀況下,其餘端口不容許流量進入。
負載均衡器 – 配置來向運行您的應用程序的實例分配請求的 Elastic Load Balancing 負載均衡器。負載均衡器還使您無需將實例直接公開在 Internet 上。
負載均衡器安全組 – 配置 Amazon EC2 安全組以容許端口 80 上的入站流量。利用此資源,HTTP 流量可從 Internet 到達負載均衡器。默認狀況下,其餘端口不容許流量進入。
Auto Scaling 組 – 配置來在實例終止或不可用時替換實例的 Auto Scaling 組。
Amazon S3 存儲桶 – 使用 Elastic Beanstalk 時建立的源代碼、日誌和其餘項目的存儲位置。
Amazon CloudWatch 警報 – 用於監控環境中的實例負載的兩個 CloudWatch 警報,在負載太高或太低時觸發。警報觸發後,您的 Auto Scaling 組會擴展或收縮進行響應。
AWS CloudFormation 堆棧 – Elastic Beanstalk 使用 AWS CloudFormation 啓動您的環境中的資源並傳播配置更改。這些資源在您可經過 AWS CloudFormation 控制檯查看的模板中定義。
域名 – 一個域名,它如下面的形式路由到您的 Web 應用程序:subdomain
.region
.elasticbeanstalk.com。
全部這些資源均由 Elastic Beanstalk 管理。當您終止環境時,Elastic Beanstalk 會終止其包含的全部資源。
注意
Elastic Beanstalk 建立的 Amazon S3 存儲桶將在多個環境之間共享而且在環境終止期間不會被刪除。有關更多信息,請參閱 將 Elastic Beanstalk 用於 Amazon S3。
當環境建立過程完成時,請使用 eb open 打開網站:
~/eb-flask$ eb open
eb open
這將使用爲應用程序建立的域名打開一個瀏覽器窗口。您應該看到在本地建立和測試的相同 Flask 網站。
若是您沒有看到應用程序運行,或者出現錯誤消息,請查看排查部署問題以獲取有關如何肯定錯誤緣由的幫助。
若是您確實 看到應用程序在運行,那麼恭喜,您已使用 Elastic Beanstalk 部署了第一個 Flask 應用程序!
Elastic Beanstalk 使用完畢時,您能夠終止您的環境。Elastic Beanstalk 會終止與環境關聯的全部 AWS 資源,例如 Amazon EC2 實例、數據庫實例、負載均衡器、安全組和警報。
終止 Elastic Beanstalk 環境
導航到您的環境的管理頁。
選擇 Actions (操做),而後選擇 Terminate Environment (終止環境)。
在 Confirm Termination (確認終止) 對話框中,輸入環境名稱,而後選擇 Terminate (終止)。
利用 Elastic Beanstalk,能夠隨時爲您的應用程序輕鬆建立新環境。
或者,使用 EB CLI:
~/eb-flask$ eb terminate flask-env
eb terminate flask-env
有關 Flask 的更多信息,請訪問 flask.pocoo.org。
若是您但願嘗試其餘 Python Web 框架,請瀏覽向 Elastic Beanstalk 部署 Django 應用程序。