使用 Elastic Beanstalk Python 平台 - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Elastic Beanstalk Python 平台

AWS Elastic Beanstalk Python 平台是一組 Python web 應用程式的平台版本,可以使用 WSGI 在代理伺服器後面執行。每個平台分支對應到一個 Python 版本,如 Python 3.8。

從 Amazon Linux 2 平台分支開始,Elastic Beanstalk 提供 Gunicorn 作為預設 WSGI 伺服器。

您可以新增 Procfile 到原始碼套件中,為您的應用程式指定和設定 WSGI 伺服器。如需詳細資訊,請參閱使用 Procfile 設定 WSGI 伺服器

您可以使用由 Pipenv 建立的 PipfilePipfile.lock 檔案來指定 Python 套件相依性和其他要求。如需有關指定相依性的詳細資訊,請參閱使用要求檔案指定相依性

Elastic Beanstalk 提供組態選項,您可用其於 Elastic Beanstalk 環境中自訂 EC2 執行個體上執行的軟體。您可以設定應用程式所需的環境變數,啟用至 Amazon S3 的日誌輪換,並在應用程式來源中,將包含靜態檔案的資料夾映射到代理伺服器提供的路徑。

Elastic Beanstalk 主控台中提供了修改正在執行環境組態的組態選項。要避免在終止環境的組態時遺失組態,您可以使用已儲存組態來儲存您的設定,並在之後套用至另一個環境。

若要將設定儲存於原始程式碼,您可以包含組態檔案。每次您建立環境或部署應用程式,組態檔案裡的設定就會套用。您也可以使用組態檔案來安裝套件、執行指令碼,並在部署期間執行其他執行個體自訂操作。

在 Elastic Beanstalk 主控台中套用的設定會覆寫組態檔案中相同的設定 (如存在)。這可讓您在組態檔案中擁有預設設定,並以主控台的環境專屬設定覆寫之。如需優先順序以及其他變更設定方法的詳細資訊,請參閱組態選項

若要透過 pip 提供 Python 套件,您可以在應用程式原始碼的根目錄納入要求檔案。Elastic Beanstalk 會於部署期間安裝要求檔案指定的任何套件。如需詳細資訊,請參閱使用要求檔案指定相依性

如需各種擴充 Elastic Beanstalk Linux 類型平台方式的詳細資訊,請參閱 擴充 Elastic Beanstalk Linux 平台

設定您的 Python 環境

Python 平台設定可讓您微調 Amazon EC2 執行個體的行為。您可以使用 Elastic Beanstalk 主控台編輯 Elastic Beanstalk 環境的 Amazon EC2 執行個體組態。

使用 Elastic Beanstalk 主控台來設定 Python 程序設定、啟用 AWS X-Ray、啟用至 Amazon S3 的日誌輪換,以及設定您的應用程式可以從環境讀取的變數。

在 Elastic Beanstalk 主控台中設定 Python 環境
  1. 開啟 Elastic Beanstalk 主控台,然後在 Regions (區域) 清單中選取您的 AWS 區域。

  2. 在導覽窗格中,選擇 Environments (環境),然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇 Configuration (組態)

  4. 更新、監控和日誌記錄組態類別中,選擇編輯

Python 設定

  • 代理伺服器 – 要在您的環境執行個體上使用的代理伺服器。預設使用 nginx。

  • WSGI Path (WSGI 路徑) – 主要應用程式檔案的名稱或路徑,例如 application.pydjango/wsgi.py

  • NumProcesses (NumProcesses) – 每個應用程式執行個體上執行的程序數目。

  • NumThreads (NumThreads) – 每個程序中執行的執行緒數目。

AWS X-Ray 設定

日誌選項

Log Options (日誌選項) 區段有兩個設定:

  • Instance profile (執行個體描述檔) – 指定執行個體描述檔,此描述檔具備存取和您應用程式相關聯 Amazon S3 儲存貯體的許可。

  • Enable log file rotation to Amazon S3 (啟用 Amazon S3 的日誌檔案輪換) – 指定是否將應用程式 Amazon EC2 執行個體的日誌檔案複製到與應用程式關聯的 Amazon S3 儲存貯體。

靜態檔案

為改善效能,您可以使用 Static files (靜態檔案) 區段來設定代理伺服器,以為來自 Web 應用程式一組目錄中的靜態檔案 (例如 HTML 或影像) 提供服務。對於每個目錄,您可以設定目錄映射的虛擬路徑。代理伺服器收到位於指定路徑下的檔案請求時,會直接提供檔案而非將請求路由至您的應用程式。

如需使用組態檔案或 Elastic Beanstalk 主控台設定靜態檔案的詳細資訊,請參閱提供靜態檔案

根據預設,Python 環境中的代理伺服器會從 static 路徑上名為 /static 的資料夾中提供任何檔案。例如,若您的應用程式原始碼在名為 logo.png 的資料夾中有一個名為 static 的檔案,則代理伺服器會以 subdomain.elasticbeanstalk.com/static/logo.png 將此檔案提供給使用者。您可以如本節所述來設定其他對應。

環境屬性

您可以使用環境屬性,為您的應用程式提供資訊,並設定環境變數。例如,您可以建立名為 CONNECTION_STRING 的環境屬性,藉此指定連線字串,供您的應用程式使用以連接至資料庫。

在執行於 Elastic Beanstalk 的 Python 環境內,可透過 Python 的 os.environ 字典取得這些數值。如需詳細資訊,請參閱 http://docs.python.org/library/os.html

您可以使用類似下列的程式碼,存取金鑰和參數:

import os endpoint = os.environ['API_ENDPOINT']

環境屬性亦可為架構提供資訊。例如,您可以建立一個名為 DJANGO_SETTINGS_MODULE 的屬性,將 Django 設定為使用特定設定模組。依據環境而異,此值可能是 development.settingsproduction.settings 等。

如需詳細資訊,請參閱 環境屬性與其他軟體設定

Python 組態命名空間

您可以使用組態檔案來設定組態選項,並在部署期間執行其他的執行個體設定工作。組態選項可由 Elastic Beanstalk 服務或您使用的平台來定義,並且會組織成「命名空間」

Python 平台於 aws:elasticbeanstalk:environment:proxyaws:elasticbeanstalk:environment:proxy:staticfilesaws:elasticbeanstalk:container:python 命名空間定義的選項。

下列範例組態檔案指定組態選項設定,以建立名為 DJANGO_SETTINGS_MODULE 的環境屬性、選擇 Apache 代理伺服器、將名為 statichtml 的目錄對應至路徑 /html 的兩個靜態檔案選項,以及將名為 staticimages 的目錄對應至路徑 /images,以及指定 aws:elasticbeanstalk:container:python 命名空間的其他設定。此命名空間內含的選項,可讓您指定原始碼內 WSGI 指令碼的位置,以及以 WSGI 執行所需的執行緒數量和程序。

option_settings: aws:elasticbeanstalk:application:environment: DJANGO_SETTINGS_MODULE: production.settings aws:elasticbeanstalk:environment:proxy: ProxyServer: apache aws:elasticbeanstalk:environment:proxy:staticfiles: /html: statichtml /images: staticimages aws:elasticbeanstalk:container:python: WSGIPath: ebdjango.wsgi:application NumProcesses: 3 NumThreads: 20
備註
  • 如果您使用的是 Amazon Linux AMI Python 平台版本 (Amazon Linux 2 之前的版本),請將 WSGIPath 的數值替換為 ebdjango/wsgi.py。此範例中的數值適用於 Gunicorn WSGI 伺服器,Amazon Linux AMI 平台版本不支援此伺服器。

  • 此外,這些較舊的平台版本會使用不同的命名空間來設定靜態檔案 — aws:elasticbeanstalk:container:python:staticfiles。它具有與標準靜態文件命名空間相同的選項名稱和語義。

組態檔案亦支援多個金鑰,可進一步修改您環境執行個體上的軟體。本範例使用套件金鑰來安裝具備 yum 的 Memcached,同時透過容器指令於部署期間執行可設定伺服器的命令:

packages: yum: libmemcached-devel: '0.31' container_commands: collectstatic: command: "django-admin.py collectstatic --noinput" 01syncdb: command: "django-admin.py syncdb --noinput" leader_only: true 02migrate: command: "django-admin.py migrate" leader_only: true 03wsgipass: command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf' 99customize: command: "scripts/customize.sh"

Elastic Beanstalk 可提供許多組態選項讓您自訂環境。除了組態檔案,您也可以使用主控台、已儲存組態、EB CLI 或 AWS CLI 來設定組態選項。如需詳細資訊,請參閱「組態選項」。