使用 Elastic Beanstalk Python 平台 - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 Elastic Beanstalk Python 平台

重要

Amazon Linux 2 平台版本与 Amazon Linux AMI 平台版本(在 Amazon Linux 2 之前)完全不同。这些不同层代的平台在多个方面不兼容。如果您要迁移到 Amazon Linux 2 平台版本,请务必阅读将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2中的信息。

AWS Elastic Beanstalk Python 平台是一组环境配置,适用于可在代理服务器后方使用 WSGI 运行的 Python Web 应用程序。每个平台分支均对应于 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. Software (软件) 配置类别中,选择 Edit (编辑)

Python 设置

  • Proxy server (代理服务器) – 要在环境实例上使用的代理服务器。默认情况下,使用 nginx。

  • WSGI Path (WSGI 路径) - 主应用程序文件的名称或路径。例如,application.pydjango/wsgi.py

  • NumProcesses - 要在每个应用程序实例上运行的流程的数量。

  • NumThreads - 要在每个流程中运行的线程的数量。

AWS X-Ray 设置

日志选项

“日志选项”部分有两个设置:

  • 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 来配置选项。有关更多信息,请参阅配置选项