

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

# 使用 Elastic Beanstalk 部署 PHP 應用程式
<a name="create_deploy_PHP_eb"></a>

您可以使用 Elastic Beanstalk 命令列界面 (EB CLI) 或 Elastic Beanstalk 主控台，在幾分鐘內部署 PHP 應用程式。若要了解如何進行，請從 QuickStart 教學課程開始，然後檢閱進階範例。

將 PHP 應用程式部署至 Elastic Beanstalk 的資源
+ [適用於 PHP 的 QuickStart ](php-quickstart.md) — Step-by-step說明。 **
+ [使用 Elastic Beanstalk PHP 平台](create_deploy_PHP.container.md) — 如何使用 PHP 專用的平台功能。
+ [進階 範例](php-samples.md) — 如何教學常見的 PHP 架構和應用程式，以及如何將 Amazon RDS 資料庫新增至您的環境。

如需使用 PHP in 進行開發的詳細資訊 AWS，請參閱下列資源：
+ [GitHub](https://github.com/aws/aws-sdk-php/) — 使用 GitHub 安裝適用於 PHP 的 AWS SDK。
+ [PHP 開發人員中心](https://aws.amazon.com/php/) — 用於開發 PHP 應用程式的工具、文件和範本程式碼 AWS。
+ [AWS 適用於 PHP 的 SDK FAQs](https://docs.aws.amazon.com/aws-sdk-php/guide/latest/faq.html) — 取得常見問題的答案。

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

在以下教學課程中，您將了解如何使用 EB CLI 建立範例 PHP 應用程式並將其部署到 AWS Elastic Beanstalk 環境。

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

**Topics**
+ [AWS 您的帳戶](#php-quickstart-aws-account)
+ [先決條件](#php-quickstart-prereq)
+ [步驟 1：建立 PHP 應用程式](#php-quickstart-create-app)
+ [步驟 2：在本機執行應用程式](#php-quickstart-run-local)
+ [步驟 3：初始化和部署您的 PHP 應用程式](#php-quickstart-deploy)
+ [步驟 4：瀏覽您的雲端應用程式](#php-quickstart-run-eb-ap)
+ [步驟 5：更新並重新部署您的應用程式](#php-quickstart-run-eb-ap)
+ [清除](#php-quickstart-cleanup)
+ [後續步驟](#php-quickstart-next-steps)

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

如果您還不是 AWS 客戶，則需要建立 AWS 帳戶才能使用 Elastic Beanstalk。

### 建立 AWS 帳戶
<a name="php-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="php-quickstart-prereq"></a>
+ Elastic Beanstalk 命令列界面 - 如需安裝，請參閱[使用設定指令碼安裝 EB CLI （建議）](eb-cli3.md#eb-cli3-install)。
+ PHP - 遵循 PHP 網站上的安裝[和組態](https://www.php.net/manual/en/install.php)說明，在本機電腦上安裝 PHP。

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

在此快速入門中，您將建立 *Hello World* PHP 應用程式。

建立專案目錄。

```
~$ mkdir eb-php
~$ cd eb-php
```

接著，在專案目錄中建立 `index.php` 檔案，並新增下列程式碼。

**Example `index.php`**  

```
<?php
  echo "Hello from a PHP application running in Elastic Beanstalk!";
?>
```

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

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

```
~$ php -S localhost:5000
```

開啟瀏覽器至 [http://localhost:5000](http://localhost:5000)。

您應該會在瀏覽器中看到 hello 訊息，並在終端機中記錄訊息。

輸入 來停止本機伺服器`Control+c`，讓您可以部署 Elastic Beanstalk。

## 步驟 3：初始化和部署您的 PHP 應用程式
<a name="php-quickstart-deploy"></a>

接著，您將使用 Elastic Beanstalk 主控台或 EB CLI 將應用程式部署至*環境*。在本教學課程中，您將使用 EB CLI 搭配互動式選項來初始化環境。

**初始化您的環境並建立環境**

1. 執行下列 **init** 命令。

   ```
   ~$ eb init -i
   ```

   init 命令會以互動方式建立應用程式。應用程式名稱預設為本機資料夾，即 `eb-php`。

   對於除 SSH 存取之外的所有提示，接受預設值以使用最新的 PHP 平台版本建立環境。若要對執行個體進行疑難排解，您可以稍後重新執行`eb init -i`命令來設定 SSH 存取，或使用 Amazon EC2 Instance Connect 或 Session Manager 進行連線。

1. 建立環境並部署您的應用程式

   執行下列命令來建立名為 的環境`blue-env`。

   ```
   ~$ eb create blue-env
   ```

   當您第一次執行 **eb create**命令時，Elastic Beanstalk 會自動建置應用程式的 zip 檔案，稱為*原始碼套件*。接著，Elastic Beanstalk 會建立具有一或多個 Amazon EC2 執行個體的環境，然後將應用程式部署到環境中。

   將您的應用程式部署到 Elastic Beanstalk 最多可能需要五分鐘。

## 步驟 4：瀏覽您的雲端應用程式
<a name="php-quickstart-run-eb-ap"></a>

當建立環境的程序完成時，您的應用程式應該正在執行並接聽連接埠 5000 上的請求。使用下列命令連線至您的應用程式：

```
~$ eb open
```

`eb open` 命令會開啟瀏覽器索引標籤，以存取為您的應用程式建立的自訂子網域。

## 步驟 5：更新並重新部署您的應用程式
<a name="php-quickstart-run-eb-ap"></a>

建立應用程式並部署到環境之後，您可以隨時部署新版本的應用程式或不同的應用程式。部署新的應用程式版本更快，因為它不需要佈建或重新啟動 Amazon EC2 執行個體。

更新您的 PHP 程式碼，以包含伺服器環境中的 REQUEST\$1TIME 值：

```
<?php
  echo "Hello from a PHP application running in Elastic Beanstalk!";
  
  $timestamp = $_SERVER['REQUEST_TIME'];
  echo '<br/>Request time: ' . date('Y/m/d H:i:s', $timestamp);
?>
```

使用以下命令將您的 PHP 程式碼重新部署到 Elastic Beanstalk：

```
~$ eb deploy
```

執行 **eb deploy** 時，EB CLI 會封裝您專案目錄的內容，並將其部署至您的環境。

部署完成後，請重新整理頁面或使用 重新連線至您的應用程式`eb open`。您應該會看到您的更新。如果沒有，請再次執行本機伺服器以驗證您的變更進行故障診斷。

****恭喜您！****  
您已使用 Elastic Beanstalk 建立、部署和更新 PHP 應用程式！

## 清除
<a name="php-quickstart-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 terminate
```

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

您可以使用 Elastic Beanstalk 主控台探索應用程式環境。如需詳細資訊，請參閱[探索您的環境](GettingStarted.md#GettingStarted.Explore)。

如需使用 PHP 的進階範例，請參閱 [Elastic Beanstalk 中 PHP 的進階範例](php-samples.md)。

# 使用 Elastic Beanstalk PHP 平台
<a name="create_deploy_PHP.container"></a>

AWS Elastic Beanstalk 為不同版本的 PHP 提供和支援各種**平台分支**。這些平台支援獨立執行或在 Composer 下執行的 PHP Web 應用程式。如需支援平台分支的完整清單，*AWS Elastic Beanstalk 請參閱平台*文件中的 [PHP](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP)。

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

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

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

若使用 Composer，您可將 [`composer.json` 檔案納入](#php-configuration-composer)您的原始碼套件，藉此於部署期間安裝套件。

以未做為組態選項提供的進階 PHP 組態和 PHP 設定而言，您可以[使用組態檔案來提供 `INI` 檔案](#php-configuration-phpini)，以此擴展並覆寫 Elastic Beanstalk 套用的預設設定，或以此安裝其他延伸模組。

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

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

**Topics**
+ [安裝適用於 PHP 的 AWS SDK](#php-development-environment-sdk)
+ [PHP 8.1 on Amazon Linux 2 注意事項](#php-8-1-considerations)
+ [設定您的 PHP 環境](#php-console)
+ [組態的命名空間](#php-namespaces)
+ [安裝相依項目](#php-configuration-composer)
+ [更新 Composer](#php-configuration-composerupdate)
+ [擴展 php.ini](#php-configuration-phpini)

## 安裝適用於 PHP 的 AWS SDK
<a name="php-development-environment-sdk"></a>

如果您需要從應用程式中管理 AWS 資源，請安裝 適用於 PHP 的 AWS SDK。例如，透過適用於 PHP 的開發套件，您可以使用 Amazon DynamoDB (DynamoDB) 來存放使用者和工作階段資訊，無須建立關聯式資料庫。

使用 Composer 安裝適用於 PHP 的 SDK

```
$ composer require aws/aws-sdk-php
```

如需詳細資訊，請參閱 [AWS SDK for PHP](https://aws.amazon.com/sdk-for-php/) 首頁。如需說明，請參閱[安裝 AWS SDK for PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/getting-started_installation.html)。

## PHP 8.1 on Amazon Linux 2 注意事項
<a name="php-8-1-considerations"></a>

如果使用的是 *PHP 8.1 on Amazon Linux 2* 平台分支，請閱讀本節。

### PHP 8.1 on Amazon Linux 2 注意事項
<a name="php-8-1-considerations-detail"></a>

**注意**  
本主題中的資訊僅適用於 *PHP 8.1 on Amazon Linux 2* 平台分支。不適用於基於 AL2023 的 PHP 平台分支。也不適用於 *PHP 8.0 Amazon Linux 2* 平台分支。

Elastic Beanstalk 會將 EC2 執行個體上 *PHP 8.1 on Amazon Linux 2* 平台分支的 PHP 8.1 相關 RPM 套件儲存在本機目錄中，而不是 Amazon Linux 儲存庫中。您可以使用 **rpm -i ** 來安裝套件。從 [PHP 8.1 平台版本 3.5.0](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-10-03-linux.html) 開始，Elastic Beanstalk 會將與 PHP 8.1 有關的 RPM 套件儲存在以下本機 EC2 目錄中。

 `/opt/elasticbeanstalk/RPMS` 

以下範例會安裝 *php-debuginfo* 套件。

```
$rpm -i /opt/elasticbeanstalk/RPMS/php-debuginfo-8.1.8-1.amzn2.x86_64.rpm
```

套件名稱中的版本會因 EC2 本機目錄 `/opt/elasticbeanstalk/RPMS` 中所列的實際版本而有所不同。使用相同的語法來安裝其他 PHP 8.1 RPM 套件。

展開以下區塊，顯示我們提供的 RPM 套件清單。

#### RPM 套件
<a name="php-8-1-considerations-detail-rpm-packages"></a>

以下清單提供 Elastic Beanstalk PHP 8.1 平台在 Amazon Linux 2 上提供的 RMP 套件。這些位於本機目錄 `/opt/elasticbeanstalk/RPMS` 中。

列示套件名稱中的版本編號 *8.1.8-1* 和 *3.7.0-1* 僅為範例。
+ `php-8.1.8-1.amzn2.x86_64.rpm`
+ `php-bcmath-8.1.8-1.amzn2.x86_64.rpm`
+ `php-cli-8.1.8-1.amzn2.x86_64.rpm`
+ `php-common-8.1.8-1.amzn2.x86_64.rpm`
+ `php-dba-8.1.8-1.amzn2.x86_64.rpm`
+ `php-dbg-8.1.8-1.amzn2.x86_64.rpm`
+ `php-debuginfo-8.1.8-1.amzn2.x86_64.rpm`
+ `php-devel-8.1.8-1.amzn2.x86_64.rpm`
+ `php-embedded-8.1.8-1.amzn2.x86_64.rpm`
+ `php-enchant-8.1.8-1.amzn2.x86_64.rpm`
+ `php-fpm-8.1.8-1.amzn2.x86_64.rpm`
+ `php-gd-8.1.8-1.amzn2.x86_64.rpm`
+ `php-gmp-8.1.8-1.amzn2.x86_64.rpm`
+ `php-intl-8.1.8-1.amzn2.x86_64.rpm`
+ `php-ldap-8.1.8-1.amzn2.x86_64.rpm`
+ `php-mbstring-8.1.8-1.amzn2.x86_64.rpm`
+ `php-mysqlnd-8.1.8-1.amzn2.x86_64.rpm`
+ `php-odbc-8.1.8-1.amzn2.x86_64.rpm`
+ `php-opcache-8.1.8-1.amzn2.x86_64.rpm`
+ `php-pdo-8.1.8-1.amzn2.x86_64.rpm`
+ `php-pear-1.10.13-1.amzn2.noarch.rpm`
+ `php-pgsql-8.1.8-1.amzn2.x86_64.rpm`
+ `php-process-8.1.8-1.amzn2.x86_64.rpm`
+ `php-pspell-8.1.8-1.amzn2.x86_64.rpm`
+ `php-snmp-8.1.8-1.amzn2.x86_64.rpm`
+ `php-soap-8.1.8-1.amzn2.x86_64.rpm`
+ `php-sodium-8.1.8-1.amzn2.x86_64.rpm`
+ `php-xml-8.1.8-1.amzn2.x86_64.rpm`
+ `php-pecl-imagick-3.7.0-1.amzn2.x86_64.rpm`
+ `php-pecl-imagick-debuginfo-3.7.0-1.amzn2.x86_64.rpm`
+ `php-pecl-imagick-devel-3.7.0-1.amzn2.noarch.rpm`

您可以使用 PEAR 和 PECL 套件來安裝常見的擴充功能。如需 PEAR 的詳細資訊，請參閱 [PEAR PHP 擴充功能和應用程式儲存庫](https://pear.php.net)網站。如需 PECL 的詳細資訊，請參閱 [PECL 擴充功能](https://pecl.php.net)網站。

以下範例命令會安裝 Memcached 擴充功能。

```
$pecl install memcache
```

或者您也可以使用以下內容：

```
$pear install pecl/memcache
```

以下範例命令會安裝 Redis 擴充功能。

```
$pecl install redis
```

或者您也可以使用以下內容：

```
$pear install pecl/redis
```

## 設定您的 PHP 環境
<a name="php-console"></a>

您可以使用 Elastic Beanstalk 主控台來啟用至 Amazon S3 的日誌輪換，設定您的應用程式可以從環境讀取的變數，並變更 PHP 設定。

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

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

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

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

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

### PHP 設定
<a name="php-console-settings"></a>
+ **代理伺服器** – 要在您的環境執行個體上使用的代理伺服器。預設使用 nginx。
+ **文件根目錄** – 內含您網站預設頁面的資料夾。若您的歡迎頁面並非位於原始碼套件的根目錄，請指定相對於根路徑所在的資料夾。例如，若歡迎頁面位於名為 `/public` 的資料夾，則為 `public`。
+ **記憶體限制** – 允許指令碼進行記憶體配置的容量上限。例如 `512M`。
+ **Zlib 輸出壓縮** – 設定為 `On` 以壓縮回應資料。
+ **允許 URL fopen** – 設定為 `Off` 以避免指令碼自遠端位置下載檔案。
+ **顯示錯誤** – 設定為 `On` 以顯示用於除錯的內部錯誤訊息。
+ **執行時間上限** – 指令碼於環境將其終止前可執行的時間上限 (秒)。

### 日誌選項
<a name="php-console-logs"></a>

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

### 靜態檔案
<a name="php-console-staticfiles"></a>

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

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

### 環境屬性
<a name="php-console-properties"></a>

**Environment Properties (環境屬性)** 的部分可讓您針對執行您應用程式的 Amazon EC2 執行個體，來指定其上的環境資訊設定。這些設定會以金鑰值對的形式傳到應用程式。

您的應用程式程式碼可以使用 `$_SERVER` 或 `get_cfg_var` 函數來存取環境屬性。

```
$endpoint = $_SERVER['API_ENDPOINT'];
```

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

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

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

下列命名空間會同時設定代理服務和 PHP 特定選項：
+ [`aws:elasticbeanstalk:environment:proxy:staticfiles`](command-options-general.md#command-options-general-environmentproxystaticfiles) – 設定環境代理來提供靜態檔案。您可以定義虛擬路徑到應用程式目錄的對應項目。
+ [`aws:elasticbeanstalk:environment:proxy`](command-options-specific.md#command-options-php) – 指定環境的代理伺服器。
+ [`aws:elasticbeanstalk:container:php:phpini`](command-options-specific.md#command-options-php) – 設定 PHP 特定選項。此命名空間包含 `composer_options`，無法在 Elastic Beanstalk 主控台上使用。此選項會設定透過 `composer.phar install`命令使用 Composer 安裝相依性時要使用的自訂選項。如需此命令的詳細資訊，包括可用選項，請參閱 https：//*getcomposer.org* 網站上的 [安裝](https://getcomposer.org/doc/03-cli.md#install-i)。

下列範例[組態檔案](ebextensions.md)會指定靜態檔案選項， 將名為 `staticimages` 的目錄對應至路徑 `/images`，並顯示 `aws:elasticbeanstalk:container:php:phpini` 命名空間中每個可用選項的設定：

**Example .ebextensions/php-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /images: staticimages
  aws:elasticbeanstalk:container:php:phpini:
    document_root: /public
    memory_limit: 128M
    zlib.output_compression: "Off"
    allow_url_fopen: "On"
    display_errors: "Off"
    max_execution_time: 60
    composer_options: vendor/package
```

**注意**  
`aws:elasticbeanstalk:environment:proxy:staticfiles` 命名空間未在 Amazon Linux AMI PHP 平台分支上定義 (前述的 Amazon Linux 2)。

Elastic Beanstalk 可提供許多組態選項讓您自訂環境。除了組態檔案，您也可以使用主控台、已儲存組態、EB CLI 或 AWS CLI來設定組態選項。如需詳細資訊，請參閱[組態選項](command-options.md)。

## 安裝 Elastic Beanstalk PHP 應用程式的相依性
<a name="php-configuration-composer"></a>

本主題說明如何設定應用程式來安裝其所需的其他 PHP 套件。您的應用程式可能會對其他 PHP 套件有相依性。您可以設定應用程式，以在本環境的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上安裝相依性。或者也可以將您應用程式的相依性加到原始碼套件內，再與應用程式一同部署。下節會介紹這兩種方式。

### 使用 Composer 檔案在執行個體上安裝相依性
<a name="php-configuration-composer.oninstances"></a>

請使用您專案來源根目錄內的 `composer.json` 檔案，使用 Composer 在您環境的 Amazon EC2 執行個體上安裝您應用程式所需的套件。

**Example composer.json**  

```
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
```

當 `composer.json` 檔案存在時，Elastic Beanstalk 會執行 `composer.phar install` 來安裝相依性。您可於 `aws:elasticbeanstalk:container:php:phpini` 命名空間設定 [`composer_options` 選項](#php-namespaces)，藉此新增附加命令的選項。

### 在原始碼套件中加入相依性
<a name="php-configuration-composer.inbundle"></a>

如果您的應用程式擁有相當大量的相依性，安裝過程可能會花上相當長的時間。如此會增加部署和擴展方面的操作，因為每個新的執行個體上都要安裝相依性。

若要避免影響到部署時間，請在您的開發環境中使用 Composer 來解決相依性的問題，並將相依性安裝到 `vendor` 資料夾。

**將相依性加入應用程式原始碼套件**

1. 執行以下命令：

   ```
   % composer install
   ```

1. 將產生的 `vendor` 資料夾加到您應用程式來源原始碼套件的根目錄。

當 Elastic Beanstalk 找到執行個體上的 `vendor` 資料夾時，會忽略 `composer.json` 檔案 (即使存在)。接著您的應用程式會使用來自 `vendor` 資料夾的相依性。

## 在 Elastic Beanstalk 上更新 Composer
<a name="php-configuration-composerupdate"></a>

本主題說明如何設定 Elastic Beanstalk 讓 Composer 保持在最新狀態。如果您在嘗試使用 Composer 檔案安裝套件時遇到錯誤，或者無法使用最新的平台版本，則可能需要更新 Composer。在平台更新之間，您可以透過在 [`.ebextensions`](ebextensions.md) 資料夾中使用組態檔案來更新環境執行個體中的 Composer。

您可以使用下列組態來自行更新 Composer。

```
commands:
  01updateComposer:
    command: /usr/bin/composer.phar self-update 2.7.0
```

下列[選項設定](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment)會設定`COMPOSER_HOME`環境變數，以設定 Composer 快取的位置。

```
option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /home/webapp/composer-home
```

您可以在`.ebextensions`資料夾中的相同組態檔案中合併這兩個組態檔案。

**Example .ebextensions/composer.config**  

```
commands:
  01updateComposer:
    command: /usr/bin/composer.phar self-update 2.7.0
    
option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /home/webapp/composer-home
```

**注意**  
由於 [2024 年 2 月 22](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2024-02-22-al2023.html) 日 Composer 安裝的更新、AL2023 平台版本和 [2024 年 2 月 28](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2024-02-28-al2.html) 日 AL2 平台版本，如果`COMPOSER_HOME`在自我更新執行時設定 ，則 Composer 自我更新可能會失敗。  
下列合併命令將無法執行： `export COMPOSER_HOME=/home/webapp/composer-home && /usr/bin/composer.phar self-update 2.7.0`  
不過，先前的範例將會運作。在先前的範例中， 的選項設定`COMPOSER_HOME`不會傳遞至`01updateComposer`執行，而且不會在自我更新命令執行時設定。

**重要**  
若您的 `composer.phar self-update` 命令省略版本編號，則您每次部署原始碼時，或當 Auto Scaling 佈建新的執行個體時，Composer 都將更新。若已發行的 Composer 版本與您的應用程式不相容，可能導致擴展操作和部署失敗。

如需 Elastic Beanstalk PHP 平台的詳細資訊，包括 Composer 版本，請參閱文件《AWS Elastic Beanstalk 平台》**中的 [PHP 平台版本](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP)。

## 在 Elastic Beanstalk 組態中擴展 php.ini
<a name="php-configuration-phpini"></a>

使用帶有 `files` 區塊的組態檔案，將 `.ini` 檔案新增至您環境執行個體上的 `/etc/php.d/`。主要的組態檔案 `php.ini`，會自此資料夾依字母順序提取檔案的設定。此資料夾內的檔案預設會啟用許多延伸模組。

**Example .ebextensions/mongo.config**  

```
files:
  "/etc/php.d/99mongo.ini":
    mode: "000755"
    owner: root
    group: root
    content: |
      extension=mongo.so
```

# Elastic Beanstalk 中 PHP 的進階範例
<a name="php-samples"></a>

若要開始使用 PHP 應用程式 AWS Elastic Beanstalk，您需要應用程式[原始碼套件](applications-sourcebundle.md)來上傳，做為部署到環境的第一個應用程式版本。

我們建議您[適用於 PHP 的 QuickStart ](php-quickstart.md)開始使用使用 EB CLI 部署的簡單 PHP 應用程式。

**Topics**
+ [新增資料庫](create_deploy_PHP.rds.md)
+ [教學課程 - Laravel](php-laravel-tutorial.md)
+ [教學課程 - CakePHP](php-cakephp-tutorial.md)
+ [教學課程 - Symfony](php-symfony-tutorial.md)
+ [教學課程 - HA 生產](php-ha-tutorial.md)
+ [教學課程 - HA WordPress](php-hawordpress-tutorial.md)
+ [教學課程 - HA Drupal](php-hadrupal-tutorial.md)

# 將 Amazon RDS 資料庫執行個體新增至您的 PHP Elastic Beanstalk 環境
<a name="create_deploy_PHP.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**
+ [將資料庫執行個體新增到您的環境](#php-rds-create)
+ [下載驅動程式](#php-rds-drivers)
+ [使用 PDO 或 MySQLi 連接至資料庫](#php-rds-connect)
+ [使用 Symfony 連接至資料庫](#php-rds-symfony)

## 將資料庫執行個體新增到您的環境
<a name="php-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="php-rds-drivers"></a>

欲使用 PHP 資料物件 (PDO) 來連接至資料庫，請安裝與您所選的資料庫引擎相符的驅動程式。
+ **MySQL** – [http://php.net/manual/en/ref.pdo-mysql.php](http://php.net/manual/en/ref.pdo-mysql.php)
+ **PostgreSQL** – [http://php.net/manual/en/ref.pdo-pgsql.php](http://php.net/manual/en/ref.pdo-pgsql.php)
+ **Oracle** – [http://php.net/manual/en/ref.pdo-oci.php](http://php.net/manual/en/ref.pdo-oci.php)
+ **SQL Server** – [http://php.net/manual/en/ref.pdo-sqlsrv.php](http://php.net/manual/en/ref.pdo-sqlsrv.php)

如需詳細資訊，請參閱[http://php.net/manual/en/pdo.installation.php](http://php.net/manual/en/pdo.installation.php)。

## 使用 PDO 或 MySQLi 連接至資料庫
<a name="php-rds-connect"></a>

您可以使用 `$_SERVER[`VARIABLE`]`，自環境讀取連線資訊。

以 PDO 而言，請依據主機、連接埠和名稱，建立資料來源名稱 (DSN)。使用資料庫使用者名稱和密碼，將該 DSN 傳送至 [PDO 建構函式](https://php.net/manual/en/pdo.construct.php)。

**Example 使用 PDO 連接至 RDS 資料庫 - MySQL**  

```
<?php
$dbhost = $_SERVER['RDS_HOSTNAME'];
$dbport = $_SERVER['RDS_PORT'];
$dbname = $_SERVER['RDS_DB_NAME'];
$charset = 'utf8' ;

$dsn = "mysql:host={$dbhost};port={$dbport};dbname={$dbname};charset={$charset}";
$username = $_SERVER['RDS_USERNAME'];
$password = $_SERVER['RDS_PASSWORD'];

$pdo = new PDO($dsn, $username, $password);
?>
```

以其他驅動程式而言，請將 `mysql` 取代為您驅動程式的名稱 `pgsql`、`oci` 或 `sqlsrv`。

以 MySQLi 而言，請將主機名稱、使用者名稱、密碼、資料庫名稱和連接埠傳送至 `mysqli` 建構函數。

**Example 使用 mysqli\$1connect() 連接至 RDS 資料庫**  

```
$link = new mysqli($_SERVER['RDS_HOSTNAME'], $_SERVER['RDS_USERNAME'], $_SERVER['RDS_PASSWORD'], $_SERVER['RDS_DB_NAME'], $_SERVER['RDS_PORT']);
```

## 使用 Symfony 連接至資料庫
<a name="php-rds-symfony"></a>

對於 Symfony 3.2 版和更新版本，您可以根據 Elastic Beanstalk 設定的環境屬性，使用 `%env(PROPERTY_NAME)%` 在組態檔案中設定資料庫參數。

**Example app/config/parameters.yml**  

```
parameters:
    database_driver:   pdo_mysql
    database_host:     '%env(RDS_HOSTNAME)%'
    database_port:     '%env(RDS_PORT)%'
    database_name:     '%env(RDS_DB_NAME)%'
    database_user:     '%env(RDS_USERNAME)%'
    database_password: '%env(RDS_PASSWORD)%'
```

如需詳細資訊，請參閱[外部參數 (Symfony 3.4)](http://symfony.com/doc/3.4/configuration/external_parameters.html)。

對於舊版 Symfony，只能存取開頭為 `SYMFONY__` 的環境變數。這表示無法存取 Elastic Beanstalk 定義的環境屬性，您必須定義自己的環境屬性以傳遞 Symfony 的連線資訊。

若要連接資料庫與 Symfony 2，[建立環境屬性](create_deploy_PHP.container.md#php-console-properties)給每個參數。然後，使用 `%property.name%` 於存取組態檔中 Symfony 轉換的變數。例如，名為 `SYMFONY__DATABASE__USER` 的環境屬性可當成 `database.user` 存取。

```
    database_user:     "%database.user%"
```

如需詳細資訊，請參閱[外部參數 (Symfony 2.8)](http://symfony.com/doc/2.8/configuration/external_parameters.html)。

# 將 Laravel 應用程式部署至 Elastic Beanstalk
<a name="php-laravel-tutorial"></a>

Laravel 為 PHP 適用的開放原始碼、模型-檢視-控制器 (MVC) 架構。本教學課程會逐步引導您產生 Laravel 應用程式、將其部署至 AWS Elastic Beanstalk 環境，以及將其設定為連線至 Amazon Relational Database Service (Amazon RDS) 資料庫執行個體。

**Topics**
+ [先決條件](#php-laravel-tutorial-prereqs)
+ [啟動 Elastic Beanstalk 環境](#php-laravel-tutorial-launch)
+ [安裝 Laravel 並產生網站](#php-laravel-tutorial-generate)
+ [部署您的應用程式](#php-laravel-tutorial-deploy)
+ [設定 Composer 設定值](#php-laravel-tutorial-configure)
+ [新增資料庫至您的環境](#php-laravel-tutorial-database)
+ [清除](#php-laravel-tutorial-cleanup)
+ [後續步驟](#php-laravel-tutorial-nextsteps)

## 先決條件
<a name="php-laravel-tutorial-prereqs"></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 版本。

Laravel 6 需要 PHP 7.2 或更新版本。它還需要在官方 Laravel 文件中[伺服器要求](https://laravel.com/docs/6.x/installation#server-requirements)主題中列出的 PHP 擴充功能。依照指示安裝 PHP 和 Composer。

對於 Laravel 支援和維護資訊，請參閱關於 Laravel 官方文件中的[支援政策](https://laravel.com/docs/master/releases#support-policy)主題。

## 啟動 Elastic Beanstalk 環境
<a name="php-laravel-tutorial-launch"></a>

使用 Elastic Beanstalk 主控台建立 Elastic Beanstalk 環境。選擇 **PHP (PHP)** 平台，並接受預設的設定和範本程式碼。

**啟動環境 (主控台)**

1. 使用此一預設連結來開啟 Elastic Beanstalk 主控台：[console.aws.amazon.com/elasticbeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 在 **Platform (平台)**，選取符合您應用程式所使用語言的平台和平台分支。

1. 針對 **Application code (應用程式程式碼)**，選擇 **Sample application (範例應用程式)**。

1. 選擇 **Review and launch (檢閱和啟動)**。

1. 檢視可用選項。選擇您要使用的可用選項，當您準備就緒時，請選擇 **Creat app (建立應用程式)**。

使用大約需要五分鐘時間建立環境，並且建立下列資源：
+ **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)。

## 安裝 Laravel 並產生網站
<a name="php-laravel-tutorial-generate"></a>

Composer 可透過一個命令安裝 Laravel 並建立工作專案：

```
~$ composer create-project --prefer-dist laravel/laravel eb-laravel
```

Composer 會安裝 Laravel 及其依存項目，並產生預設專案。

若您安裝 Laravel 出現任何問題，請造訪官方文件的安裝主題：[https://laravel.com/docs/6.x](https://laravel.com/docs/6.x) 

## 部署您的應用程式
<a name="php-laravel-tutorial-deploy"></a>

建立[原始碼套件](applications-sourcebundle.md)，其中包含 Composer 所建立的檔案。以下命令建立一個名為 `laravel-default.zip` 的原始碼套件。它不含 `vendor` 資料夾中的檔案，其不僅佔用許多空間，在部署應用程式到 Elastic Beanstalk 時也派不上用場。

```
~/eb-laravel$ zip ../laravel-default.zip -r * .[^.]* -x "vendor/*"
```

將來源套件上傳至 Elastic Beanstalk，以將 Laravel 部署至您的環境。

**若要部署原始碼套件**

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

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

1. 在環境概觀頁面上，選擇 **Upload and deploy** (上傳和部署)。

1. 使用畫面顯示對話方塊來上傳原始碼套件。

1. 選擇 **Deploy** (部署)。

1. 部署完成後，您可選擇網站的 URL 以在新分頁中開啟您的網站。

**注意**  
若要進一步最佳化原始碼套件，可將 Git 儲存庫初始化，並使用 [`git archive` 命令](applications-sourcebundle.md#using-features.deployment.source.git)建立原始碼套件。預設的 Laravel 專案包含了 `.gitignore` 檔案，它告訴 Git 排除 `vendor` 資料夾和其他不需用於部署的檔案。

## 設定 Composer 設定值
<a name="php-laravel-tutorial-configure"></a>

完成部署時按一下 URL，即可在瀏覽器中開啟 Laravel 應用程式：

![\[Error message indicating no permission to access or on this server.\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/php-laravel-403.png)


這是什麼？ 根據預設，Elastic Beanstalk 會將專案根目錄做為網站的根路徑。然而，在此情況中，預設頁面 (`index.php`) 位於 `public` 資料夾的下一層。您可將 `/public` 新增至 URL，藉此加以驗證。例如 `http://laravel.us-east-2.elasticbeanstalk.com/public`。

若要在根路徑提供 Laravel 應用程式，請使用 Elastic Beanstalk 主控台來設定網站的*文件根*。

**設定網站的文件根目錄**

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

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

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

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

1. 在 **Document Root (文件根目錄) 部分**，輸入 **/public**。

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

1. 更新完成時按一下 URL，即可在瀏覽器中重新開啟您的網站。

![\[Laravel logo with navigation menu items: Documentation, Laracasts, News, Forge, GitHub.\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/php-laravel-defaultnodb.png)


目前為止一切正常。接著，您要將資料庫新增至您的環境，並將 Laravel 設定為連接至該資料庫。

## 新增資料庫至您的環境
<a name="php-laravel-tutorial-database"></a>

在您的 Elastic Beanstalk 環境啟動 RDS 資料庫執行個體。您可在 Elastic Beanstalk 上使用 MySQL、SQLServer 或 PostgreSQL 資料庫來搭配 Laravel。在此範例中，我們使用 MySQL。

**將 RDS 資料庫執行個體新增至 Elastic Beanstalk 環境**

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

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

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

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

1. 針對 **Engine (引擎)** 部分，選擇 **mysql (mysql)**。

1. 輸入主要**使用者名稱**及**密碼**。Elastic Beanstalk 會使用環境屬性，將這些值提供給您的應用程式。

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

建立資料庫執行個體約需要 10 分鐘。如需有關耦合至 Elastic Beanstalk 環境之資料庫的詳細資訊，請參閱 [將資料庫新增至您的 Elastic Beanstalk 環境](using-features.managing.db.md)。

在此同時，您可更新原始碼以讀取環境的連線資訊。Elastic Beanstalk 使用環境變數 (如 `RDS_HOSTNAME`) 提供連線詳細資訊，您可自應用程式存取這些變數。

Laravel 的資料庫組態存放於專案程式碼內 `database.php` 資料夾名為 `config` 的檔案中。尋找 `mysql` 項目並修改 `host`、`database`、`username`、`and password` 變數以讀取與 Elastic Beanstalk 對應的值：

**Example \$1/Eb-laravel/config/database.php**  

```
...
    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('RDS_HOSTNAME', '127.0.0.1'),
            'port' => env('RDS_PORT', '3306'),
            'database' => env('RDS_DB_NAME', 'forge'),
            'username' => env('RDS_USERNAME', 'forge'),
            'password' => env('RDS_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
...
```

為了確認資料庫連線是否設定正確，請於 `index.php` 新增程式碼來連接至資料庫，並於預設回應新增一些程式碼：

**Example \$1/Eb-laravel/public/index.php**  

```
...
if(DB::connection()->getDatabaseName())
{
   echo "Connected to database ".DB::connection()->getDatabaseName();
}
$response->send();
...
```

資料庫執行個體啟動完成時，請封裝更新後的應用程式，並將其部署至您的環境。

**更新您的 Elastic Beanstalk 環境**

1. 建立新的原始碼套件：

   ```
   ~/eb-laravel$ zip ../laravel-v2-rds.zip -r * .[^.]* -x "vendor/*"
   ```

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

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

1. 選擇 **Upload and Deploy** (上傳並部署)。

1. 選擇 **Browse (瀏覽)**，然後上傳 `laravel-v2-rds.zip`。

1. 選擇**部署**。

部署應用程式的新版本不會超過一分鐘。部署完成時，請重新整理網頁，確認資料庫連線成功：

![\[Laravel website header with navigation menu items for Documentation, Laracasts, News, Forge, and GitHub.\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/php-laravel-defaultwdb.png)


## 清除
<a name="php-laravel-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. 使用畫面顯示對話方塊來確認環境終止。

此外，您可終止於 Elastic Beanstalk 環境外建立的資料庫資源。終止 Amazon RDS 資料庫執行個體時，您可擷取快照，稍後再將資料還原至另一個執行個體。

**終止 RDS 資料庫執行個體**

1. 開啟 [Amazon RDS 主控台](https://console.aws.amazon.com/rds)。

1. 選擇 **Databases** (資料庫)。

1. 選擇資料庫執行個體。

1. 選擇**動作**，然後選擇**刪除**。

1. 選擇是否建立快照，然後選擇 **Delete (刪除)**。

## 後續步驟
<a name="php-laravel-tutorial-nextsteps"></a>

有關 Laravel 的詳細資訊，請訪問 Laravel 官方網站，[laravel.com](https://laravel.com/)。

隨著您繼續開發應用程式，您可能會希望無須手動建立 .zip 檔案並將其上傳至 Elastic Beanstalk 主控台，即可管理環境和部署應用程式。[Elastic Beanstalk 命令列界面](eb-cli3.md) (EB CLI) 提供了簡單易用的命令，讓您可從命令列界面建立、設定和部署應用程式至 Elastic Beanstalk 環境。

在本教學中，您使用 Elastic Beanstalk 主控台來設定 Composer 選項。為了讓此組態成為應用程式原始碼的一部分，您的，您可以使用組態檔，如下所示。

**Example .ebextensions/composer.config**  

```
option_settings:
  aws:elasticbeanstalk:container:php:phpini:
    document_root: /public
```

如需詳細資訊，請參閱 [使用組態檔案 (`.ebextensions`) 來進行進階的環境自訂](ebextensions.md)。

在 Elastic Beanstalk 環境中執行 Amazon RDS 資料庫執行個體對於開發和測試非常實用，但會將資料庫的生命週期連結至您的環境。如需連接至在環境外執行的資料庫的說明，請參閱 [將 Amazon RDS 資料庫執行個體新增至您的 PHP Elastic Beanstalk 環境](create_deploy_PHP.rds.md)。

最後，若您打算於生產環境中使用您的應用程式，建議您[設定您環境的自訂網域名稱](customdomains.md)，並[啟用 HTTPS](configuring-https.md) 安全連線。

# 將 CakePHP 應用程式部署至 Elastic Beanstalk
<a name="php-cakephp-tutorial"></a>

CakePHP 為 PHP 適用的開放原始碼 MVC 架構。本教學會逐步解說如何產生 CakePHP 專案、將其部署至 Elastic Beanstalk 環境，以及將其設定為連接至 Amazon RDS 資料庫執行個體。

**Topics**
+ [先決條件](#php-cakephp-tutorial-prereqs)
+ [啟動 Elastic Beanstalk 環境](#php-cakephp-tutorial-launch)
+ [安裝 CakePHP 並產生網站](#php-cakephp-tutorial-generate)
+ [部署您的應用程式](#php-cakephp-tutorial-deploy)
+ [新增資料庫至您的環境](#php-cakephp-tutorial-database)
+ [清除](#php-cakephp-tutorial-cleanup)
+ [後續步驟](#php-cakephp-tutorial-nextsteps)

## 先決條件
<a name="php-cakephp-tutorial-prereqs"></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 版本。

CakePHP 4 需要 PHP 7.4 或更新版本。它還需要在官方 [CakePHP 安裝](https://book.cakephp.org/4/en/installation.html)文件中列出的 PHP 擴充功能。您必須同時安裝 PHP 和 Composer。

## 啟動 Elastic Beanstalk 環境
<a name="php-cakephp-tutorial-launch"></a>

使用 Elastic Beanstalk 主控台建立 Elastic Beanstalk 環境。選擇 **PHP (PHP)** 平台，並接受預設的設定和範本程式碼。

**啟動環境 (主控台)**

1. 使用此一預設連結來開啟 Elastic Beanstalk 主控台：[console.aws.amazon.com/elasticbeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 在 **Platform (平台)**，選取符合您應用程式所使用語言的平台和平台分支。

1. 針對 **Application code (應用程式程式碼)**，選擇 **Sample application (範例應用程式)**。

1. 選擇 **Review and launch (檢閱和啟動)**。

1. 檢視可用選項。選擇您要使用的可用選項，當您準備就緒時，請選擇 **Creat app (建立應用程式)**。

使用大約需要五分鐘時間建立環境，並且建立下列資源：
+ **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)。

## 安裝 CakePHP 並產生網站
<a name="php-cakephp-tutorial-generate"></a>

Composer 可透過一個命令安裝 CakePHP 並建立工作專案：

```
~$ composer create-project --prefer-dist cakephp/app eb-cake
```

Composer 會安裝 CakePHP 及約 20 個依存項目，並產生預設專案。

若您安裝 CakePHP 出現任何問題，請造訪官方文件的安裝主題：[http://book.cakephp.org/4.0/en/installation.html](http://book.cakephp.org/4.0/en/installation.html)

## 部署您的應用程式
<a name="php-cakephp-tutorial-deploy"></a>

建立[原始碼套件](applications-sourcebundle.md)，其中包含 Composer 所建立的檔案。以下命令建立一個名為 `cake-default.zip` 的原始碼套件。它不含 `vendor` 資料夾中的檔案，其不僅佔用許多空間，在部署應用程式到 Elastic Beanstalk 時也派不上用場。

```
eb-cake zip ../cake-default.zip -r * .[^.]* -x "vendor/*"
```

將來源套件上傳至 Elastic Beanstalk，以將 CakePHP 部署至您的環境。

**若要部署原始碼套件**

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

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

1. 在環境概觀頁面上，選擇 **Upload and deploy** (上傳和部署)。

1. 使用畫面顯示對話方塊來上傳原始碼套件。

1. 選擇 **Deploy** (部署)。

1. 部署完成後，您可選擇網站的 URL 以在新分頁中開啟您的網站。

**注意**  
若要進一步最佳化原始碼套件，可將 Git 儲存庫初始化，並使用 [`git archive` 命令](applications-sourcebundle.md#using-features.deployment.source.git)建立原始碼套件。預設的 Symfony 專案包含了 `.gitignore` 檔案，它告訴 Git 排除 `vendor` 資料夾和其他不需用於部署的檔案。

程序完成時按一下 URL，即可在瀏覽器中開啟 CakePHP 應用程式。

目前為止一切正常。接著，您要將資料庫新增至您的環境，並將 CakePHP 設定為連接至該資料庫。

## 新增資料庫至您的環境
<a name="php-cakephp-tutorial-database"></a>

在您的 Elastic Beanstalk 環境中啟動 Amazon RDS 資料庫執行個體。您可在 Elastic Beanstalk 上使用 MySQL、SQLServer 或 PostgreSQL 資料庫來搭配 CakePHP。在此範例中，我們使用 PostgreSQL。

**將 Amazon RDS 資料庫執行個體新增至 Elastic Beanstalk 環境**

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

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

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

1. 在 **Database (資料庫)** 下，選擇 **Edit (編輯)**。

1. 在 **DB engine (資料庫引擎)** 區段，選擇 **postgres**。

1. 輸入主要**使用者名稱**及**密碼**。Elastic Beanstalk 會使用環境屬性，將這些值提供給您的應用程式。

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

建立資料庫執行個體約需要 10 分鐘。在此同時，您可更新原始碼以讀取環境的連線資訊。Elastic Beanstalk 使用環境變數 (如 `RDS_HOSTNAME`) 提供連線詳細資訊，您可自應用程式存取這些變數。

CakePHP 的資料庫組態位於專案程式碼內 `app.php` 資料夾名為 `config` 的檔案中。開啟此檔案，並新增可自 `$_SERVER` 讀取環境變數並將其指派至本機變數的程式碼。插入下例第一行 (`<?php`) 後醒目提示的行：

**Example \$1/Eb-cake/config/app.php**  

```
<?php
if (!defined('RDS_HOSTNAME')) {
  define('RDS_HOSTNAME', $_SERVER['RDS_HOSTNAME']);
  define('RDS_USERNAME', $_SERVER['RDS_USERNAME']);
  define('RDS_PASSWORD', $_SERVER['RDS_PASSWORD']);
  define('RDS_DB_NAME', $_SERVER['RDS_DB_NAME']);
}
return [
...
```

資料庫連線可在 `app.php` 中進一步設定。尋找下列區段，並透過與您資料庫引擎 (`Mysql`、`Sqlserver` 或 `Postgres`) 相符的驅動程式名稱修改預設資料來源，然後設定 `host`、`username`、`password` 和 `database` 變數以從 Elastic Beanstalk 讀取對應的值：

**Example \$1/Eb-cake/config/app.php**  

```
...
     /**
     * Connection information used by the ORM to connect
     * to your application's datastores.
     * Drivers include Mysql Postgres Sqlite Sqlserver
     * See vendor\cakephp\cakephp\src\Database\Driver for complete list
     */
    'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Postgres',
            'persistent' => false,
            'host' => RDS_HOSTNAME,
            /*
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
             * the following line and set the port accordingly
             */
            //'port' => 'non_standard_port_number',
            'username' => RDS_USERNAME,
            'password' => RDS_PASSWORD,
            'database' => RDS_DB_NAME,
            /*
             * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6).
             */
            //'encoding' => 'utf8mb4',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,
...
```

資料庫執行個體啟動完成時，請封裝更新後的應用程式，並將其部署至您的環境：

**更新您的 Elastic Beanstalk 環境**

1. 建立新的原始碼套件：

   ```
   ~/eb-cake$ zip ../cake-v2-rds.zip -r * .[^.]* -x "vendor/*"
   ```

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

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

1. 選擇 **Upload and Deploy** (上傳並部署)。

1. 選擇 **Browse (瀏覽)**，然後上傳 `cake-v2-rds.zip`。

1. 選擇**部署**。

部署應用程式的新版本不會超過一分鐘。部署完成時，請重新整理網頁，確認資料庫連線成功：

![\[Green checkmark icon indicating successful database connection for CakePHP.\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/php-cakephp-defaultwdb.png)


## 清除
<a name="php-cakephp-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. 使用畫面顯示對話方塊來確認環境終止。

此外，您可終止於 Elastic Beanstalk 環境外建立的資料庫資源。終止 Amazon RDS 資料庫執行個體時，您可擷取快照，稍後再將資料還原至另一個執行個體。

**終止 RDS 資料庫執行個體**

1. 開啟 [Amazon RDS 主控台](https://console.aws.amazon.com/rds)。

1. 選擇 **Databases** (資料庫)。

1. 選擇資料庫執行個體。

1. 選擇**動作**，然後選擇**刪除**。

1. 選擇是否建立快照，然後選擇 **Delete (刪除)**。

## 後續步驟
<a name="php-cakephp-tutorial-nextsteps"></a>

如需 CakePHP 的詳細資訊，請造訪 [book.cakephp.org](http://book.cakephp.org/4.0/en/index.html) 閱讀相關書目。

隨著您繼續開發應用程式，您可能會希望無須手動建立 .zip 檔案並將其上傳至 Elastic Beanstalk 主控台，即可管理環境和部署應用程式。[Elastic Beanstalk 命令列界面](eb-cli3.md) (EB CLI) 提供了簡單易用的命令，讓您可從命令列界面建立、設定和部署應用程式至 Elastic Beanstalk 環境。

在 Elastic Beanstalk 環境中執行 Amazon RDS 資料庫執行個體對於開發和測試非常實用，但會將資料庫的生命週期連結至您的環境。如需連接至在環境外執行的資料庫的說明，請參閱 [將 Amazon RDS 資料庫執行個體新增至您的 PHP Elastic Beanstalk 環境](create_deploy_PHP.rds.md)。

最後，若您打算於生產環境中使用您的應用程式，建議您[設定您環境的自訂網域名稱](customdomains.md)，並[啟用 HTTPS](configuring-https.md) 安全連線。

# 將 Symfony 應用程式部署至 Elastic Beanstalk
<a name="php-symfony-tutorial"></a>

[Symfony](http://symfony.com/) 是一種開放原始碼架構，適用於開發動態 PHP Web 應用程式。本教學課程將逐步引導您產生 Symfony 應用程式並將其部署到 AWS Elastic Beanstalk 環境。

**Topics**
+ [先決條件](#php-symfony-tutorial-prereqs)
+ [啟動 Elastic Beanstalk 環境](#php-symfony-tutorial-launch)
+ [安裝 Symfony 並產生網站](#php-symfony-tutorial-generate)
+ [部署您的應用程式](#php-symfony-tutorial-deploy)
+ [設定 Composer 設定值](#php-symfony-tutorial-configure)
+ [清除](#php-symfony-tutorial-cleanup)
+ [後續步驟](#php-symfony-tutorial-nextsteps)

## 先決條件
<a name="php-symfony-tutorial-prereqs"></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 版本。

Symfony 4.4.9 需要 PHP 7.1.3 或更新版本。它還需要在官方 Symfony 安裝文件中的[技術要求](https://symfony.com/doc/4.4/setup.html )主題中列出的 PHP 擴充功能。在本教學中，我們使用 PHP 7.2 和對應的 Elastic Beanstalk [平台版本](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP)。在繼續之前，您必須同時安裝 PHP 和 Composer。

有關 Symfony 支援和維護資訊，請參閱 Symfony 網站上的 [symfony 發行](https://symfony.com/releases)主題。有關支援 Symfony 4.4.9 之 PHP 版本更新的詳細資訊，請參閱 Symfony 網站上 [Symfony 4.4.9 版本說明](https://symfony.com/blog/symfony-4-4-9-released)主題。

## 啟動 Elastic Beanstalk 環境
<a name="php-symfony-tutorial-launch"></a>

使用 Elastic Beanstalk 主控台建立 Elastic Beanstalk 環境。選擇 **PHP (PHP)** 平台，並接受預設的設定和範本程式碼。

**啟動環境 (主控台)**

1. 使用此一預設連結來開啟 Elastic Beanstalk 主控台：[console.aws.amazon.com/elasticbeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 在 **Platform (平台)**，選取符合您應用程式所使用語言的平台和平台分支。

1. 針對 **Application code (應用程式程式碼)**，選擇 **Sample application (範例應用程式)**。

1. 選擇 **Review and launch (檢閱和啟動)**。

1. 檢視可用選項。選擇您要使用的可用選項，當您準備就緒時，請選擇 **Creat app (建立應用程式)**。

使用大約需要五分鐘時間建立環境，並且建立下列資源：
+ **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)。

## 安裝 Symfony 並產生網站
<a name="php-symfony-tutorial-generate"></a>

Composer 可透過一個命令安裝 Symfony 並建立工作專案：

```
~$ composer create-project symfony/website-skeleton eb-symfony
```

Composer 會安裝 Symfony 及其依存項目，並產生預設專案。

若您在安裝 Symfony 時出現任何問題，請瀏覽官方 Symfony 文件的[安裝](https://symfony.com/doc/4.4/setup.html)主題。

## 部署您的應用程式
<a name="php-symfony-tutorial-deploy"></a>

移至專案目錄。

```
~$ cd eb-symfony
```

建立[原始碼套件](applications-sourcebundle.md)，其中包含 Composer 所建立的檔案。以下命令建立一個名為 `symfony-default.zip` 的原始碼套件。它不含 `vendor` 資料夾中的檔案，其不僅佔用許多空間，在部署應用程式到 Elastic Beanstalk 時也派不上用場。

```
eb-symfony$ zip ../symfony-default.zip -r * .[^.]* -x "vendor/*"
```

將來源套件上傳至 Elastic Beanstalk，以將 Symfony 部署至您的環境。

**若要部署原始碼套件**

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

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

1. 在環境概觀頁面上，選擇 **Upload and deploy** (上傳和部署)。

1. 使用畫面顯示對話方塊來上傳原始碼套件。

1. 選擇 **Deploy** (部署)。

1. 部署完成後，您可選擇網站的 URL 以在新分頁中開啟您的網站。

**注意**  
若要進一步最佳化原始碼套件，可將 Git 儲存庫初始化，並使用 [`git archive` 命令](applications-sourcebundle.md#using-features.deployment.source.git)建立原始碼套件。預設的 Symfony 專案包含了 `.gitignore` 檔案，它告訴 Git 排除 `vendor` 資料夾和其他不需用於部署的檔案。

## 設定 Composer 設定值
<a name="php-symfony-tutorial-configure"></a>

完成部署時按一下 URL，即可在瀏覽器中開啟 Symfony 應用程式。

這是什麼？ 根據預設，Elastic Beanstalk 會將專案根目錄做為網站的根路徑。然而，在此情況中，預設頁面 (`app.php`) 位於 `web` 資料夾的下一層。您可將 `/public` 新增至 URL，藉此加以驗證。例如 `http://symfony.us-east-2.elasticbeanstalk.com/public`。

若要在根路徑提供 Symfony 應用程式，請使用 Elastic Beanstalk 主控台來設定網站的「文件根」**。

**欲設定網站的文件根目錄**

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

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

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

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

1. 在 **Document Root (文件根目錄)** 部分，輸入 **/public**。

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

1. 更新完成時按一下 URL，即可在瀏覽器中重新開啟您的網站。

## 清除
<a name="php-symfony-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. 使用畫面顯示對話方塊來確認環境終止。

## 後續步驟
<a name="php-symfony-tutorial-nextsteps"></a>

如需 Symfony 的詳細資訊，請至 symfony.com 參閱[什麼是 Symfony？](https://symfony.com/what-is-symfony)一文。

隨著您繼續開發應用程式，您可能會希望無須手動建立 .zip 檔案並將其上傳至 Elastic Beanstalk 主控台，即可管理環境和部署應用程式。[Elastic Beanstalk 命令列界面](eb-cli3.md) (EB CLI) 提供了簡單易用的命令，讓您可從命令列界面建立、設定和部署應用程式至 Elastic Beanstalk 環境。

在本教學中，您使用 Elastic Beanstalk 主控台來設定 Composer 選項。為了讓此組態成為應用程式原始碼的一部分，您的，您可以使用組態檔，如下所示。

**Example .ebextensions/composer.config**  

```
option_settings:
  aws:elasticbeanstalk:container:php:phpini:
    document_root: /public
```

如需詳細資訊，請參閱 [使用組態檔案 (`.ebextensions`) 來進行進階的環境自訂](ebextensions.md)。

Symfony 使用自己的組態檔案設定資料庫連線。如需連接 Symfony 與資料庫的詳細資訊，請參閱 [使用 Symfony 連接至資料庫](create_deploy_PHP.rds.md#php-rds-symfony)。

最後，若您打算於生產環境中使用您的應用程式，建議您[設定您環境的自訂網域名稱](customdomains.md)，並[啟用 HTTPS](configuring-https.md) 安全連線。

# 使用外部 Amazon RDS 資料庫將高可用性 PHP 應用程式資料庫部署至 Elastic Beanstalk
<a name="php-ha-tutorial"></a>

本教學課程會逐步引導您在外部[啟動 RDS 資料庫執行個體](AWSHowTo.RDS.md) AWS Elastic Beanstalk，以及設定執行 PHP 應用程式的高可用性環境來與其連線。執行 Elastic Beanstalk 外的資料庫執行個體，會將該資料庫自您環境的生命週期解偶。如此一來，您即可自多個環境連接至相同的資料庫、更換資料庫，或執行藍/綠部署而不影響您的資料庫。

本教學課程透過[範例 PHP 應用程式](https://github.com/awslabs/eb-demo-php-simple-app)進行說明，該應用程式使用 MySQL 資料庫來存放使用者提供的文字資料。此範例應用程式使用[組態檔案](ebextensions.md)來進行 [PHP 設定](create_deploy_PHP.container.md#php-namespaces)，並於資料庫建立供此應用程式使用的表格。此外，亦說明如何於部署期間使用 [Composer 檔案](create_deploy_PHP.container.md#php-configuration-composer)來安裝套件。

**Topics**
+ [先決條件](#php-hawrds-tutorial-prereqs)
+ [在 Amazon RDS 中啟動資料庫執行個體](#php-hawrds-tutorial-database)
+ [建立 Elastic Beanstalk 環境](#php-hawrds-tutorial-create)
+ [設定安全群組、環境屬性和擴展](#php-hawrds-tutorial-configure)
+ [部署範例應用程式](#php-hawrds-tutorial-deploy)
+ [清除](#php-hawrds-tutorial-cleanup)
+ [後續步驟](#php-hawrds-tutorial-nextsteps)

## 先決條件
<a name="php-hawrds-tutorial-prereqs"></a>

開始之前，請自 GitHub 下載範例應用程式原始碼套件：[eb-demo-php-simple-app-1.3.zip](https://github.com/aws-samples/eb-demo-php-simple-app/releases/download/v1.3/eb-demo-php-simple-app-v1.3.zip)

本 Amazon Relational Database Service (Amazon RDS) 任務教學中的程序假設您會在預設的 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) 中啟動資源。所有新帳戶的各個區域都包含預設 VPC。若您沒有預設 VPC，則程序會有所不同。請參閱 [搭配 Amazon RDS 使用 Elastic Beanstalk](AWSHowTo.RDS.md) 以取得 EC2-Classic 和自訂 VPC 平台的相關說明。

## 在 Amazon RDS 中啟動資料庫執行個體
<a name="php-hawrds-tutorial-database"></a>

若要使用外部資料庫搭配執行於 Elastic Beanstalk 的應用程式，請先使用 Amazon RDS 啟動資料庫執行個體。當您使用 Amazon RDS 啟動執行個體時，它會完全獨立於 Elastic Beanstalk 和您的 Elastic Beanstalk 環境之外，而且不會受到 Elastic Beanstalk 終止或監控。

使用 Amazon RDS 主控台，啟動異地同步備份的 **MySQL** 資料庫執行個體。選擇異地同步備份部署可確保您的資料庫將會容錯遷移，並在主要資料庫執行個體停止服務時繼續運作。

**欲在預設 VPC 中啟動 RDS 資料庫執行個體**

1. 開啟 [RDS 主控台](https://console.aws.amazon.com/rds/home)。

1. 在導覽窗格中，選擇 **Databases** (資料庫)。

1. 選擇 **Create database** (建立資料庫)。

1. 選擇 **Standard Create (標準建立)**。
**重要**  
請勿選擇 **Easy Create (輕鬆建立)**。如果您選擇該選項，則您無法設定必要的設定來啟動此 RDS 資料庫。

1. 在 **Additional configuration (其他設定)** 下方的 **Initial database name (初始資料庫名稱)** 中輸入 **ebdb**。

1. 檢閱預設設定，並根據您的特定要求來調整這些設定。請注意以下選項：
   + **資料庫執行個體類別** – 選擇具有適當數量的記憶體和 CPU 功率之適合您工作負載的執行個體大小。
   + **異地同步備份部署** – 若要達到高可用性，請將此項設定為**在不同的 AZ 中建立 Aurora 複本/讀取器節點**。
   + **主要使用者名稱**和**主要密碼** – 資料庫使用者名稱和密碼。記下這些設定，以供稍後使用。

1. 檢查其餘選項的預設設定，然後選擇 **Create database (建立資料庫)**。

接著，修改連接至資料庫執行個體的安全群組，以允許適當連接埠的傳入流量。此安全群組與您稍後將連接至 Elastic Beanstalk 環境的相同，因此，您新增的規則將授予相同安全群組內其他資源的流量傳入許可。

**修改連接至 RDS 執行個體的安全群組的傳入規則**

1. 開啟 [Amazon RDS 主控台](https://console.aws.amazon.com/rds/home)。

1. 選擇 **Databases** (資料庫)。

1. 選擇您的資料庫執行個體名稱以檢視其詳細資料。

1. 在 **Connectivity** (連線) 區段中，記下顯示於此頁面的 **Subnets** (子網路)、**Security groups** (安全群組) 和 **Endpoint** (端點)。這樣您稍後便可使用這些資訊。

1. 在 **Security** (安全性) 下，可查看與資料庫執行個體相關聯的安全群組。開啟連結以檢視 Amazon EC2 主控台內的安全群組。

1. 在安全群組的詳細資訊中，選擇 **Inbound (傳入)**。

1. 選擇**編輯**。

1. 選擇 **Add Rule** (新增規則)。

1. 針對 **Type (類型)**，選擇您的應用程式所使用的資料庫引擎。

1. 對於 **Source (來源)**，輸入 **sg-** 檢視可用的安全群組清單。選擇與 Elastic Beanstalk 環境中使用之 Auto Scaling 群組相關聯的安全群組。以便環境中的 Amazon EC2 執行個體可以存取資料庫。  
![\[在 Amazon EC2 主控台中編輯安全群組傳入規則的螢幕影像。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. 選擇**儲存**。

建立資料庫執行個體約需要 10 分鐘。同時，建立您的 Elastic Beanstalk 環境。

## 建立 Elastic Beanstalk 環境
<a name="php-hawrds-tutorial-create"></a>

使用 Elastic Beanstalk 主控台建立 Elastic Beanstalk 環境。選擇 **PHP (PHP)** 平台，並接受預設的設定和範本程式碼。在啟動環境之後，您可以設定環境連接至資料庫，然後部署您自 GitHub 下載的範例應用程式。

**啟動環境 (主控台)**

1. 使用此一預設連結來開啟 Elastic Beanstalk 主控台：[console.aws.amazon.com/elasticbeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 在 **Platform (平台)**，選取符合您應用程式所使用語言的平台和平台分支。

1. 針對 **Application code (應用程式程式碼)**，選擇 **Sample application (範例應用程式)**。

1. 選擇 **Review and launch (檢閱和啟動)**。

1. 檢視可用選項。選擇您要使用的可用選項，當您準備就緒時，請選擇 **Creat app (建立應用程式)**。

使用大約需要五分鐘時間建立環境，並且建立下列資源：
+ **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 會終止其中的所有資源。您啟動的 RDS 資料庫執行個體在您的環境之外，因此必須負責管理其生命週期。

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

## 設定安全群組、環境屬性和擴展
<a name="php-hawrds-tutorial-configure"></a>

將資料庫執行個體的安全群組新增至執行環境。此程序會透過其他連接的安全群組，使 Elastic Beanstalk 重新佈建您環境中的所有執行個體。

**欲將安全群組新增至您的環境**
+ 執行以下任意一項：
  + 使用 Elastic Beanstalk 主控台新增安全群組

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

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

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

    1. 在 **Instances (執行個體)** 組態類別中，選擇 **Edit (編輯)**。

    1. 在 **EC2 安全群組**下，除了 Elastic Beanstalk 建立的執行個體安全群組，請選擇要連接到執行個體的安全群組。

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

    1. 閱讀警告的內容，然後選擇 **Confirm (確認)**。
  + 若要使用[組態檔案](ebextensions.md)新增安全群組，請使用 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) 範例檔案。

接著，使用環境屬性，將連線資訊傳送至環境。此範例應用程式使用一組預設屬性，這些屬性符合您於環境佈建資料庫時 Elastic Beanstalk 所設定的屬性。

**設定 Amazon RDS 資料庫執行個體的環境屬性**

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

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

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

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

1. 在 **Environment Properties (環境屬性)** 區段，定義應用程式建立連線字串所讀取的變數。為了與具備整合式 RDS 資料庫執行個體的環境相容，請使用下列名稱與值。您可以在 [RDS 主控台](https://console.aws.amazon.com/rds/home)中找到除了密碼以外的所有值。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/php-ha-tutorial.html)  
![\[新增了 RDS 屬性的環境屬性組態區段\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

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

最後，請增加執行個體計數下限，藉此設定您的環境 Auto Scaling 群組。隨時至少執行兩個執行個體，避免您環境中的 Web 伺服器出現單點故障，且無須停止網站服務即可部署變更。

**若要設定您環境的 Auto Scaling 群組，以維持高可用性**

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

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

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

1. 在 **Capacity (容量)** 組態類別中，選擇 **Edit (編輯)**。

1. 在 **Auto Scaling 群組**區段，將**最小執行個體**設定為 **2**。

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

## 部署範例應用程式
<a name="php-hawrds-tutorial-deploy"></a>

現在，您的環境已就緒，可執行範例應用程式並連接至 Amazon RDS。將範例應用程式部署至您的環境。

**注意**  
若您尚未自 GitHub 下載原始碼套件，請先下載：[eb-demo-php-simple-app-1.3.zip](https://github.com/aws-samples/eb-demo-php-simple-app/releases/download/v1.3/eb-demo-php-simple-app-v1.3.zip)

**若要部署原始碼套件**

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

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

1. 在環境概觀頁面上，選擇 **Upload and deploy** (上傳和部署)。

1. 使用畫面顯示對話方塊來上傳原始碼套件。

1. 選擇 **Deploy** (部署)。

1. 部署完成後，您可選擇網站的 URL 以在新分頁中開啟您的網站。

本站點會收集使用者評論，並使用 MySQL 資料庫來存放資料。若要新增評論，請選擇 **Share Your Thought** (分享您的想法)、輸入評論，然後選擇 **Submit Your Thought** (提交您的想法)。本 Web 應用程式會將評論寫入資料庫，環境中的任何執行個體均可讀取，而且執行個體停止服務時也不會遺失。

![\[User interface for sharing thoughts, with a posted comment about Elastic Beanstalk on AWS.\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/php-ha-tutorial-app.png)


## 清除
<a name="php-hawrds-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. 使用畫面顯示對話方塊來確認環境終止。

此外，您可終止於 Elastic Beanstalk 環境外建立的資料庫資源。終止 Amazon RDS 資料庫執行個體時，您可擷取快照，稍後再將資料還原至另一個執行個體。

**終止 RDS 資料庫執行個體**

1. 開啟 [Amazon RDS 主控台](https://console.aws.amazon.com/rds)。

1. 選擇 **Databases** (資料庫)。

1. 選擇資料庫執行個體。

1. 選擇**動作**，然後選擇**刪除**。

1. 選擇是否建立快照，然後選擇 **Delete (刪除)**。

## 後續步驟
<a name="php-hawrds-tutorial-nextsteps"></a>

隨著您繼續開發應用程式，您可能會希望無須手動建立 .zip 檔案並將其上傳至 Elastic Beanstalk 主控台，即可管理環境和部署應用程式。[Elastic Beanstalk 命令列界面](eb-cli3.md) (EB CLI) 提供了簡單易用的命令，讓您可從命令列界面建立、設定和部署應用程式至 Elastic Beanstalk 環境。

此範例應用程式使用組態檔案來進行 PHP 設定，並於資料庫建立表格 (如尚未存在)。您亦可於環境建立期間，使用組態檔案進行執行個體的安全群組設定，以避免耗時的組態更新。如需詳細資訊，請參閱[使用組態檔案 (`.ebextensions`) 來進行進階的環境自訂](ebextensions.md)。

進行開發和測試時，建議您使用 Elastic Beanstalk 的功能，將受管的資料庫執行個體直接加入您的環境。如需於環境中設定資料庫的說明，請參閱[將資料庫新增至您的 Elastic Beanstalk 環境](using-features.managing.db.md)。

若您需要高效能資料庫，請考慮使用 [Amazon Aurora](https://aws.amazon.com/rds/aurora/)。Amazon Aurora 是一種與 MySQL 相容的資料庫引擎，能夠以低成本提供商用資料庫的功能。欲將您的應用程式連接至不同資料庫，請重複[安全群組設定](#php-hawrds-tutorial-database)步驟，並[更新 RDS 相關的環境屬性](#php-hawrds-tutorial-configure)。

最後，若您打算於生產環境中使用您的應用程式，建議您[設定您環境的自訂網域名稱](customdomains.md)，並[啟用 HTTPS](configuring-https.md) 安全連線。

# 使用外部 Amazon RDS 資料庫將高可用性 WordPress 網站資料庫部署至 Elastic Beanstalk
<a name="php-hawordpress-tutorial"></a>

本教學課程說明如何[啟動 外部的 Amazon RDS 資料庫執行個體](AWSHowTo.RDS.md) AWS Elastic Beanstalk，以及如何設定執行 WordPress 網站的高可用性環境來與其連線。此網站使用 Amazon Elastic File System (Amazon EFS) 做為共用的儲存裝置以放置上傳的檔案。

執行 Elastic Beanstalk 外的資料庫執行個體，會將該資料庫自您環境的生命週期解偶。如此一來，您即可自多個環境連接至相同的資料庫、更換資料庫，或執行[藍/綠部署](using-features.CNAMESwap.md)而不影響您的資料庫。

**注意**  
有關 PHP 版本與 WordPress 版本相容性的現有資訊，請參閱 WordPress 網站上的 [PHP 相容性和 WordPress 版本](https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/)。在您升級到新版本的 PHP 之前，您應該參考此資訊，以實作 WordPress。

**Topics**
+ [先決條件](#php-wordpress-tutorial-prereqs)
+ [在 Amazon RDS 中啟動資料庫執行個體](#php-hawordpress-tutorial-database)
+ [下載 WordPress](#php-hawordpress-tutorial-download)
+ [啟動 Elastic Beanstalk 環境](#php-hawordpress-tutorial-launch)
+ [設定安全群組和環境屬性](#php-wordpress-tutorial-configure)
+ [設定並部署您的應用程式](#php-wordpress-tutorial-deploy)
+ [安裝 WordPress](#php-hawordpress-tutorial-install)
+ [更新金鑰和鹽](#php-hawordpress-tutorial-updatesalts)
+ [移除存取限制](#php-hawordpress-tutorial-updateenv)
+ [設定 Auto Scaling 群組](#php-hawordpress-tutorial-autoscaling)
+ [升級 WordPress](#php-hawordpress-tutorial-upgrade)
+ [清除](#php-hawordpress-tutorial-cleanup)
+ [後續步驟](#php-hawordpress-tutorial-nextsteps)

## 先決條件
<a name="php-wordpress-tutorial-prereqs"></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 版本。

**預設 VPC**  
本教學中的 Amazon Relational Database Service (Amazon RDS) 程序假設您會在預設的 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) 中啟動資源。所有新帳戶在每個 AWS 區域中都包含預設 VPC。若您沒有預設 VPC，則程序會有所不同。請參閱 [搭配 Amazon RDS 使用 Elastic Beanstalk](AWSHowTo.RDS.md) 以取得 EC2-Classic 和自訂 VPC 平台的相關說明。

**AWS 區域**  
範例應用程式使用 Amazon EFS，僅適用於支援 Amazon EFS AWS 的區域。若要了解支援的 AWS 區域，請參閱 中的 [Amazon Elastic File System Endpoints and Quotas](https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html)*AWS 一般參考*。

## 在 Amazon RDS 中啟動資料庫執行個體
<a name="php-hawordpress-tutorial-database"></a>

當您使用 Amazon RDS 啟動執行個體時，它會完全獨立於 Elastic Beanstalk 和您的 Elastic Beanstalk 環境之外，而且不會受到 Elastic Beanstalk 終止或監控。

在下列步驟中，您將使用 Amazon RDS 主控台：
+ 啟動使用 **MySQL** 引擎的資料庫。
+ 啟用 **Multi-AZ deployment (異地同步備份部署)**。這會在不同的可用區域 (AZ) 中建立待命狀態，以提供資料備援、消除 I/O 凍結，並將系統備份期間的延遲峰值降至最低。

**欲在預設 VPC 中啟動 RDS 資料庫執行個體**

1. 開啟 [RDS 主控台](https://console.aws.amazon.com/rds/home)。

1. 在導覽窗格中，選擇 **Databases** (資料庫)。

1. 選擇 **Create database** (建立資料庫)。

1. 選擇 **Standard Create (標準建立)**。
**重要**  
請勿選擇 **Easy Create (輕鬆建立)**。如果您選擇該選項，則您無法設定必要的設定來啟動此 RDS 資料庫。

1. 在 **Additional configuration (其他設定)** 下方的 **Initial database name (初始資料庫名稱)** 中輸入 **ebdb**。

1. 檢閱預設設定，並根據您的特定要求來調整這些設定。請注意以下選項：
   + **資料庫執行個體類別** – 選擇具有適當數量的記憶體和 CPU 功率之適合您工作負載的執行個體大小。
   + **異地同步備份部署** – 若要達到高可用性，請將此項設定為**在不同的 AZ 中建立 Aurora 複本/讀取器節點**。
   + **主要使用者名稱**和**主要密碼** – 資料庫使用者名稱和密碼。記下這些設定，以供稍後使用。

1. 檢查其餘選項的預設設定，然後選擇 **Create database (建立資料庫)**。

建立您的資料庫執行個體之後，請修改連接至該執行個體的安全群組，以允許適當連接埠的傳入流量。

**注意**  
此安全群組與您稍後將連接至 Elastic Beanstalk 環境的相同，因此，您新增的規則現在將授予相同安全群組內其他資源的流量傳入許可。

**修改連接至 RDS 執行個體的安全群組的傳入規則**

1. 開啟 [Amazon RDS 主控台](https://console.aws.amazon.com/rds/home)。

1. 選擇 **Databases** (資料庫)。

1. 選擇您的資料庫執行個體名稱以檢視其詳細資料。

1. 在 **Connectivity** (連線) 區段中，記下顯示於此頁面的 **Subnets** (子網路)、**Security groups** (安全群組) 和 **Endpoint** (端點)。這樣您稍後便可使用這些資訊。

1. 在 **Security** (安全性) 下，可查看與資料庫執行個體相關聯的安全群組。開啟連結以檢視 Amazon EC2 主控台內的安全群組。

1. 在安全群組的詳細資訊中，選擇 **Inbound (傳入)**。

1. 選擇**編輯**。

1. 選擇 **Add Rule** (新增規則)。

1. 針對 **Type (類型)**，選擇您的應用程式所使用的資料庫引擎。

1. 對於 **Source (來源)**，輸入 **sg-** 檢視可用的安全群組清單。選擇與 Elastic Beanstalk 環境中使用之 Auto Scaling 群組相關聯的安全群組。以便環境中的 Amazon EC2 執行個體可以存取資料庫。  
![\[在 Amazon EC2 主控台中編輯安全群組傳入規則的螢幕影像。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. 選擇**儲存**。

建立資料庫執行個體約需要 10 分鐘。同時，下載 WordPress 並建立您的 Elastic Beanstalk 環境。

## 下載 WordPress
<a name="php-hawordpress-tutorial-download"></a>

若要準備使用 部署 WordPress AWS Elastic Beanstalk，您必須將 WordPress 檔案複製到您的電腦，並提供正確的組態資訊。

**若要建立 WordPress 專案**

1. 從 [wordpress.org](https://wordpress.org/download/) 下載 WordPress。

   ```
   ~$curl https://wordpress.org/wordpress-6.2.tar.gz -o wordpress.tar.gz
   ```

1. 從範本儲存庫下載組態檔案。

   ```
   ~$ wget https://github.com/aws-samples/eb-php-wordpress/releases/download/v1.1/eb-php-wordpress-v1.zip
   ```

1. 解壓縮 WordPress 並變更資料夾名稱。

   ```
    ~$ tar -xvf wordpress.tar.gz
    ~$ mv wordpress wordpress-beanstalk
    ~$ cd wordpress-beanstalk
   ```

1. 在 WordPress 安裝時解壓縮組態檔案。

   ```
    ~/wordpress-beanstalk$ unzip ../eb-php-wordpress-v1.zip
     creating: .ebextensions/
    inflating: .ebextensions/dev.config
    inflating: .ebextensions/efs-create.config
    inflating: .ebextensions/efs-mount.config
    inflating: .ebextensions/loadbalancer-sg.config
    inflating: .ebextensions/wordpress.config
    inflating: LICENSE
    inflating: README.md
    inflating: wp-config.php
   ```

## 啟動 Elastic Beanstalk 環境
<a name="php-hawordpress-tutorial-launch"></a>

使用 Elastic Beanstalk 主控台建立 Elastic Beanstalk 環境。在您啟動環境之後，可加以設定以連接至資料庫，然後將 WordPress 程式碼部署至該環境。

在下列步驟中，您將使用 Elastic Beanstalk 主控台：
+ 使用受管 **PHP** 平台建立 Elastic Beanstalk 應用程式。
+ 接受預設設定和範本程式碼。

**啟動環境 (主控台)**

1. 使用此一預設連結來開啟 Elastic Beanstalk 主控台：[console.aws.amazon.com/elasticbeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 在 **Platform (平台)**，選取符合您應用程式所使用語言的平台和平台分支。

1. 針對 **Application code (應用程式程式碼)**，選擇 **Sample application (範例應用程式)**。

1. 選擇 **Review and launch (檢閱和啟動)**。

1. 檢視可用選項。選擇您要使用的可用選項，當您準備就緒時，請選擇 **Creat app (建立應用程式)**。

大約需要五分鐘時間建立環境，並建立下列資源。

### Elastic Beanstalk 建立的資源
<a name="php-hawordpress-tutorial-launch.EB-resources"></a>
+ **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 會終止其中的所有資源。

您啟動的 Amazon RDS 執行個體在您的環境之外，因此您必須負責管理其生命週期。

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

## 設定安全群組和環境屬性
<a name="php-wordpress-tutorial-configure"></a>

將資料庫執行個體的安全群組新增至執行環境。此程序會透過其他連接的安全群組，使 Elastic Beanstalk 重新佈建您環境中的所有執行個體。

**欲將安全群組新增至您的環境**
+ 執行以下任意一項：
  + 使用 Elastic Beanstalk 主控台新增安全群組

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

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

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

    1. 在 **Instances (執行個體)** 組態類別中，選擇 **Edit (編輯)**。

    1. 在 **EC2 安全群組**下，除了 Elastic Beanstalk 建立的執行個體安全群組，請選擇要連接到執行個體的安全群組。

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

    1. 閱讀警告的內容，然後選擇 **Confirm (確認)**。
  + 若要使用[組態檔案](ebextensions.md)新增安全群組，請使用 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) 範例檔案。

接著，使用環境屬性，將連線資訊傳送至環境。

WordPress 應用程式使用一組預設屬性，這些屬性符合您於環境佈建資料庫時 Elastic Beanstalk 所設定的屬性。

**設定 Amazon RDS 資料庫執行個體的環境屬性**

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

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

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

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

1. 在 **Environment Properties (環境屬性)** 區段，定義應用程式建立連線字串所讀取的變數。為了與具備整合式 RDS 資料庫執行個體的環境相容，請使用下列名稱與值。您可以在 [RDS 主控台](https://console.aws.amazon.com/rds/home)中找到除了密碼以外的所有值。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html)  
![\[新增了 RDS 屬性的環境屬性組態區段\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

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

## 設定並部署您的應用程式
<a name="php-wordpress-tutorial-deploy"></a>

驗證您的 `wordpress-beanstalk` 資料夾結構是否正確，如下所示。

```
wordpress-beanstalk$ tree -aL 1
.
├── .ebextensions
├── index.php
├── LICENSE
├── license.txt
├── readme.html
├── README.md
├── wp-activate.php
├── wp-admin
├── wp-blog-header.php
├── wp-comments-post.php
├── wp-config.php
├── wp-config-sample.php
├── wp-content
├── wp-cron.php
├── wp-includes
├── wp-links-opml.php
├── wp-load.php
├── wp-login.php
├── wp-mail.php
├── wp-settings.php
├── wp-signup.php
├── wp-trackback.php
└── xmlrpc.php
```

來自專案儲存庫的自訂 `wp-config.php` 檔案使用您在前一步驟中定義的環境變數來設定資料庫連線。`.ebextensions` 資料夾包含在 Elastic Beanstalk 環境中建立其他資源的組態檔案。

需修改組態檔案才可適用於您的帳戶。以適當的 ID 來更換檔案中的預留位置值，並建立原始碼套件。

**更新組態檔案並建立原始碼套件**

1. 如下修改組態檔案。
   + `.ebextensions/dev.config` – 會限制您環境的存取，以便在 WordPress 安裝程序期間提供保護。以您將用於存取您環境的網站的電腦公有 IP 地址，取代靠近檔案頂部之預留位置的 IP 地址，以完成您的 WordPress 安裝。
**注意**  
根據您的網路而定，您可能需要使用 IP 地址區塊。
   + `.ebextensions/efs-create.config` – 會在您 VPC 的各個可用區域/子網路中建立 EFS 檔案系統和掛載點。在 [Amazon VPC 主控台](https://console.aws.amazon.com/vpc/home#subnets:filter=default)中辨識您的預設 VPC 主控台和子網路 ID。

1. 建立[原始碼套件](applications-sourcebundle.md)，其中包含專案資料夾中的檔案。以下命令建立一個名為 `wordpress-beanstalk.zip` 的原始碼套件。

   ```
   ~/eb-wordpress$ zip ../wordpress-beanstalk.zip -r * .[^.]*
   ```

將來源套件上傳至 Elastic Beanstalk，以將 WordPress 部署至您的環境。

**若要部署原始碼套件**

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

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

1. 在環境概觀頁面上，選擇 **Upload and deploy** (上傳和部署)。

1. 使用畫面顯示對話方塊來上傳原始碼套件。

1. 選擇 **Deploy** (部署)。

1. 部署完成後，您可選擇網站的 URL 以在新分頁中開啟您的網站。

## 安裝 WordPress
<a name="php-hawordpress-tutorial-install"></a>

**欲完成 WordPress 安裝**

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

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

1. 在瀏覽器中選擇環境 URL 來開啟您的網站。由於您尚未設定網站，您將重新引導至 WordPress 安裝精靈。

1. 執行標準安裝。`wp-config.php` 檔案已存在於原始碼中，且會設定為自環境讀取資料庫連線資訊。應該不會提示您設定連線。

安裝約需要 1 分鐘來完成。

## 更新金鑰和鹽
<a name="php-hawordpress-tutorial-updatesalts"></a>

WordPress 組態檔案 `wp-config.php` 亦會自環境屬性讀取金鑰與鹽的值。這些屬性目前均由 `test` 資料夾的 `wordpress.config` 檔案設定為 `.ebextensions`。

雜湊鹽可以是任何符合[環境屬性要求](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)的值，但是不應存放於原始控制碼中。使用 Elastic Beanstalk 主控台直接於環境設定這些屬性。

**若要更新環境屬性**

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

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

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

1. 在 **Software (軟體)** 下，選擇 **Edit (編輯)**。

1. 對於 `Environment properties`，修改以下屬性：
   + `AUTH_KEY` – 針對 `AUTH_KEY` 所選的值。
   + `SECURE_AUTH_KEY` – 針對 `SECURE_AUTH_KEY` 所選的值。
   + `LOGGED_IN_KEY` – 針對 `LOGGED_IN_KEY` 所選的值。
   + `NONCE_KEY` – 針對 `NONCE_KEY` 所選的值。
   + `AUTH_SALT` – 針對 `AUTH_SALT` 所選的值。
   + `SECURE_AUTH_SALT` – 針對 `SECURE_AUTH_SALT` 所選的值。
   + `LOGGED_IN_SALT` – 針對 `LOGGED_IN_SALT` 所選的值。
   + `NONCE_SALT` – 針對 `NONCE_SALT` 所選的值。

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

**注意**  
於環境直接設定的屬性會覆寫 `wordpress.config` 中的值。

## 移除存取限制
<a name="php-hawordpress-tutorial-updateenv"></a>

範例專案包含組態檔案 `loadbalancer-sg.config`。它會使用您在 `dev.config` 中設定的 IP 地址，建立安全群組並將其指派至環境的負載平衡器。它會將連接埠 80 上的 HTTP 存取限制為來自您網路的連線。否則，可在您安裝 WordPress 並設定管理者帳戶前，避免可能的外部人士連線至您的網站。

現在您已安裝 WordPress，請移除組態檔案以向全世界公開您的網站。

**欲移除限制並更新您的環境**

1. 從專案目錄中刪除 `.ebextensions/loadbalancer-sg.config` 檔案。

   ```
   ~/wordpress-beanstalk$ rm .ebextensions/loadbalancer-sg.config
   ```

1. 建立原始碼套件。

   ```
   ~/eb-wordpress$ zip ../wordpress-beanstalk-v2.zip -r * .[^.]*
   ```

將來源套件上傳至 Elastic Beanstalk，以將 WordPress 部署至您的環境。

**若要部署原始碼套件**

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

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

1. 在環境概觀頁面上，選擇 **Upload and deploy** (上傳和部署)。

1. 使用畫面顯示對話方塊來上傳原始碼套件。

1. 選擇 **Deploy** (部署)。

1. 部署完成後，您可選擇網站的 URL 以在新分頁中開啟您的網站。

## 設定 Auto Scaling 群組
<a name="php-hawordpress-tutorial-autoscaling"></a>

最後，請增加執行個體計數下限，藉此設定您的環境 Auto Scaling 群組。隨時執行至少兩個執行個體，以防止您環境中的 web 伺服器出現單一故障點。這也可讓您在不停用網站的情況下部署變更。

**若要設定您環境的 Auto Scaling 群組，以維持高可用性**

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

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

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

1. 在 **Capacity (容量)** 組態類別中，選擇 **Edit (編輯)**。

1. 在 **Auto Scaling 群組**區段，將**最小執行個體**設定為 **2**。

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

若要支援跨多個執行個體上傳內容，範例專案會使用 Amazon EFS 來建立共用檔案系統。在網站上建立貼文並上傳內容以將內容存放在共用檔案系統上。查看貼文並重新整理頁面數次來點擊兩個執行個體並確認共用檔案系統正在執行中。

## 升級 WordPress
<a name="php-hawordpress-tutorial-upgrade"></a>

若要升級為新版本的 WordPress，請備份您的網站並將其部署到新的環境。

**重要**  
不要在 WordPress 內使用更新功能，或者更新您的原始檔案以使用新版本。這兩個動作都會導致您的貼文 URL 傳回 404 錯誤，即使他們仍在資料庫與檔案系統中。

**若要升級 WordPress**

1. 在 WordPress 管理主控台中使用匯出工具，將您的貼文匯出至 XML 檔案。

1. 使用您安裝前一版本的相同步驟來部署並安裝 WordPress 的新版本到 Elastic Beanstalk。為了避免停機時間，您可以使用新版本建立環境。

1. 在新的版本上的管理主控台中，安裝 WordPress 匯入工具，並使用它來匯入包含您的貼文的 XML 檔案。如果貼文是由管理員使用者在舊版本上建立的，請在新網站上指定他們給管理員使用者，而非嘗試匯入管理員使用者。

1. 若您部署了新版本到個別的環境，請進行 [CNAME 調換](using-features.CNAMESwap.md)來從舊網站重新引導使用者到新網站。

## 清除
<a name="php-hawordpress-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. 使用畫面顯示對話方塊來確認環境終止。

此外，您可終止於 Elastic Beanstalk 環境外建立的資料庫資源。終止 Amazon RDS 資料庫執行個體時，您可擷取快照，稍後再將資料還原至另一個執行個體。

**終止 RDS 資料庫執行個體**

1. 開啟 [Amazon RDS 主控台](https://console.aws.amazon.com/rds)。

1. 選擇 **Databases** (資料庫)。

1. 選擇資料庫執行個體。

1. 選擇**動作**，然後選擇**刪除**。

1. 選擇是否建立快照，然後選擇 **Delete (刪除)**。

## 後續步驟
<a name="php-hawordpress-tutorial-nextsteps"></a>

隨著您繼續開發應用程式，您可能會希望無須手動建立 .zip 檔案並將其上傳至 Elastic Beanstalk 主控台，即可管理環境和部署應用程式。[Elastic Beanstalk 命令列界面](eb-cli3.md) (EB CLI) 提供了簡單易用的命令，讓您可從命令列界面建立、設定和部署應用程式至 Elastic Beanstalk 環境。

此範例應用程式使用組態檔案來進行 PHP 設定，並於資料庫建立表格 (如尚未存在)。您亦可於環境建立期間，使用組態檔案進行執行個體的安全群組設定，以避免耗時的組態更新。如需詳細資訊，請參閱[使用組態檔案 (`.ebextensions`) 來進行進階的環境自訂](ebextensions.md)。

進行開發和測試時，建議您使用 Elastic Beanstalk 的功能，將受管的資料庫執行個體直接加入您的環境。如需於環境中設定資料庫的說明，請參閱[將資料庫新增至您的 Elastic Beanstalk 環境](using-features.managing.db.md)。

若您需要高效能資料庫，請考慮使用 [Amazon Aurora](https://aws.amazon.com/rds/aurora/)。Amazon Aurora 是一種與 MySQL 相容的資料庫引擎，能夠以低成本提供商用資料庫的功能。欲將您的應用程式連接至不同資料庫，請重複[安全群組設定](php-ha-tutorial.md#php-hawrds-tutorial-database)步驟，並[更新 RDS 相關的環境屬性](php-ha-tutorial.md#php-hawrds-tutorial-configure)。

最後，若您打算於生產環境中使用您的應用程式，建議您[設定您環境的自訂網域名稱](customdomains.md)，並[啟用 HTTPS](configuring-https.md) 安全連線。

# 使用外部 Amazon RDS 資料庫將高可用性 Drupal 網站資料庫部署至 Elastic Beanstalk
<a name="php-hadrupal-tutorial"></a>

本教學課程會逐步解說在外部[啟動 RDS 資料庫執行個體](AWSHowTo.RDS.md)的程序 AWS Elastic Beanstalk。然後說明任何設定執行 Drupal 網站的高可用性環境來與執行個體連接。此網站使用 Amazon Elastic File System (Amazon EFS) 做為共用的儲存裝置以放置上傳的檔案。執行 Elastic Beanstalk 外的資料庫執行個體，會將該資料庫自您環境的生命週期分離，並讓您可自多個環境連接至相同的資料庫、更換資料庫，或執行藍/綠部署而不影響您的資料庫。

**Topics**
+ [先決條件](#php-hadrupal-tutorial-prereqs)
+ [在 Amazon RDS 中啟動資料庫執行個體](#php-hadrupal-tutorial-database)
+ [啟動 Elastic Beanstalk 環境](#php-hadrupal-tutorial-launch)
+ [設定安全設定和環境屬性](#php-hadrupal-tutorial-configure)
+ [設定並部署您的應用程式](#php-hadrupal-tutorial-deploy)
+ [安裝 Drupal](#php-hadrupal-tutorial-install)
+ [更新 Drupal 組態和移除存取限制](#php-hadrupal-tutorial-updateenv)
+ [設定 Auto Scaling 群組](#php-hadrupal-tutorial-autoscaling)
+ [清除](#php-hadrupal-tutorial-cleanup)
+ [後續步驟](#php-hadrupal-tutorial-nextsteps)

## 先決條件
<a name="php-hadrupal-tutorial-prereqs"></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 版本。

本 Amazon Relational Database Service (Amazon RDS) 任務教學中的程序假設您會在預設的 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) 中啟動資源。所有新帳戶的各個區域都包含預設 VPC。若您沒有預設 VPC，則程序會有所不同。請參閱 [搭配 Amazon RDS 使用 Elastic Beanstalk](AWSHowTo.RDS.md) 以取得 EC2-Classic 和自訂 VPC 平台的相關說明。

此範例應用程式使用 Amazon EFS。它僅適用於支援 Amazon EFS AWS 的區域。若要了解支援 AWS 區域，請參閱[《》中的 Amazon Elastic File System 端點和配額](https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html)*AWS 一般參考*。

如果您的 Elastic Beanstalk 環境的平台使用 PHP 7.4 或更早版本，我們建議您使用 Drupal 8.9.13 版的本教學課程。對於安裝 PHP 8.0 或更新版本的平台，我們建議您使用 Drupal 9.1.5。

有關 Drupal 版本和其支援之 PHP 版本的詳細資訊，請參閱 Drupal 網站上的 [PHP 要求](https://www.drupal.org/docs/system-requirements/php-requirements#php_required)。Drupal 推薦的核心版本在網站 [https://www.drupal.org/project/drupal](https://www.drupal.org/project/drupal) 上列出。

## 在 Amazon RDS 中啟動資料庫執行個體
<a name="php-hadrupal-tutorial-database"></a>

若要使用外部資料庫搭配執行於 Elastic Beanstalk 的應用程式，請先使用 Amazon RDS 啟動資料庫執行個體。當您使用 Amazon RDS 啟動執行個體時，它會完全獨立於 Elastic Beanstalk 和您的 Elastic Beanstalk 環境之外，而且不會受到 Elastic Beanstalk 終止或監控。

使用 Amazon RDS 主控台，啟動異地同步備份的 **MySQL** 資料庫執行個體。選擇異地同步備份部署可確保您的資料庫將會容錯遷移，並在來源資料庫執行個體停止服務時繼續運作。

**欲在預設 VPC 中啟動 RDS 資料庫執行個體**

1. 開啟 [RDS 主控台](https://console.aws.amazon.com/rds/home)。

1. 在導覽窗格中，選擇 **Databases** (資料庫)。

1. 選擇 **Create database** (建立資料庫)。

1. 選擇 **Standard Create (標準建立)**。
**重要**  
請勿選擇 **Easy Create (輕鬆建立)**。如果您選擇該選項，則您無法設定必要的設定來啟動此 RDS 資料庫。

1. 在 **Additional configuration (其他設定)** 下方的 **Initial database name (初始資料庫名稱)** 中輸入 **ebdb**。

1. 檢閱預設設定，並根據您的特定要求來調整這些設定。請注意以下選項：
   + **資料庫執行個體類別** – 選擇具有適當數量的記憶體和 CPU 功率之適合您工作負載的執行個體大小。
   + **異地同步備份部署** – 若要達到高可用性，請將此項設定為**在不同的 AZ 中建立 Aurora 複本/讀取器節點**。
   + **主要使用者名稱**和**主要密碼** – 資料庫使用者名稱和密碼。記下這些設定，以供稍後使用。

1. 檢查其餘選項的預設設定，然後選擇 **Create database (建立資料庫)**。

接著，修改連接至資料庫執行個體的安全群組，以允許適當連接埠的傳入流量。此安全群組與您稍後將連接至 Elastic Beanstalk 環境的相同，因此，您新增的規則將授予相同安全群組內其他資源的流量傳入許可。

**修改連接至 RDS 執行個體的安全群組的傳入規則**

1. 開啟 [Amazon RDS 主控台](https://console.aws.amazon.com/rds/home)。

1. 選擇 **Databases** (資料庫)。

1. 選擇您的資料庫執行個體名稱以檢視其詳細資料。

1. 在 **Connectivity** (連線) 區段中，記下顯示於此頁面的 **Subnets** (子網路)、**Security groups** (安全群組) 和 **Endpoint** (端點)。這樣您稍後便可使用這些資訊。

1. 在 **Security** (安全性) 下，可查看與資料庫執行個體相關聯的安全群組。開啟連結以檢視 Amazon EC2 主控台內的安全群組。

1. 在安全群組的詳細資訊中，選擇 **Inbound (傳入)**。

1. 選擇**編輯**。

1. 選擇 **Add Rule** (新增規則)。

1. 針對 **Type (類型)**，選擇您的應用程式所使用的資料庫引擎。

1. 對於 **Source (來源)**，輸入 **sg-** 檢視可用的安全群組清單。選擇與 Elastic Beanstalk 環境中使用之 Auto Scaling 群組相關聯的安全群組。以便環境中的 Amazon EC2 執行個體可以存取資料庫。  
![\[在 Amazon EC2 主控台中編輯安全群組傳入規則的螢幕影像。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. 選擇**儲存**。

建立資料庫執行個體約需要 10 分鐘。同時，啟動您的 Elastic Beanstalk 環境。

## 啟動 Elastic Beanstalk 環境
<a name="php-hadrupal-tutorial-launch"></a>

使用 Elastic Beanstalk 主控台建立 Elastic Beanstalk 環境。選擇 **PHP (PHP)** 平台，並接受預設的設定和範本程式碼。在您啟動環境之後，可設定開環境連接至資料庫，然後將 Drupal 程式碼部署至該環境。

**啟動環境 (主控台)**

1. 使用此一預設連結來開啟 Elastic Beanstalk 主控台：[console.aws.amazon.com/elasticbeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 在 **Platform (平台)**，選取符合您應用程式所使用語言的平台和平台分支。

1. 針對 **Application code (應用程式程式碼)**，選擇 **Sample application (範例應用程式)**。

1. 選擇 **Review and launch (檢閱和啟動)**。

1. 檢視可用選項。選擇您要使用的可用選項，當您準備就緒時，請選擇 **Creat app (建立應用程式)**。

使用大約需要五分鐘時間建立環境，並且建立下列資源：
+ **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 會終止其中的所有資源。您啟動的 RDS 資料庫執行個體在您的環境之外，因此必須負責管理其生命週期。

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

## 設定安全設定和環境屬性
<a name="php-hadrupal-tutorial-configure"></a>

將資料庫執行個體的安全群組新增至執行環境。此程序會透過其他連接的安全群組，使 Elastic Beanstalk 重新佈建您環境中的所有執行個體。

**欲將安全群組新增至您的環境**
+ 執行以下任意一項：
  + 使用 Elastic Beanstalk 主控台新增安全群組

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

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

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

    1. 在 **Instances (執行個體)** 組態類別中，選擇 **Edit (編輯)**。

    1. 在 **EC2 安全群組**下，除了 Elastic Beanstalk 建立的執行個體安全群組，請選擇要連接到執行個體的安全群組。

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

    1. 閱讀警告的內容，然後選擇 **Confirm (確認)**。
  + 若要使用[組態檔案](ebextensions.md)新增安全群組，請使用 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) 範例檔案。

接著，使用環境屬性，將連線資訊傳送至環境。此範例應用程式使用一組預設屬性，這些屬性符合您於環境佈建資料庫時 Elastic Beanstalk 所設定的屬性。

**設定 Amazon RDS 資料庫執行個體的環境屬性**

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

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

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

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

1. 在 **Environment Properties (環境屬性)** 區段，定義應用程式建立連線字串所讀取的變數。為了與具備整合式 RDS 資料庫執行個體的環境相容，請使用下列名稱與值。您可以在 [RDS 主控台](https://console.aws.amazon.com/rds/home)中找到除了密碼以外的所有值。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/php-hadrupal-tutorial.html)  
![\[新增了 RDS 屬性的環境屬性組態區段\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

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

安裝 Drupal 後，您需要使用 SSH 連接到執行個體，以擷取一些組態詳細資訊。指派 SSH 金鑰給您環境的執行個體。

**設定 SSH**

1. 如果您先前尚未建立金鑰對，請開啟 Amazon EC2 主控台中的[金鑰對頁面](https://console.aws.amazon.com/ec2/v2/home#KeyPairs)，並依照指示建立帳戶。

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

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

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

1. 在 **Security (安全性)** 下，選擇 **Edit (編輯)**。

1. 於 **EC2 key pair (EC2 金鑰對)** 中，選擇您的金鑰對。

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

## 設定並部署您的應用程式
<a name="php-hadrupal-tutorial-deploy"></a>

若要建立 Elastic Beanstalk 的 Drupal 專案，請下載 Drupal 原始程式碼，並將它和在 GitHub 上的 [aws-samples/eb-php-drupal](https://github.com/aws-samples/eb-php-drupal) 儲存庫中的檔案合併。

**建立 Drupal 專案**

1. 執行下列命令從 *www.drupal.org/download* 下載 Drupal。要了解關於下載的詳細資訊，請參閱 [Drupal 網站](https://www.drupal.org/download)。

   如果您的 Elastic Beanstalk 環境的平台使用 PHP 7.4 或更早版本，我們建議您下載 Drupal 8.9.13 版的本教學課程。您可以執行下列命令進行下載。

   ```
   ~$ curl https://ftp.drupal.org/files/projects/drupal-8.9.13.tar.gz -o drupal.tar.gz
   ```

   如果您的平台使用 PHP 8.0 或更新版本，我們建議您下載 Drupal 9.1.5。您可以使用此命令來進行下載。

   ```
   ~$ curl https://ftp.drupal.org/files/projects/drupal-9.1.5.tar.gz -o drupal.tar.gz
   ```

   有關 Drupal 版本和其支援之 PHP 版本的詳細資訊，請參閱 Drupal 官方文件中的 [PHP 要求](https://www.drupal.org/docs/system-requirements/php-requirements#php_required)。[Drupal 網站](https://www.drupal.org/project/drupal)上列出了 Drupal 推薦的核心版本。

1. 使用下列命令從範例儲存庫下載組態檔案：

   ```
   ~$ wget https://github.com/aws-samples/eb-php-drupal/releases/download/v1.1/eb-php-drupal-v1.zip
   ```

1. 解壓縮 Drupal 並變更資料夾名稱。

   若您已下載 Drupal 8.9.13：

   ```
    ~$ tar -xvf drupal.tar.gz
    ~$ mv drupal-8.9.13 drupal-beanstalk
    ~$ cd drupal-beanstalk
   ```

   若您已下載 Drupal 9.1.5：

   ```
    ~$ tar -xvf drupal.tar.gz
    ~$ mv drupal-9.1.5 drupal-beanstalk
    ~$ cd drupal-beanstalk
   ```

1. 在 Drupal 安裝時解壓縮組態檔案。

   ```
    ~/drupal-beanstalk$ unzip ../eb-php-drupal-v1.zip
     creating: .ebextensions/
     inflating: .ebextensions/dev.config
     inflating: .ebextensions/drupal.config
     inflating: .ebextensions/efs-create.config
     inflating: .ebextensions/efs-filesystem.template
     inflating: .ebextensions/efs-mount.config
     inflating: .ebextensions/loadbalancer-sg.config
     inflating: LICENSE
     inflating: README.md
     inflating: beanstalk-settings.php
   ```

驗證您的 `drupal-beanstalk` 資料夾結構是否正確，如下所示。

```
drupal-beanstalk$ tree -aL 1
.
├── autoload.php
├── beanstalk-settings.php
├── composer.json
├── composer.lock
├── core
├── .csslintrc
├── .ebextensions
├── .ebextensions
├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── example.gitignore
├── .gitattributes
├── .htaccess
├── .ht.router.php
├── index.php
├── LICENSE
├── LICENSE.txt
├── modules
├── profiles
├── README.md
├── README.txt
├── robots.txt
├── sites
├── themes
├── update.php
├── vendor
└── web.config
```

來自專案儲存庫的 `beanstalk-settings.php` 檔案使用您在前一步驟中定義的環境變數，設定資料庫連線。`.ebextensions` 資料夾包含在 Elastic Beanstalk 環境中建立其他資源的組態檔案。

需修改組態檔案才可適用於您的帳戶。以適當的 ID 來更換檔案中的預留位置值，並建立原始碼套件。

**若要更新組態檔案並建立原始碼套件。**

1. 如下修改組態檔案。
   + `.ebextensions/dev.config` – 會將您環境的存取限制為您的 IP 地址，在 Drupal 安裝程序期間予以保護。將檔案上方附近的預留位置 IP 地址取代為您的公有 IP 地址。
   + `.ebextensions/efs-create.config` – 會在您 VPC 的各個可用區域/子網路中建立 EFS 檔案系統和掛載點。在 [Amazon VPC 主控台](https://console.aws.amazon.com/vpc/home#subnets:filter=default)中辨識您的預設 VPC 主控台和子網路 ID。

1. 建立[原始碼套件](applications-sourcebundle.md)，其中包含專案資料夾中的檔案。以下命令建立一個名為 `drupal-beanstalk.zip` 的原始碼套件。它不含 `vendor` 資料夾中的檔案，其不僅佔用許多空間，在部署應用程式到 Elastic Beanstalk 時也派不上用場。

   ```
   ~/eb-drupal$ zip ../drupal-beanstalk.zip -r * .[^.]* -x "vendor/*"
   ```

將來源套件上傳至 Elastic Beanstalk，以將 Drupal 部署至您的環境。

**若要部署原始碼套件**

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

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

1. 在環境概觀頁面上，選擇 **Upload and deploy** (上傳和部署)。

1. 使用畫面顯示對話方塊來上傳原始碼套件。

1. 選擇 **Deploy** (部署)。

1. 部署完成後，您可選擇網站的 URL 以在新分頁中開啟您的網站。

## 安裝 Drupal
<a name="php-hadrupal-tutorial-install"></a>

**欲完成 Drupal 安裝**

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

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

1. 在瀏覽器中選擇環境 URL 來開啟您的網站。由於網站尚未設定，您將重新引導至 Drupal 安裝精靈。

1. 使用下列資料庫的設定來執行標準安裝：
   + **資料庫名稱** – Amazon RDS 主控台顯示的**資料庫名稱**。
   + **資料庫使用者名稱和密碼** – 您建立資料庫時輸入的**主要使用者名稱**和**主要密碼**的值。
   + **進階選項 > 主機** – Amazon RDS 主控台顯示的資料庫執行個體**端點**。

安裝約需要 1 分鐘來完成。

## 更新 Drupal 組態和移除存取限制
<a name="php-hadrupal-tutorial-updateenv"></a>

Drupal 安裝程序建立名為 `settings.php` 的檔案於執行個體上的 `sites/default`資料夾。您需要原始程式碼中的這個檔案，以避免在後續部署時重設您的網站，但該檔案目前包含您不想認可來源的秘密。連接到應用程式執行個體以從設定檔擷取資訊。

**若要使用 SSH 連結至您的應用程式執行個體**

1. 開啟 Amazon EC2 主控台的[執行個體頁面](https://console.aws.amazon.com/ec2/v2/home#Instances:sort=tag:Name)。

1. 選擇應用程式執行個體。此執行個體根據您的 Elastic Beanstalk 環境來命名。

1. 選擇**連線**。

1. 依照說明將執行個體與 SSH 連接。命令結果類似如下。

   ```
   $ ssh -i ~/.ssh/mykey ec2-user@ec2-00-55-33-222.us-west-2.compute.amazonaws.com
   ```

從設定檔最後一行取得同步目錄 ID。

```
[ec2-user ~]$ tail -n 1 /var/app/current/sites/default/settings.php
$config_directories['sync'] = 'sites/default/files/config_4ccfX2sPQm79p1mk5IbUq9S_FokcENO4mxyC-L18-4g_xKj_7j9ydn31kDOYOgnzMu071Tvc4Q/sync';
```

此檔案還包含網站目前的雜湊鍵，但您可以略過目前的值，並使用自己的值。

將同步目錄路徑和雜湊鍵指派到環境屬性。來自專案儲存庫的自訂設定檔案會讀取這些屬性，以在部署期間設定網站，除了您稍早設定的資料庫連線屬性外。

**Drupal 組態屬性**
+ `SYNC_DIR` – 同步目錄的路徑。
+ `HASH_SALT` – 所有符合[環境屬性要求](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)的字串值。

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

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

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

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

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

1. 向下捲動至**執行期環境變數**。

1. 選取**新增環境變數**。

1. 針對**來源**選取**純文字**。
**注意**  
下拉式清單中的 **Secrets Manager** 和 **SSM 參數存放**區值用於將環境變數設定為秘密，以存放敏感資料，例如登入資料和 API 金鑰。如需詳細資訊，請參閱[搭配 AWS Secrets Manager 和 AWS Systems Manager 參數存放區使用 Elastic Beanstalk](AWSHowTo.secrets.md)。

1. 輸入**環境變數名稱**和**環境變數值**對。

1. 如果您需要新增更多變數，請重複步驟 **6** 到**步驟 8**。

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

最終，此範例專案內含的組態檔案 (`loadbalancer-sg.config`)，會使用您於 `dev.config` 設定的 IP 地址，將連接埠 80 的 HTTP 存取限制為來自您網路的連線，以建立安全群組並將其指派至環境的負載平衡器。否則，可在您安裝 Drupal 並設定管理者帳戶前，避免可能的外部人士連線至您的網站。

**更新 Drupal 的組態和移除存取限制**

1. 從專案目錄中刪除 `.ebextensions/loadbalancer-sg.config` 檔案。

   ```
   ~/drupal-beanstalk$ rm .ebextensions/loadbalancer-sg.config
   ```

1. 將自訂的 `settings.php` 檔案複製到網站資料夾。

   ```
   ~/drupal-beanstalk$ cp beanstalk-settings.php sites/default/settings.php
   ```

1. 建立原始碼套件。

   ```
   ~/eb-drupal$ zip ../drupal-beanstalk-v2.zip -r * .[^.]* -x "vendor/*"
   ```

將來源套件上傳至 Elastic Beanstalk，以將 Drupal 部署至您的環境。

**若要部署原始碼套件**

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

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

1. 在環境概觀頁面上，選擇 **Upload and deploy** (上傳和部署)。

1. 使用畫面顯示對話方塊來上傳原始碼套件。

1. 選擇 **Deploy** (部署)。

1. 部署完成後，您可選擇網站的 URL 以在新分頁中開啟您的網站。

## 設定 Auto Scaling 群組
<a name="php-hadrupal-tutorial-autoscaling"></a>

最後，請增加執行個體計數下限，藉此設定您的環境 Auto Scaling 群組。隨時至少執行兩個執行個體，避免您環境中的 Web 伺服器出現單點故障，且無須停止網站服務即可部署變更。

**若要設定您環境的 Auto Scaling 群組，以維持高可用性**

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

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

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

1. 在 **Capacity (容量)** 組態類別中，選擇 **Edit (編輯)**。

1. 在 **Auto Scaling 群組**區段，將**最小執行個體**設定為 **2**。

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

若要支援跨多個執行個體上傳內容，範例專案會使用 Amazon Elastic File System 來建立共用檔案系統。在網站上建立貼文並上傳內容以將內容存放在共用檔案系統上。查看貼文並重新整理頁面數次來點擊兩個執行個體並確認共用檔案系統正在執行中。

## 清除
<a name="php-hadrupal-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. 使用畫面顯示對話方塊來確認環境終止。

此外，您可終止於 Elastic Beanstalk 環境外建立的資料庫資源。終止 Amazon RDS 資料庫執行個體時，您可擷取快照，稍後再將資料還原至另一個執行個體。

**終止 RDS 資料庫執行個體**

1. 開啟 [Amazon RDS 主控台](https://console.aws.amazon.com/rds)。

1. 選擇 **Databases** (資料庫)。

1. 選擇資料庫執行個體。

1. 選擇**動作**，然後選擇**刪除**。

1. 選擇是否建立快照，然後選擇 **Delete (刪除)**。

## 後續步驟
<a name="php-hadrupal-tutorial-nextsteps"></a>

隨著您繼續開發應用程式，您可能會希望無須手動建立 .zip 檔案並將其上傳至 Elastic Beanstalk 主控台，即可管理環境和部署應用程式。[Elastic Beanstalk 命令列界面](eb-cli3.md) (EB CLI) 提供了簡單易用的命令，讓您可從命令列界面建立、設定和部署應用程式至 Elastic Beanstalk 環境。

此範例應用程式使用組態檔案來進行 PHP 設定，並於資料庫建立表格 (如尚未存在)。您亦可於環境建立期間，使用組態檔案進行執行個體的安全群組設定，以避免耗時的組態更新。如需詳細資訊，請參閱[使用組態檔案 (`.ebextensions`) 來進行進階的環境自訂](ebextensions.md)。

進行開發和測試時，建議您使用 Elastic Beanstalk 的功能，將受管的資料庫執行個體直接加入您的環境。如需於環境中設定資料庫的說明，請參閱[將資料庫新增至您的 Elastic Beanstalk 環境](using-features.managing.db.md)。

若您需要高效能資料庫，請考慮使用 [Amazon Aurora](https://aws.amazon.com/rds/aurora/)。Amazon Aurora 是一種與 MySQL 相容的資料庫引擎，能夠以低成本提供商用資料庫的功能。欲將您的應用程式連接至不同資料庫，請重複[安全群組設定](php-ha-tutorial.md#php-hawrds-tutorial-database)步驟，並[更新 RDS 相關的環境屬性](php-ha-tutorial.md#php-hawrds-tutorial-configure)。

最後，若您打算於生產環境中使用您的應用程式，建議您[設定您環境的自訂網域名稱](customdomains.md)，並[啟用 HTTPS](configuring-https.md) 安全連線。