

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

# 使用 Elastic Beanstalk 部署 Python 應用程式
<a name="create-deploy-python-apps"></a>

本章提供設定和部署 Python Web 應用程式的說明 AWS Elastic Beanstalk。Elastic Beanstalk 可讓您使用 Amazon Web Services 輕鬆部署、管理和擴展 Python Web 應用程式。

您可以使用 Elastic Beanstalk 命令列界面 (EB CLI) 或使用 Elastic Beanstalk 主控台，在幾分鐘內部署應用程式。部署 Elastic Beanstalk 應用程式之後，您可以繼續使用 EB CLI 來管理您的應用程式和環境，也可以使用 Elastic Beanstalk 主控台 AWS CLI或 APIs。

依照中的步驟[適用於 Python 的 QuickStart ](python-quickstart.md)，取得step-by-step說明。 **

**Topics**
+ [QuickStart：將 Python 應用程式部署至 Elastic Beanstalk](python-quickstart.md)
+ [設定 Elastic Beanstalk 的 Python 開發環境](python-development-environment.md)
+ [使用 Elastic Beanstalk Python 平台](create-deploy-python-container.md)
+ [將 Flask 應用程式部署至 Elastic Beanstalk](create-deploy-python-flask.md)
+ [將 Django 應用程式部署至 Elastic Beanstalk](create-deploy-python-django.md)
+ [將 Amazon RDS 資料庫執行個體新增至 Python Elastic Beanstalk 環境](create-deploy-python-rds.md)
+ [Python 工具與資源](create-deploy-python-tools-resources.md)

# QuickStart：將 Python 應用程式部署至 Elastic Beanstalk
<a name="python-quickstart"></a>

本 QuickStart 教學課程會逐步引導您建立 Python 應用程式並將其部署到 AWS Elastic Beanstalk 環境的程序。

**不適用於生產用途**  
範例僅用於示範。請勿在生產環境中使用範例應用程式。

**Topics**
+ [AWS 您的帳戶](#python-quickstart-aws-account)
+ [先決條件](#python-quickstart-prereq)
+ [步驟 1：建立 Python 應用程式](#python-quickstart-create-app)
+ [步驟 2：在本機執行應用程式](#python-quickstart-run-local)
+ [步驟 3：使用 EB CLI 部署 Python 應用程式](#python-quickstart-deploy)
+ [步驟 4：在 Elastic Beanstalk 上執行應用程式](#python-quickstart-run-eb-ap)
+ [步驟 5：清除](#go-tutorial-cleanup)
+ [AWS 您應用程式的 資源](#python-quickstart-eb-resources)
+ [後續步驟](#python-quickstart-next-steps)
+ [使用 Elastic Beanstalk 主控台部署](#python-quickstart-console)

## AWS 您的帳戶
<a name="python-quickstart-aws-account"></a>

如果您還不是 AWS 客戶，則需要建立 AWS 帳戶。註冊可讓您存取 Elastic Beanstalk 和其他您需要 AWS 的服務。

如果您已經有 AWS 帳戶，您可以繼續進行 [先決條件](#python-quickstart-prereq)。

### 建立 AWS 帳戶
<a name="python-quickstart-aws-account-procedure"></a>

#### 註冊 AWS 帳戶
<a name="sign-up-for-aws"></a>

如果您沒有 AWS 帳戶，請完成下列步驟來建立一個。

**註冊 AWS 帳戶**

1. 開啟 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 請遵循線上指示進行。

   部分註冊程序需接收來電或簡訊，並在電話鍵盤輸入驗證碼。

   當您註冊 時 AWS 帳戶，*AWS 帳戶根使用者*會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務，請將管理存取權指派給使用者，並且僅使用根使用者來執行[需要根使用者存取權的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 [https://aws.amazon.com/](https://aws.amazon.com/) 並選擇**我的帳戶**，以檢視您目前的帳戶活動並管理帳戶。

#### 建立具有管理存取權的使用者
<a name="create-an-admin"></a>

註冊 後 AWS 帳戶，請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立 管理使用者，以免將根使用者用於日常任務。

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 AWS 帳戶 根使用者 （主控台） 啟用虛擬 MFA 裝置](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**建立具有管理存取權的使用者**

1. 啟用 IAM Identity Center。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[啟用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，將管理存取權授予使用者。

   如需使用 IAM Identity Center 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 IAM Identity Center 目錄](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理存取權的使用者身分登入**
+ 若要使用您的 IAM Identity Center 使用者簽署，請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

  如需使用 IAM Identity Center 使用者登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[登入 AWS 存取入口網站](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**指派存取權給其他使用者**

1. 在 IAM Identity Center 中，建立一個許可集來遵循套用最低權限的最佳實務。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 將使用者指派至群組，然後對該群組指派單一登入存取權。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

## 先決條件
<a name="python-quickstart-prereq"></a>

為了遵循本指南的程序，您需要命令列終端機或 shell 來執行命令。命令清單前會出現提示字元 (\$1) 及目前的目錄名稱 (如有)。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 上，您可以使用偏好的 Shell 和套件軟體管理工具。在 Windows [上，您可以安裝適用於 Linux 的 Windows 子系統](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以取得與 Windows 整合的 Ubuntu 和 Bash 版本。

### EB CLI
<a name="python-quickstart-prereq.ebcli"></a>

本教學使用 Elastic Beanstalk 命令列界面 (EB CLI)。關於安裝和設定 EB CLI 的詳細資訊，請參閱[使用設定指令碼安裝 EB CLI （建議）](eb-cli3.md#eb-cli3-install) 和[設定 EB CLI](eb-cli3-configuration.md)。

### Python 和 Flask 架構
<a name="python-quickstart-prereq.runtime"></a>

執行下列命令，確認您已安裝可運作的 Python `pip` 版本。

```
~$ python3 --version
Python 3.N.N
>~$ python3 -m pip --version
pip X.Y.Z from ... (python 3.N.N)
```

如果任何先前的命令傳回「*找不到 Python*」，請執行下列使用 `python`而非 的命令`python3`。別名和符號連結的設定可能因作業系統和個別自訂而有所不同，因此 `python3`命令可能無法在您的機器上運作。

```
~$ python --version
Python 3.N.N
>~$ python -m pip --version
pip X.Y.Z from ... (python 3.N.N)
```

如果您的本機電腦上未安裝 Python，您可以從 Python 網站上的 [Python 下載](https://www.python.org/downloads/)頁面下載。如需 Elastic Beanstalk 支援的 Python 語言版本清單，請參閱 平台指南中的[支援的 Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python) *AWS Elastic Beanstalk 平台*。Python 下載網站提供 *Python 開發人員指南*的連結，您可以在其中找到安裝和設定指示。

**注意**  
Python `pip`套件預設會隨附於 Python 3.4 或更新版本。

如果您的輸出指出您有支援的 Python 版本，但沒有 `pip`，請參閱 https：//*pip.pypa.io* 網站上的[安裝](https://pip.pypa.io/en/stable/installation/)頁面。它提供在沒有 pip 的 Python 環境中安裝 pip 的指引。



執行下列命令，確認是否已安裝 Flask：

```
~$ pip list | grep Flask
```

如果未安裝 Flask，您可以使用下列命令進行安裝：

```
~$ pip install Flask
```

## 步驟 1：建立 Python 應用程式
<a name="python-quickstart-create-app"></a>

建立專案目錄。

```
~$ mkdir eb-python
~$ cd eb-python
```

建立範例「Hello Elastic Beanstalk！」 您將使用 Elastic Beanstalk 部署的 Python 應用程式。

在您剛使用下列內容建立`application.py`的目錄中建立名為 的文字檔案。

**Example `~/eb-python/application.py`**  

```
from flask import Flask
application = Flask(__name__)

@application.route('/')
def hello_elastic_beanstalk():
        return 'Hello Elastic Beanstalk!'
```

`requirements.txt` 使用以下行建立名為 的文字檔案。此檔案包含應用程式執行所需的`pip`套件。

**Example `~/eb-python/requirements.txt`**  

```
Flask
```

## 步驟 2：在本機執行應用程式
<a name="python-quickstart-run-local"></a>

執行下列命令以在本機執行您的應用程式。

```
~/eb-python$ export FLASK_APP=application.py && flask run --port 5000
```

您應該會看到類似以下的輸出

```
Serving Flask app 'application.py'
Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
Running on http://127.0.0.1:5000
Press CTRL+C to quit
127.0.0.1 - - [01/Jan/1970 00:00:00] "GET / HTTP/1.1" 200 -
```

導覽至 Web 瀏覽器`http://localhost:5000`中的 。Web 瀏覽器應該顯示「Hello Elastic Beanstalk！」。

## 步驟 3：使用 EB CLI 部署 Python 應用程式
<a name="python-quickstart-deploy"></a>

執行下列命令，為此應用程式建立 Elastic Beanstalk 環境。

 

**建立環境並部署 Python 應用程式**

1. 透過 **eb init** 命令初始化您的 EB CLI 儲存庫。

   ```
   ~/eb-python$ eb init -p python-3.9 python-tutorial --region us-east-2
   ```

   此命令會建立名為 的應用程式，`python-tutorial`並設定您的本機儲存庫，以使用提供的 Python 平台版本建立環境。

1. (選用) 再次執行 **eb init** 來設定預設金鑰對，藉此使用 SSH 連接至執行您應用程式的 EC2 執行個體：

   ```
   ~/eb-python$ 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 init -i**。

1. 使用 **eb create** 建立環境並於其中部署您的應用程式。Elastic Beanstalk 會自動為您的應用程式建置 zip 檔案，並在連接埠 5000 上啟動該檔案。

   ```
   ~/eb-python$ eb create python-env
   ```

   Elastic Beanstalk 大約需要五分鐘的時間來建立您的環境。

## 步驟 4：在 Elastic Beanstalk 上執行應用程式
<a name="python-quickstart-run-eb-ap"></a>

當建立環境的程序完成時，請使用 開啟您的網站**eb open**。

```
~/eb-python$ eb open
```

恭喜您！您已使用 Elastic Beanstalk 部署 Python 應用程式！這會開啟瀏覽器視窗，並使用為應用程式建立的網域名稱。

## 步驟 5：清除
<a name="go-tutorial-cleanup"></a>

您可以在完成使用應用程式時終止您的環境。Elastic Beanstalk 會終止與您的環境相關聯的所有 AWS 資源。

若要使用 EB CLI 終止 Elastic Beanstalk 環境，請執行下列命令。

```
~/eb-python$ eb terminate
```

## AWS 您應用程式的 資源
<a name="python-quickstart-eb-resources"></a>

您剛建立單一執行個體應用程式。它可作為具有單一 EC2 執行個體的直接範例應用程式，因此不需要負載平衡或自動擴展。對於單一執行個體應用程式，Elastic Beanstalk 會建立下列 AWS 資源：
+ **EC2 執行個體** – 設定在您所選平台上執行 Web 應用程式的 Amazon EC2 虛擬機器。

  每個平台會執行不同一套軟體、設定檔和指令碼，來支援特定的語言版本、架構、Web 容器或其組合。大多數的平台會使用 Apache 或 nginx 做為反向代理，處理您 Web 應用程式前端的網路流量、向它轉送請求、提供靜態資產，並產生存取和錯誤日誌。
+ **執行個體安全群組** – 設定允許從連接埠 80 傳入流量的 Amazon EC2 安全群組。此資源可讓負載平衡器傳來的 HTTP 傳輸資料，到達執行您 Web 應用程式的 EC2 執行個體。在預設情況下，不允許傳輸資料從其他通訊埠傳送。
+ **Amazon S3 儲存貯體** - 儲存位置，用來儲存當您使用 Elastic Beanstalk 時所建立的原始程式碼、日誌和其他成品。
+ **Amazon CloudWatch 警示** – 兩種 CloudWatch 警示，用來監控您環境中執行個體上的負載，會在負載過高或過低時觸發。當警示觸發時，您的 Auto Scaling 群組會擴展或縮減以進行回應。
+ **CloudFormation 堆疊** – Elastic Beanstalk 使用 CloudFormation 啟動環境中的資源並傳播組態變更。資源定義於範本中，您可在 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation)中檢視此範本。
+  **網域名稱** – 會路由到您 Web 應用程式的網域名稱，其格式為 **subdomain*.*region*.elasticbeanstalk.com*。

Elastic Beanstalk 會管理所有這些資源。當您終止環境時，Elastic Beanstalk 會終止其中的所有資源。

## 後續步驟
<a name="python-quickstart-next-steps"></a>

在您擁有執行應用程式的環境後，可以隨時部署應用程式的新版本或不同的應用程式。部署新的應用程式版本非常快速，因無須佈建或重新啟動 EC2 執行個體。您也可以使用 Elastic Beanstalk 主控台探索您的新環境。如需詳細步驟，請參閱本指南*入門*章節中的[探索您的環境](GettingStarted.md#GettingStarted.Explore)。

**嘗試更多教學課程**  
如果您想要使用不同的範例應用程式來嘗試其他教學課程，請參閱下列教學課程：  
[將 Flask 應用程式部署至 Elastic Beanstalk](create-deploy-python-flask.md)
[將 Django 應用程式部署至 Elastic Beanstalk](create-deploy-python-django.md)

部署範例應用程式一兩個，並準備好開始在本機開發和執行 Python 應用程式後，請參閱 [設定 Elastic Beanstalk 的 Python 開發環境](python-development-environment.md)。

## 使用 Elastic Beanstalk 主控台部署
<a name="python-quickstart-console"></a>

您也可以使用 Elastic Beanstalk 主控台來啟動範例應用程式。如需詳細步驟，請參閱本指南*入門*章節中的[建立範例應用程式](GettingStarted.md#GettingStarted.CreateApp)。

# 設定 Elastic Beanstalk 的 Python 開發環境
<a name="python-development-environment"></a>

本主題提供設定 Python 開發環境的說明，以在本機測試您的應用程式，然後再部署到其中 AWS Elastic Beanstalk。它也參考提供實用工具安裝指示的網站。

為了遵循本指南的程序，您需要命令列終端機或 shell 來執行命令。命令清單前會出現提示字元 (\$1) 及目前的目錄名稱 (如有)。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 上，您可以使用偏好的 Shell 和套件軟體管理工具。在 Windows [上，您可以安裝適用於 Linux 的 Windows 子系統](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以取得與 Windows 整合的 Ubuntu 和 Bash 版本。

**Topics**
+ [先決條件](#python-common-prereq)
+ [使用虛擬環境](#python-common-setup-venv)
+ [設定適用 Elastic Beanstalk 的 Python 專案](#python-common-configuring)

## 先決條件
<a name="python-common-prereq"></a>

下列清單提供使用 Elastic Beanstalk 和 Python 應用程式的常見先決條件：
+ **Python 語言** – 安裝所選 Elastic Beanstalk Python 平台版本中包含的 Python 語言版本。如需支援的 Python 語言版本清單，請參閱 平台指南中的[支援的 Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python) *AWS Elastic Beanstalk 平台*。如果您的開發機器尚未設定 Python，請參閱 Python [網站上的 Python 下載](https://www.python.org/downloads/)頁面。
+ **`pip` 公用程式** – `pip`公用程式是 Python 的套件安裝程式。它會安裝並列出專案的相依性，以便 Elastic Beanstalk 知道如何設定應用程式的環境。如需 的詳細資訊`pip`，請參閱 *pip.pypa.io* 網站上的 [pip 頁面](https://pip.pypa.io/en/stable/)。
+ **（選用） Elastic Beanstalk 命令列界面 (EB CLI)** – [EB CLI ](eb-cli3.md)可以使用必要的部署檔案封裝您的應用程式。它也可以建立 Elastic Beanstalk 環境，並將您的應用程式部署到其中。您也可以透過 Elastic Beanstalk 主控台進行部署，因此不需要 EB CLI。
+ **正常運作的`SSH`安裝** – 您可以使用 SSH 通訊協定連線到執行中的執行個體，以檢查或偵錯部署。
+ **`virtualenv` package** – 此`virtualenv`工具會為您的應用程式建立開發和測試環境。Elastic Beanstalk 可以複寫此環境，而無需安裝應用程式不需要的額外套件。如需詳細資訊，請參閱 [Virtualenv](https://virtualenv.pypa.io/en/latest/) 網站。安裝 Python 之後，您可以使用下列命令安裝`virtualenv`套件：

  ```
  $ pip install virtualenv
  ```

## 使用虛擬環境
<a name="python-common-setup-venv"></a>

先決條件安裝完成後，請透過 `virtualenv` 設定虛擬環境，以安裝應用程式的依存項目。透過虛擬環境，您可清楚分辨應用程式所需的套件，將該套件安裝於執行您應用程式的 EC2 執行個體。

**欲設定虛擬環境**

1. 開啟命令列視窗並輸入：

   ```
   $ virtualenv /tmp/eb_python_app
   ```

   將 *eb\$1python\$1app* 取代為對您應用程式有意義的名稱 (最好使用您應用程式的名稱)。該 `virtualenv` 命令在指定的目錄中為您建立一個虛擬環境，並列印其操作的結果：

   ```
   Running virtualenv with interpreter /usr/bin/python
   New python executable in /tmp/eb_python_app/bin/python3.12
   Also creating executable in /tmp/eb_python_app/bin/python
   Installing setuptools, pip...done.
   ```

1. 您的虛擬環境就緒後，請執行位於環境 `activate` 目錄的 `bin` 指令碼來加以啟動。例如，欲啟動前一步建立的 **eb\$1python\$1app** 環境，您需要輸入：

   ```
   $ source /tmp/eb_python_app/bin/activate
   ```

   虛擬環境會於命令提示字元的開頭列印其名稱 (如 `(eb_python_app)`)，藉此提醒您正處於虛擬 Python 環境。

1. 要停止使用您的虛擬環境並返回到系統的預設 Python 解譯器及其所有已安裝的程式庫，請執行 `deactivate` 命令。

   ```
   (eb_python_app) $ deactivate
   ```

**注意**  
建立後，即可隨時再次執行虛擬環境的 `activate` 指令碼，將其重新啟動。

## 設定適用 Elastic Beanstalk 的 Python 專案
<a name="python-common-configuring"></a>

您可使用 Elastic Beanstalk CLI，準備將您的 Python 應用程式透過 Elastic Beanstalk 進行部署。

**透過 Elastic Beanstalk 設定 Python 應用程式以進行部署**

1. 在您的[虛擬環境](#python-common-setup-venv)中，回到您專案樹狀目錄 (`python_eb_app`) 的最上層，並輸入：

   ```
   pip freeze >requirements.txt
   ```

   此命令會將您安裝於虛擬環境的套件名稱和版本，複製至 `requirements.txt`，例如，若 *PyYAML* 套件版本 *3.11* 安裝在您的虛擬環境中，那麼此檔案將包含下列這一行：

   ```
   PyYAML==3.11
   ```

   這可讓 Elastic Beanstalk 使用與您用於開發並測試應用程式的相同套件和版本，複寫您應用程式的 Python 環境。

1. 透過 **eb init** 命令設定 EB CLI 儲存庫。依提示選擇區域、平台和其他選項。

根據預設，Elastic Beanstalk 會尋找名為 `application.py` 的檔案，以啟動您的應用程式。若您建立的 Python 專案並沒有該項目，則您應用程式的環境必須進行調整。您也將需要設定環境變數，藉此載入您應用程式的模組。如需詳細資訊，請參閱「[使用 Elastic Beanstalk Python 平台](create-deploy-python-container.md)」。

# 使用 Elastic Beanstalk Python 平台
<a name="create-deploy-python-container"></a>

本主題說明如何在 Elastic Beanstalk 上設定、建置和執行 Python 應用程式。

AWS Elastic Beanstalk 支援多種不同版本的 Python 程式設計語言平台分支。如需完整清單，請參閱 *AWS Elastic Beanstalk 平台文件中的* [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)。

Python Web 應用程式可以使用 WSGI 在代理伺服器後方執行。Elastic Beanstalk 提供 [Gunicorn](https://gunicorn.org/) 作為預設 WSGI 伺服器。

您可以新增 `Procfile` 到原始碼套件中，為您的應用程式指定和設定 WSGI 伺服器。如需詳細資訊，請參閱[在 Elastic Beanstalk 上使用 Procfile 設定 WSGI 伺服器](python-configuration-procfile.md)。

您可以使用由 Pipenv 建立的 `Pipfile` 和 `Pipfile.lock` 檔案來指定 Python 套件相依性和其他要求。如需有關指定相依性的詳細資訊，請參閱[使用 Elastic Beanstalk 上的需求檔案指定相依性](python-configuration-requirements.md)。

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

Elastic Beanstalk 主控台中提供了[修改正在執行環境組態](environment-configuration-methods-after.md)的組態選項。要避免在終止環境的組態時遺失組態，您可以使用[已儲存組態](environment-configuration-savedconfig.md)來儲存您的設定，並在之後套用至另一個環境。

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

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

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

如需各種擴充 Elastic Beanstalk Linux 類型平台方式的詳細資訊，請參閱 [擴充 Elastic Beanstalk Linux 平台](platforms-linux-extend.md)。

## 設定您的 Python 環境
<a name="create-deploy-python-container-console"></a>

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

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

**在 Elastic Beanstalk 主控台中設定 Python 環境**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇**組態**。

1. 在**更新、監控和日誌記錄**組態類別中，選擇**編輯**。

### Python 設定
<a name="python-console-settings"></a>
+ **代理伺服器** – 要在您的環境執行個體上使用的代理伺服器。預設使用 nginx。
+ **WSGI Path (WSGI 路徑)** – 主要應用程式檔案的名稱或路徑，例如 `application.py` 或 `django/wsgi.py`。
+ **NumProcesses (NumProcesses)** – 每個應用程式執行個體上執行的程序數目。
+ **NumThreads (NumThreads)** – 每個程序中執行的執行緒數目。

### AWS X-Ray 設定
<a name="python-console-xray"></a>
+ **X-Ray 協助程式** – AWS X-Ray 執行協助程式以處理來自 的追蹤資料[適用於 Python 的 AWS X-Ray SDK](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html)。

### 日誌選項
<a name="create-deploy-python-container.console.logoptions"></a>

Log Options (日誌選項) 區段有兩個設定：
+ **Instance profile (執行個體描述檔)** – 指定執行個體描述檔，此描述檔具備存取和您應用程式相關聯 Amazon S3 儲存貯體的許可。
+ **Enable log file rotation to Amazon S3** (啟用 Amazon S3 的日誌檔案輪換) – 指定是否將應用程式 Amazon EC2 執行個體的日誌檔案複製到與應用程式關聯的 Amazon S3 儲存貯體。

### 靜態檔案
<a name="python-platform-staticfiles"></a>

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

如需使用組態檔案或 Elastic Beanstalk 主控台設定靜態檔案的詳細資訊，請參閱[提供靜態檔案](environment-cfg-staticfiles.md)。

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

### 環境屬性
<a name="create-deploy-python-custom-container-envprop"></a>

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

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

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

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

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

如需詳細資訊，請參閱[環境變數和其他軟體設定](environments-cfg-softwaresettings.md)。

## Python 組態命名空間
<a name="python-namespaces"></a>

您可以使用[組態檔案](ebextensions.md)來設定組態選項，並在部署期間執行其他的執行個體設定工作。組態選項可以是[平台特定](command-options-specific.md)選項，也可以套用至 Elastic Beanstalk 服務整體中的所有[平台](command-options-general.md)。組態選項會組織成*命名空間*。

Python 平台於 `aws:elasticbeanstalk:environment:proxy`、`aws:elasticbeanstalk:environment:proxy:staticfiles` 和 `aws:elasticbeanstalk:container:python` 命名空間定義的選項。

下列範例組態檔案指定組態選項設定，以建立名為 `DJANGO_SETTINGS_MODULE` 的環境屬性、選擇 Apache 代理伺服器、將名為 `statichtml` 的目錄對應至路徑 `/html` 的兩個靜態檔案選項，以及將名為 `staticimages` 的目錄對應至路徑 `/images`，以及指定 `[aws:elasticbeanstalk:container:python](command-options-specific.md#command-options-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`。它具有與標準靜態文件命名空間相同的選項名稱和語義。

組態檔案亦支援多個金鑰，可進一步[修改您環境執行個體上的軟體](customize-containers-ec2.md)。本範例使用[套件](customize-containers-ec2.md#linux-packages)金鑰來安裝具備 `yum` 的 Memcached，同時透過[容器指令](customize-containers-ec2.md#linux-container-commands)於部署期間執行可設定伺服器的命令：

```
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來設定組態選項。如需詳細資訊，請參閱[組態選項](command-options.md)。

## `python3` 可執行檔
<a name="python3-executable"></a>

Elastic Beanstalk Python 環境中 EC2 `python3` 執行個體上可用的可執行檔版本，不一定會對應至平台所使用的相同 Python 版本。例如，在 Python 3.12 AL2023 平台上， `/usr/bin/python3` 指向 Python 3.9。這是因為 Python 3.9 是 AL2023 上的*系統 Python*。如需詳細資訊，請參閱《Amazon Linux [AL2023 使用者指南》中的 AL2023 中的 Python](https://docs.aws.amazon.com/linux/al2023/ug/python.html)。 **您可以存取與平台在版本控制位置 （例如 `/usr/bin/python3.12`) 或應用程式虛擬環境`bin`目錄 （例如 ) 中使用的 Python 版本對應的可執行檔`/var/app/venv/staging-LQM1lest/bin/python3`。平台使用與平台分支對應的正確 Python 可執行檔。

# 在 Elastic Beanstalk 上使用 Procfile 設定 WSGI 伺服器
<a name="python-configuration-procfile"></a>

您可以新增 [`Procfile`](platforms-linux-extend.build-proc.md#platforms-linux-extend.proc) 到原始碼套件中，為您的應用程式指定和設定 WSGI 伺服器。您可以在 中指定自訂啟動和執行命令`Procfile`。

當您使用 `Procfile` 時，它會覆寫您使用組態檔設定的 `aws:elasticbeanstalk:container:python` 命名空間選項。

下列範例使用 `Procfile` 將 uWSGI 指定為伺服器並進行設定。

**Example Procfile**  

```
web: uwsgi --http :8000 --wsgi-file application.py --master --processes 4 --threads 2
```

下列範例使用 `Procfile` 來設定 Gunicorn (預設 WSGI 伺服器)。

**Example Procfile**  

```
web: gunicorn --bind :8000 --workers 3 --threads 2 project.wsgi:application
```

**備註**  
如果您設定 Gunicorn 以外的任何 WSGI 伺服器，請務必也將其指定為應用程式的相依性，以便將它安裝在您的環境執行個體上。如需有關相依性規格的詳細資訊，請參閱 [使用 Elastic Beanstalk 上的需求檔案指定相依性](python-configuration-requirements.md)。
WSGI 伺服器的預設連接埠是 8000。如果您在 `Procfile` 命令中指定不同的連接埠號碼，請將 `PORT` [環境屬性](environments-cfg-softwaresettings.md)設定為此連接埠號碼。

# 使用 Elastic Beanstalk 上的需求檔案指定相依性
<a name="python-configuration-requirements"></a>

本主題說明如何設定應用程式以安裝其所需的其他 Python 套件。Python 應用程式通常與其他第三方 Python 套件具有相依性。使用 Elastic Beanstalk Python 平台，您可以透過多種方式指定應用程式依賴的 Python 套件。

## 使用 `pip` 和 `requirements.txt`
<a name="python-configuration-requirements.txt"></a>

安裝 Python 套件的標準工具是 `pip`。它有一項功能可讓您於單一要求檔案內，指定所需的所有套件 (及其版本)。如需有關要求檔案的詳細資訊，請參閱 pip 文件網站上的[要求檔案格式](https://pip.pypa.io/en/latest/reference/requirements-file-format/#requirements-file-format)。

建立名為 `requirements.txt` 的檔案並將其置於原始碼套件的最上層目錄。以下是 Django 的範例 `requirements.txt` 檔案。

```
Django==2.2
mysqlclient==2.0.3
```

在您的開發環境中，您可以使用 `pip freeze` 命令來產生您的要求檔案。

```
~/my-app$ pip freeze > requirements.txt
```

為了確保您的要求檔案僅包含您應用程式實際使用的套件，請使用[虛擬環境](python-development-environment.md#python-common-setup-venv)來安裝這些套件。在虛擬環境外，`pip freeze` 輸出將包含安裝於開發機器的所有 `pip` 套件，包括您的作業系統隨附的套件。

**注意**  
在 Amazon Linux AMI Python 平台版本上，Elastic Beanstalk 本身不支援 Pipenv 或 Pipenv。如果您使用 Pipenv 管理應用程式相依性，請執行下列命令來產生 `requirements.txt` 檔案。  

```
~/my-app$ pipenv lock -r > requirements.txt
```
若要進一步了解，請參閱 Pipenv 文件中的[產生 requirements.txt](https://pipenv.readthedocs.io/en/latest/advanced/#generating-a-requirements-txt)。

## 使用 Pipenv 和 `Pipfile`
<a name="python-configuration-requirements.pipenv"></a>

Pipenv 是一個現代化的 Python 套件工具。它將套件安裝與建立和管理相依性檔案以及應用程式的 virtualenv 結合在一起。如需詳細資訊，請參閱 [Pipenv：適用於人類的 Python 開發工作流程](https://pipenv.readthedocs.io/en/latest/)。

Pipenv 會維護兩個檔案：
+ `Pipfile` — 此檔案包含各種類型的相依性和要求。
+ `Pipfile.lock` — 此檔案包含可啟用決定性組建的版本快照。

您可在開發環境中建立此類檔案，並將它們包含在您部署到 Elastic Beanstalk 之原始碼套件的最上層目錄中。如需有關這兩個檔案的詳細資訊，請參閱[範例 Pipfile 和 Pipfile.lock](https://pipenv.pypa.io/en/latest/basics/#)。



下列範例使用 Pipenv 安裝 Django 和 Django REST 框架。這些命令會建立檔案 `Pipfile` 和 `Pipfile.lock`。

```
~/my-app$ pipenv install django
~/my-app$ pipenv install djangorestframework
```

 

## 優先順序
<a name="python-configuration-requirements.precedence"></a>

如果您包含本主題中描述的多個要求檔案，Elastic Beanstalk 只會使用其中一個。下列清單以遞減順序顯示優先順序。

1. `requirements.txt`

1. `Pipfile.lock`

1. `Pipfile`

**注意**  
從 2023 年 3 月 7 日 Amazon Linux 2 平台版本開始，如果您提供一個以上的此類檔案，Elastic Beanstalk 將發出主控台訊息，說明部署期間所使用的相依性檔案。

下列步驟說明了 Elastic Beanstalk 在部署執行個體時安裝相依性所遵循的邏輯。
+ 如果有 `requirements.txt` 檔案，我們將使用命令 `pip install -r requirements.txt`。
+ 從 2023 年 3 月 7 日 Amazon Linux 2 平台版本開始，如果沒有 `requirements.txt` 檔案，但有 `Pipfile.lock` 檔案，我們將使用命令 `pipenv sync`。在該版本之前，我們使用的是 `pipenv install --ignore-pipfile`。
+ 如果既沒有 `requirements.txt` 檔案，也沒有 `Pipfile.lock` 檔案，但有 `Pipfile` 檔案，我們將使用命令 `pipenv install --skip-lock`。
+ 如果找不到這三個要求檔案，我們不會安裝任何應用程式相依性。

# 將 Flask 應用程式部署至 Elastic Beanstalk
<a name="create-deploy-python-flask"></a>

本教學課程將逐步引導您產生 Flask 應用程式並將其部署到 AWS Elastic Beanstalk 環境。Flask 是適用於 Python 的開放原始碼 Web 應用程式架構。

在本教學中，您將執行下列作業：
+ [透過 Flask 設定 Python 虛擬環境](#python-flask-setup-venv)
+ [建立 Flask 應用程式](#python-flask-create-app)
+ [使用 EB CLI 部署您的網站](#python-flask-deploy) 
+ [清除](#python-flask-tutorial-cleanup) 

## 先決條件
<a name="python-flask-prereq"></a>

本教學假設您具備基本的 Elastic Beanstalk 操作及 Elastic Beanstalk 主控台知識。若您尚不了解，請依照 [了解如何開始使用 Elastic Beanstalk](GettingStarted.md) 中的說明來啟動您的第一個 Elastic Beanstalk 環境。

為了遵循本指南的程序，您需要命令列終端機或 shell 來執行命令。命令清單前會出現提示字元 (\$1) 及目前的目錄名稱 (如有)。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 上，您可以使用偏好的 Shell 和套件軟體管理工具。在 Windows [上，您可以安裝適用於 Linux 的 Windows 子系統](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以取得與 Windows 整合的 Ubuntu 和 Bash 版本。

在本教學課程中，我們使用 Python 3.11 和對應的 Elastic Beanstalk 平台版本。遵循[設定 Elastic Beanstalk 的 Python 開發環境](python-development-environment.md)中的指示安裝 Python。

教學課程將會安裝 [Flask](http://flask.pocoo.org/) 架構。

本教學也使用 Elastic Beanstalk 命令列界面 (EB CLI)。關於安裝和設定 EB CLI 的詳細資訊，請參閱[使用設定指令碼安裝 EB CLI （建議）](eb-cli3.md#eb-cli3-install) 和[設定 EB CLI](eb-cli3-configuration.md)。

## 透過 Flask 設定 Python 虛擬環境
<a name="python-flask-setup-venv"></a>

建立應用程式的專案目錄和虛擬環境，並安裝 Flask。

**設定專案環境**

1. 建立專案目錄。

   ```
   ~$ mkdir eb-flask
   ~$ cd eb-flask
   ```

1. 建立並啟用名為 `virt` 的虛擬環境：

   ```
   ~/eb-flask$ virtualenv virt
   ~$ source virt/bin/activate
   (virt) ~/eb-flask$
   ```

   您的命令提示字元前方將加上 `(virt)`，表示您正位於虛擬環境中。本教學課程的其餘部分都使用此虛擬環境。

1. 使用 `pip install` 安裝 Flask：

   ```
   (virt)~/eb-flask$ pip install flask==3.0.3
   ```

1. 使用 `pip freeze` 檢視已安裝的程式庫：

   ```
   (virt)~/eb-flask$ pip freeze
   blinker==1.8.2
   click==8.1.7
   Flask==3.0.3
   importlib_metadata==8.5.0
   itsdangerous==2.2.0
   Jinja2==3.1.4
   MarkupSafe==2.1.5
   Werkzeug==3.0.4
   zipp==3.20.2
   ```

   本命令列出您虛擬環境安裝的所有套件。由於您在虛擬環境中，全域性安裝的套件 (例如 EB CLI) 不會出現。

1. 將 `pip freeze` 的輸出儲存至名為 `requirements.txt` 的檔案。

   ```
   (virt)~/eb-flask$ pip freeze > requirements.txt
   ```

   這個檔案指示 Elastic Beanstalk 在部署期間安裝程式庫。如需詳細資訊，請參閱[使用 Elastic Beanstalk 上的需求檔案指定相依性](python-configuration-requirements.md)。

## 建立 Flask 應用程式
<a name="python-flask-create-app"></a>

接著，請建立您將使用 Elastic Beanstalk 進行部署的應用程式。我們將建立一個「Hello World」RESTful Web 服務。

於此目錄建立名為 `application.py` 的新文字檔案，內含下列內容：

**Example `~/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 將能夠輕鬆找到應用程式的程式碼。

與 Python 一起執行 `application.py`：

```
(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-123
```

在 Web 瀏覽器中開啟 `http://127.0.0.1:5000/`。您應看到應用程式正在執行，並顯示索引頁面：

![\[Web browser displaying "Hello World!" message and a hint about RESTful web service usage.\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/eb_flask_test_local.png)


檢查伺服器日誌，以查看您請求的輸出。您可以輸入 **Ctrl\$1C**，停止 web 伺服器並返回您的虛擬環境。

若您看到的是除錯輸出，請修正錯誤，並確認應用程式正於本機執行，之後再針對 Elastic Beanstalk 進行設定。

## 使用 EB CLI 部署您的網站
<a name="python-flask-deploy"></a>

您已新增於 Elastic Beanstalk 部署應用程式所需的所有事物。您的專案目錄現在應如下所示：

```
~/eb-flask/
|-- virt
|-- application.py
`-- requirements.txt
```

不過，在 Elastic Beanstalk 上執行應用程式並不需要 `virt` 資料夾。部署時，Elastic Beanstalk 會在伺服器執行個體上建立新的虛擬環境，並安裝 `requirements.txt` 中所列的程式庫。為了將您在部署期間上傳的原始碼套件大小降到最低，請新增 [.ebignore](eb-cli3-configuration.md#eb-cli3-ebignore) 檔案，其會告知 EB CLI 略過 `virt` 資料夾。

**Example \$1/eb-flask/.ebignore**  

```
virt
```

接著，您將建立應用程式環境，並透過 Elastic Beanstalk 部署已設定的應用程式。

**欲建立環境並部署您的 Flask 應用程式**

1. 透過 **eb init** 命令初始化您的 EB CLI 儲存庫：

   ```
   ~/eb-flask$ eb init -p python-3.11 flask-tutorial --region us-east-2
   Application flask-tutorial has been created.
   ```

   此命令會建立名為 的新應用程式，`flask-tutorial`並設定您的本機儲存庫，以使用最新的 Python 3.11 平台版本建立環境。

1. (選用) 再次執行 **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 init -i**。

1. 透過 **eb create** 建立環境並於其中部署您的應用程式：

   ```
   ~/eb-flask$ eb create flask-env
   ```

使用大約需要五分鐘時間建立環境，並且建立下列資源：
+ **EC2 執行個體** ‒ Amazon Elastic Compute Cloud (Amazon EC2) 虛擬機器，已設為在您選擇的平台上執行 Web 應用程式。

  每個平台會執行特定的一套軟體、設定檔和指令碼，來支援特定的語言版本、架構、Web 容器或其組合。大多數的平台使用會 Apache 或 NGINX 做為反向代理，此反向代理會在您 Web 應用程式的前景執行、轉傳遞交給此 Web 應用程式的請求、提供靜態資產，並產生存取和錯誤日誌。
+ **執行個體安全群組** - Amazon EC2 安全群組，已設為允許從連接埠 80 傳入的流量。此資源可讓負載平衡器傳來的 HTTP 傳輸資料，到達執行您 Web 應用程式的 EC2 執行個體。在預設情況下，不允許傳輸資料從其他通訊埠傳送。
+ **負載平衡器** - Elastic Load Balancing 負載平衡器，可設定將請求分配到執行您應用程式的執行個體。負載平衡器也讓您的執行個體不需直接連接到網際網路。
+ **負載平衡器安全群組** - Amazon EC2 安全群組，設為允許從連接埠 80 傳入的流量。此資源可讓來自網際網路的 HTTP 傳輸資料到達負載平衡器。在預設情況下，不允許傳輸資料從其他通訊埠傳送。
+ **Auto Scaling 群組** - Auto Scaling 群組，設為在執行個體終止或無法使用時，取代該執行個體。
+ **Amazon S3 儲存貯體** - 儲存位置，用來儲存當您使用 Elastic Beanstalk 時所建立的原始程式碼、日誌和其他成品。
+ **Amazon CloudWatch 警示** - 兩種 CloudWatch 警示，用來監控您環境中執行個體上的負載，會在負載過高或過低時觸發。當警示觸發時，您的 Auto Scaling 群組會擴展或縮減以進行回應。
+ **CloudFormation 堆疊** – Elastic Beanstalk 使用 CloudFormation 啟動環境中的資源並傳播組態變更。資源定義於範本中，您可在 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation)中檢視此範本。
+ **網域名稱** – 會路由到您 Web 應用程式的網域名稱，其格式為 **subdomain*.*region*.elasticbeanstalk.com*。
**網域安全**  
為了增強 Elastic Beanstalk 應用程式的安全性，我們會在[公共后缀列表 (PSL)](https://publicsuffix.org/) 中註冊網域 *elasticbeanstalk.com*。  
如果您需要在 Elastic Beanstalk 應用程式的預設網域名稱中設定敏感 Cookie，建議您使用字`__Host-`首為 的 Cookie 以提高安全性。此實務可保護您的網域免於跨網站請求偽造嘗試 (CSRF)。如需更多資訊，請參閱 Mozilla 開發人員網路中的[設定 Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 頁面。

這些資源全都由 Elastic Beanstalk 管理。當您終止環境時，Elastic Beanstalk 會終止其中的所有資源。

**注意**  
Elastic Beanstalk 建立的 Amazon S3 儲存貯體會在環境間共享，且不會在環境終止時刪除。如需詳細資訊，請參閱[將 Elastic Beanstalk 與 Amazon S3 搭配使用](AWSHowTo.S3.md)。

當環境建立程序完成，請透過 **eb open** 開啟您的網站：

```
~/eb-flask$ eb open
```

將開啟瀏覽器視窗，並使用為應用程式建立的網域名稱。您應該會看到與本機建立和測試相同的 Flask 網站。

![\[Browser window displaying a Flask web application with a "Hello World!" message and usage hint.\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/eb_flask_deployed.png)


若未顯示您的應用程式正在執行，或收到錯誤訊息，請參閱[疑難排解部署](troubleshooting.md#troubleshooting-deployments)尋求協助，以判斷錯誤發生的原因。

若您「確實」**看見您的應用程式正在執行，恭喜您，您透過 Elastic Beanstalk 部署的第一個 Flask 應用程式已完成！

## 清除
<a name="python-flask-tutorial-cleanup"></a>

完成使用示範程式碼後，您可以終止您的環境。Elastic Beanstalk 會刪除所有相關 AWS 資源，例如 [Amazon EC2 執行個體](using-features.managing.ec2.md)、[資料庫執行個體](using-features.managing.db.md)、[負載平衡器](using-features.managing.elb.md)、安全群組和[警示](using-features.alarms.md#using-features.alarms.title)。

移除資源不會刪除 Elastic Beanstalk 應用程式，因此您可以隨時為您的應用程式建立新環境。

**從主控台終止您的 Elastic Beanstalk 環境**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 選擇 **Actions** (動作)，然後選擇 **Terminate Environment** (終止環境)。

1. 使用畫面顯示對話方塊來確認環境終止。

或者，使用 EB CLI：

```
~/eb-flask$ eb terminate flask-env
```

## 後續步驟
<a name="python-flask-more-info"></a>

如需 Flask 的詳細資訊，請造訪 [flask.pocoo.org](http://flask.pocoo.org/)。

若您欲嘗試其他 Python Web 框架，請參閱[將 Django 應用程式部署至 Elastic Beanstalk](create-deploy-python-django.md)。

# 將 Django 應用程式部署至 Elastic Beanstalk
<a name="create-deploy-python-django"></a>

本教學會演練如何將自動產生的預設 [Django](https://www.djangoproject.com/) 網站部署至執行 Python 的 AWS Elastic Beanstalk 環境。本教學示範說明如何使用 Elastic Beanstalk 環境在雲端託管 Python Web 應用程式。

在本教學中，您將執行下列作業：
+ [設定 Python 虛擬環境並安裝 Django](#python-django-setup-venv)
+ [建立 Django 專案](#python-django-create-app)
+ [針對 Elastic Beanstalk 設定您的 Django 應用程式](#python-django-configure-for-eb) 
+ [使用 EB CLI 部署您的網站](#python-django-deploy) 
+ [更新您的應用程式](#python-django-update-app) 
+ [清除](#python-django-stopping)

## 先決條件
<a name="python-django-prereq"></a>

按照這個教學課程，您應安裝適用 Python 的所有[常見先決條件](python-development-environment.md)，包括下列套件：
+ Python 3.7 或更高版本
+ `pip`
+ `virtualenv`
+ `awsebcli`

教學中會安裝 [Django](https://www.djangoproject.com/) 架構。

**注意**  
要以 EB CLI 建立環境，就必須有[服務角色](concepts-roles-service.md)。您可以在 Elastic Beanstalk 主控台建立環境，以建立服務角色。如果您沒有服務角色，EB CLI 會嘗試在您執行 `eb create` 時為您建立。

## 設定 Python 虛擬環境並安裝 Django
<a name="python-django-setup-venv"></a>

透過 `virtualenv` 建立虛擬環境，並用其安裝 Django 及依存項目。透過虛擬環境，您可清楚分辨應用程式需要哪些套裝服務，以便在執行您應用程式的 Amazon EC2 執行個體上安裝所需套裝服務。

下列步驟示範 Unix 系統和 Windows 必須輸入的命令，以不同的標籤顯示。

**欲設定您的虛擬環境**

1. 建立名為 `eb-virt` 的虛擬環境。

------
#### [ Unix-based systems ]

   ```
   ~$ virtualenv ~/eb-virt
   ```

------
#### [ Windows ]

   ```
   C:\> virtualenv %HOMEPATH%\eb-virt
   ```

------

1. 啟用虛擬環境。

------
#### [ Unix-based systems ]

   ```
   ~$ source ~/eb-virt/bin/activate
   (eb-virt) ~$
   ```

------
#### [ Windows ]

   ```
   C:\>%HOMEPATH%\eb-virt\Scripts\activate
   (eb-virt) C:\>
   ```

------

   您的命令提示字元前方會加上 `(eb-virt)`，表示您正位於虛擬環境中。
**注意**  
其餘說明會顯示您主目錄的 Linux 命令提示字元 `~$`。在 Windows 上，此為 `C:\Users\USERNAME>`，其中 *USERNAME* 是您的 Windows 登入名稱。

1. 使用 `pip` 安裝 Django。

   ```
   (eb-virt)~$ pip install django==2.2
   ```
**注意**  
您安裝的 Django 版本必須與您在 Elastic Beanstalk Python 組態選擇用於部署應用程式的 Python 版本相容。如需部署的資訊，請參閱本主題中的 [使用 EB CLI 部署您的網站](#python-django-deploy)。  
如需目前 Python 平台版本的詳細資訊，請參閱《AWS Elastic Beanstalk 平台文件》**中的 [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)。  
如需 Django 版本與 Python 的相容性詳細資訊，請參閱 [What Python version can I use with Django?](https://docs.djangoproject.com/en/3.1/faq/install/#what-python-version-can-i-use-with-django)

1. 若要確認是否已安裝 Django，請輸入以下內容。

   ```
   (eb-virt)~$ pip freeze
   Django==2.2
   ...
   ```

   本命令列出您虛擬環境安裝的所有套件。稍後，使用此命令的輸出設定您的專案，以搭配 Elastic Beanstalk 使用。

## 建立 Django 專案
<a name="python-django-create-app"></a>

現在您已準備就緒，能夠建立 Django 專案並使用虛擬環境執行於您的機器。

**注意**  
本教學使用 Python 隨附的資料庫引擎 SQLite。這個資料庫會和您的專案檔案一同部署。至於生產環境，則建議使用 Amazon Relational Database Service (Amazon RDS)，並將之從您的環境中獨立出來。如需詳細資訊，請參閱[將 Amazon RDS 資料庫執行個體新增至 Python Elastic Beanstalk 環境](create-deploy-python-rds.md)。

**欲產生 Django 應用程式**

1. 啟用您的虛擬環境。

------
#### [ Unix-based systems ]

   ```
   ~$ source ~/eb-virt/bin/activate
   (eb-virt) ~$
   ```

------
#### [ Windows ]

   ```
   C:\>%HOMEPATH%\eb-virt\Scripts\activate
   (eb-virt) C:\>
   ```

------

   您的命令提示字元前方會加上 `(eb-virt)` 前綴，表示您正位於虛擬環境中。
**注意**  
其餘說明會顯示您主目錄的 Linux 命令提示字元 `~$` 以及 Linux 主目錄 `~/`。在 Windows 上，此為 `C:\Users\USERNAME>`，其中 *USERNAME* 是您的 Windows 登入名稱。

1. 使用 `django-admin startproject` 命令建立名為 `ebdjango` 的 Django 專案。

   ```
   (eb-virt)~$ django-admin startproject ebdjango
   ```

   此命令會建立名為 **ebdjango** 的標準 Django 網站，採用下列目錄結構。

   ```
   ~/ebdjango
     |-- ebdjango
     |   |-- __init__.py
     |   |-- settings.py
     |   |-- urls.py
     |   `-- wsgi.py
     `-- manage.py
   ```

1. 使用 `manage.py runserver` 在本機執行您的 Django 網站。

   ```
   (eb-virt) ~$ cd ebdjango
   ```

   ```
   (eb-virt) ~/ebdjango$ python manage.py runserver
   ```

1. 在 Web 瀏覽器中開啟 `http://127.0.0.1:8000/` 以檢視此網站。

1. 檢查伺服器日誌，以查看您請求的輸出。若要停止 Web 伺服器並返回您的虛擬環境，請按 **Ctrl\$1C**。

   ```
   Django version 2.2, using settings 'ebdjango.settings'
   Starting development server at http://127.0.0.1:8000/
   Quit the server with CONTROL-C.
   [07/Sep/2018 20:14:09] "GET / HTTP/1.1" 200 16348
   Ctrl+C
   ```

## 針對 Elastic Beanstalk 設定您的 Django 應用程式
<a name="python-django-configure-for-eb"></a>

現在您的本機已具備採用 Django 的網站，因此您可將其設定為透過 Elastic Beanstalk 進行部署。

根據預設，Elastic Beanstalk 會尋找名為 `application.py` 的檔案，以啟動您的應用程式。因為您建立的 Django 專案中不存在此檔案，所以您需要對您的應用程式環境稍加調整。您也必須設定環境變數，以便載入您的應用程式模組。

**欲針對 Elastic Beanstalk 設定您的網站**

1. 啟用您的虛擬環境。

------
#### [ Unix-based systems ]

   ```
   ~/ebdjango$ source ~/eb-virt/bin/activate
   ```

------
#### [ Windows ]

   ```
   C:\Users\USERNAME\ebdjango>%HOMEPATH%\eb-virt\Scripts\activate
   ```

------

1. 執行 `pip freeze`，然後將輸出儲存至名為 `requirements.txt` 的檔案。

   ```
   (eb-virt) ~/ebdjango$ pip freeze > requirements.txt
   ```

   Elastic Beanstalk 使用 `requirements.txt` 來判斷執行您應用程式的 EC2 執行個體應安裝哪些套件。

1. 建立名為 `.ebextensions` 的目錄。

   ```
   (eb-virt) ~/ebdjango$ mkdir .ebextensions
   ```

1. 在 `.ebextensions` 目錄中，新增具有下列文字的[組態檔案](ebextensions.md) `django.config`。  
**Example \$1/ebdjango/.ebextensions/django.config**  

   ```
   option_settings:
     aws:elasticbeanstalk:container:python:
       WSGIPath: ebdjango.wsgi:application
   ```

   `WSGIPath` 設定會指定 Elastic Beanstalk 用於啟動應用程式的 WSGI 指令碼之位置。
**注意**  
如果您使用的是 Amazon Linux AMI Python 平台版本 (Amazon Linux 2 之前的版本)，請將 `WSGIPath` 的數值替換為 `ebdjango/wsgi.py`。此範例中的數值適用於 Gunicorn WSGI 伺服器，Amazon Linux AMI 平台版本不支援此伺服器。

1. 使用 `deactivate` 命令停用您的虛擬環境。

   ```
   (eb-virt) ~/ebdjango$ deactivate
   ```

   每當需要將套裝服務新增至應用程式，或於本機執行應用程式時，即可重新啟用您的虛擬環境。

## 使用 EB CLI 部署您的網站
<a name="python-django-deploy"></a>

您已新增於 Elastic Beanstalk 部署應用程式所需的所有事物。您的專案目錄現應如下所示。

```
~/ebdjango/
|-- .ebextensions
|   `-- django.config
|-- ebdjango
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- db.sqlite3
|-- manage.py
`-- requirements.txt
```

接著，您將建立應用程式環境，並透過 Elastic Beanstalk 部署已設定的應用程式。

部署後，您要立即編輯 Django 的組態，將 Elastic Beanstalk 指派給您應用程式的網域名稱新增至 Django 的 `ALLOWED_HOSTS`。然後，您要重新部署應用程式。這是一個 Django 安全要求，旨在阻擋 HTTP `Host` 標頭攻擊。如需詳細資訊，請參閱[主機標頭驗證](https://docs.djangoproject.com/en/2.2/topics/security/#host-headers-virtual-hosting)。

**欲建立環境並部署您的 Django 應用程式**
**注意**  
本教學使用 EB CLI 做為部署機制，但您亦可使用 Elastic Beanstalk 主控台來部署內含您專案內容的 .zip 檔案。

1. 透過 **eb init** 命令初始化您的 EB CLI 儲存庫。

   ```
   ~/ebdjango$ eb init -p python-3.7 django-tutorial
   Application django-tutorial has been created.
   ```

   此命令會建立名為 `django-tutorial` 的應用程式。這也會設定您的本機儲存庫，使用最新的 Python 3.7 平台版本建立環境。

1. (選用) 再次執行 **eb init** 來設定預設金鑰對，藉此使用 SSH 連接至執行您應用程式的 EC2 執行個體：

   ```
   ~/ebdjango$ 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 init -i**。

1. 使用 **eb create** 建立環境並於其中部署您的應用程式。

   ```
   ~/ebdjango$ eb create django-env
   ```
**注意**  
若您看到了 "service role required" (需要服務角色) 錯誤訊息，請以互動方式執行 `eb create` (無須指定環境名稱)，EB CLI 便會為您建立角色。

   本命令會建立名為 `django-env` 的負載平衡 Elastic Beanstalk 環境。建立環境約需要 5 分鐘。當 Elastic Beanstalk 建立執行應用程式所需要的資源時，它會輸出 EB CLI 轉送至您終端機的資訊訊息。

1. 完成環境建立程序後，請執行 **eb status** 尋找新環境的網域名稱。

   ```
   ~/ebdjango$ eb status
   Environment details for: django-env
     Application name: django-tutorial
     ...
     CNAME: eb-django-app-dev.elasticbeanstalk.com
     ...
   ```

   您環境的網域名稱為 `CNAME` 屬性的數值。

1. 在 `settings.py` 目錄中，開啟檔案 `ebdjango`。找出 `ALLOWED_HOSTS` 設定，然後將您在上個步驟中找到的應用程式網域名稱新增至設定值中。如果您無法找到檔案中的這個設定，請在新行中新增。

   ```
   ...
   ALLOWED_HOSTS = ['eb-django-app-dev.elasticbeanstalk.com']
   ```

1. 儲存檔案，然後執行 **eb deploy** 來部署應用程式。執行 **eb deploy** 時，EB CLI 會封裝您專案目錄的內容，並將其部署至您的環境。

   ```
   ~/ebdjango$ eb deploy
   ```
**注意**  
如果您使用 Git 來處理專案，請參閱[搭配 Git 使用 EB CLI](eb3-cli-git.md)。

1. 完成環境更新程序後，請使用 **eb open** 開啟您的網站。

   ```
   ~/ebdjango$ eb open
   ```

   這會開啟瀏覽器視窗，並使用為應用程式建立的網域名稱。您應該會看到與本機建立和測試相同的 Django 網站。

若未顯示您的應用程式正在執行，或收到錯誤訊息，請參閱[疑難排解部署](troubleshooting.md#troubleshooting-deployments)尋求協助，以判斷錯誤發生的原因。

若您「確實」**看見您的應用程式正在執行，恭喜您，您透過 Elastic Beanstalk 部署的第一個 Django 應用程式已完成！

## 更新您的應用程式
<a name="python-django-update-app"></a>

現在，您已於 Elastic Beanstalk 上執行應用程式，可以更新並重新部署應用程式或其組態，Elastic Beanstalk 會負責更新您的執行個體，並啟動新的應用程式版本。

在此範例中，我們將啟用 Django 管理主控台，並進行數項設定。

### 修改您的網站設定
<a name="python-django-modify-site"></a>

根據預設，您的 Django 網站會使用 UTC 時區顯示時間。您可在 `settings.py` 中指定時區來進行變更。

**欲變更您網站的時區**

1. 在 `settings.py` 中修改 `TIME_ZONE` 設定。  
**Example \$1/ebdjango/ebdjango/settings.py**  

   ```
   ...
   # Internationalization
   LANGUAGE_CODE = 'en-us'
   TIME_ZONE = 'US/Pacific'
   USE_I18N = True
   USE_L10N = True
   USE_TZ = True
   ```

   如需時區清單，請造訪[此頁面](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。

1. 將應用程式部署至您的 Elastic Beanstalk 環境。

   ```
   ~/ebdjango/$ eb deploy
   ```

### 建立網站管理員
<a name="python-django-create-admin"></a>

您可以為 Django 應用程式建立網站管理員，從網站直接存取管理主控台。管理員登入詳細資訊安全存放於本機資料庫映像，位於 Django 產生的預設專案中。

**欲建立網站管理員**

1. 初始化您 Django 應用程式的本機資料庫。

   ```
   (eb-virt) ~/ebdjango$ python manage.py migrate
   Operations to perform:
     Apply all migrations: admin, auth, contenttypes, sessions
   Running migrations:
     Applying contenttypes.0001_initial... OK
     Applying auth.0001_initial... OK
     Applying admin.0001_initial... OK
     Applying admin.0002_logentry_remove_auto_add... OK
     Applying admin.0003_logentry_add_action_flag_choices... OK
     Applying contenttypes.0002_remove_content_type_name... OK
     Applying auth.0002_alter_permission_name_max_length... OK
     Applying auth.0003_alter_user_email_max_length... OK
     Applying auth.0004_alter_user_username_opts... OK
     Applying auth.0005_alter_user_last_login_null... OK
     Applying auth.0006_require_contenttypes_0002... OK
     Applying auth.0007_alter_validators_add_error_messages... OK
     Applying auth.0008_alter_user_username_max_length... OK
     Applying auth.0009_alter_user_last_name_max_length... OK
     Applying sessions.0001_initial... OK
   ```

1. 執行 `manage.py createsuperuser` 以建立管理員。

   ```
   (eb-virt) ~/ebdjango$ python manage.py createsuperuser
   Username: admin
   Email address: me@mydomain.com
   Password: ********
   Password (again): ********
   Superuser created successfully.
   ```

1. 若要指示 Django 存放靜態檔案的位置，請在 `settings.py` 中定義 `STATIC_ROOT`。  
**Example \$1/ebdjango/ebdjango/settings.py**  

   ```
   # Static files (CSS, JavaScript, Images)
   # https://docs.djangoproject.com/en/2.2/howto/static-files/
   STATIC_URL = '/static/'
   STATIC_ROOT = 'static'
   ```

1. 執行 `manage.py collectstatic`，將管理員網站的靜態資產 (JavaScript、CSS 和映像) 填入 `static` 目錄。

   ```
   (eb-virt) ~/ebdjango$ python manage.py collectstatic
   119 static files copied to ~/ebdjango/static
   ```

1. 部署您的應用程式。

   ```
   ~/ebdjango$ eb deploy
   ```

1. 在您的瀏覽器中開啟網站，並將 `/admin/` 附加至網站 URL，藉此檢視管理主控台，如下所示。

   ```
   http://djang-env.p33kq46sfh.us-west-2.elasticbeanstalk.com/admin/
   ```  
![\[輸入您在步驟 2 建立的使用者名稱和密碼，即可登入管理主控台。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/eb_django_admin_login.png)

1. 使用您於步驟 2 中設定的使用者名稱和密碼登入。  
![\[以 Elastic Beanstalk 部署的 Django 網站的 Django 管理主控台\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/eb_django_admin_console.png)

您可以使用類似於本機更新/測試的程序，之後進行 **eb deploy**。Elastic Beanstalk 會負責更新線上伺服器，因此您能夠專心開發應用程式，不受伺服器管理作業影響！

### 新增資料庫遷移組態檔案
<a name="python-django-migrate-site"></a>

您可以將命令新增至 `.ebextensions` 指令碼，這是更新網站時所執行的指令碼。這可讓您自動產生資料庫遷移。

**欲在部署應用程式時新增遷移步驟**

1. 使用下列內容，建立名為 `db-migrate.config` 的[組態檔案](ebextensions.md)。  
**Example \$1/ebdjango/.ebextensions/db-migrate.config**  

   ```
   container_commands:
     01_migrate:
       command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
       leader_only: true
   option_settings:
     aws:elasticbeanstalk:application:environment:
       DJANGO_SETTINGS_MODULE: ebdjango.settings
   ```

   此組態檔案會先在部署過程中啟用伺服器的虛擬環境並執行 `manage.py migrate` 命令，再啟動您的應用程式。由於此命令在啟動應用程式前執行，因此您必須明確設定 `DJANGO_SETTINGS_MODULE` 環境變數 (`wsgi.py` 通常會於啟動時負責此作業)。於命令中指定 `leader_only: true`，可確保當您部署多個執行個體時，該命令僅執行一次。

1. 部署您的應用程式。

   ```
   ~/ebdjango$ eb deploy
   ```

## 清除
<a name="python-django-stopping"></a>

若要在開發工作階段之間節省執行個體時數和其他 AWS 資源，請使用 終止您的 Elastic Beanstalk 環境**eb terminate**。

```
~/ebdjango$ eb terminate django-env
```

此命令會終止環境和其中執行的所有 AWS 資源。但它不會刪除應用程式，因此您隨時能夠再次執行 **eb create**，以同一組態建立更多的環境。

如不再需要範例應用程式，您也可以移除專案資料夾和虛擬環境。

```
~$ rm -rf ~/eb-virt
~$ rm -rf ~/ebdjango
```

## 後續步驟
<a name="python-django-next-steps"></a>

如需 Django 的詳細資訊 (包括更深入的教學)，請參閱[官方文件](https://docs.djangoproject.com/en/2.2/)。

若欲嘗試其他 Python Web 框架，請參閱[將 Flask 應用程式部署至 Elastic Beanstalk](create-deploy-python-flask.md)。

# 將 Amazon RDS 資料庫執行個體新增至 Python Elastic Beanstalk 環境
<a name="create-deploy-python-rds"></a>

本主題提供了使用 Elastic Beanstalk 主控台建立 Amazon RDS 的說明。您可以使用 Amazon Relational Database Service (Amazon RDS) 資料庫執行個體存放由應用程式收集與修改的資料。資料庫可與環境耦合並由 Elastic Beanstalk 管理，或者由另一項服務在外部分開建立與管理。在這些指示中，資料庫會與您的環境耦合，並由 Elastic Beanstalk 管理。如需將 Amazon RDS 與 Elastic Beanstalk 整合的相關詳細資訊，請參閱 [將資料庫新增至您的 Elastic Beanstalk 環境](using-features.managing.db.md)。

**Topics**
+ [將資料庫執行個體新增到您的環境](#python-rds-create)
+ [下載驅動程式](#python-rds-drivers)
+ [連線至資料庫](#python-rds-connect)

## 將資料庫執行個體新增到您的環境
<a name="python-rds-create"></a>

**欲將資料庫執行個體新增到您的環境**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇 **Configuration (組態)**。

1. 在 **Database (資料庫)** 組態類別中，選擇 **Edit (編輯)**。

1. 選擇資料庫引擎，並輸入使用者名稱和密碼。

1. 若要儲存變更，請選擇頁面底部的**儲存變更**。

新增資料庫執行個體約需要 10 分鐘。環境更新完成時，資料庫執行個體的主機名稱和其他連線資訊會透過下列環境屬性提供給您的應用程式：


| 屬性名稱 | 描述 | 屬性值 | 
| --- | --- | --- | 
|  `RDS_HOSTNAME`  |  資料庫執行個體的主機名稱。  |  在 Amazon RDS 主控台：**端點**的**連線能力和安全性**索引標籤上。  | 
|  `RDS_PORT`  |  資料庫執行個體接受連線的連接埠。預設值在不同資料庫引擎中有所差異。  |  在 Amazon RDS 主控台：**連接埠**的**連線能力和安全性**索引標籤上。  | 
|  `RDS_DB_NAME`  |  資料庫名稱，**ebdb**。  |  在 Amazon RDS 主控台：**資料庫名稱**的**組態**索引標籤上。  | 
|  `RDS_USERNAME`  |  您為資料庫設定的使用者名稱。  |  在 Amazon RDS 主控台：**主要使用者名稱**的**組態**索引標籤上。  | 
|  `RDS_PASSWORD`  |  您為資料庫設定的密碼。  |  無法在 Amazon RDS 主控台中提供參考。  | 

如需設定與 Elastic Beanstalk 環境耦合之資料庫執行個體的相關詳細資訊，請參閱 [將資料庫新增至您的 Elastic Beanstalk 環境](using-features.managing.db.md)。

## 下載驅動程式
<a name="python-rds-drivers"></a>

將資料庫驅動程式新增到您專案的[要求檔案](python-configuration-requirements.md)中。

**Example requirements.txt – 使用 MySQL 的 Django**  

```
Django==2.2
mysqlclient==2.0.3
```

**適用於 Python 的常見驅動程式套件**
+ **MySQL** – `mysqlclient`
+ **PostgreSQL** – `psycopg2`
+ **Oracle** – `cx_Oracle`
+ **SQL Server** – `adodbapi`

有關更多信息，請參閱 [Python 資料庫界面](https://wiki.python.org/moin/DatabaseInterfaces)和 [Django 2.2 - 支援的資料庫](https://docs.djangoproject.com/en/2.2/ref/databases)。

## 連線至資料庫
<a name="python-rds-connect"></a>

Elastic Beanstalk 會在環境屬性中提供已連接的資料庫執行個體連線資訊。使用 `os.environ['VARIABLE']` 來讀取屬性和設定資料庫的連線。

**Example Django 設定檔案 – 資料庫字典**  

```
import os

if 'RDS_HOSTNAME' in os.environ:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': os.environ['RDS_DB_NAME'],
            'USER': os.environ['RDS_USERNAME'],
            'PASSWORD': os.environ['RDS_PASSWORD'],
            'HOST': os.environ['RDS_HOSTNAME'],
            'PORT': os.environ['RDS_PORT'],
        }
    }
```

# Python 工具與資源
<a name="create-deploy-python-tools-resources"></a>

在開發 Python 應用程式時，您可以造訪幾個地方來取得額外的協助：


****  

| 資源 | Description | 
| --- | --- | 
| [適用於 Python (Boto3) 的 AWS SDK GitHub 上的](https://github.com/boto/boto3) | 安裝來自 GitHub 的 Boto3。 | 
| [適用於 Python (Boto3) 的 AWS SDK 首頁](https://aws.amazon.com//sdk-for-python/) |  適用於 Python (Boto3) 的 AWS SDK 首頁。 | 
| [Python 開發人員中心](https://aws.amazon.com/python/) | 可取得範本程式碼、文件、工具和其他資源等一應俱全的場所。 | 