

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

# 使用外部 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) 安全連線。