本教程介紹如何啟動AWS Elastic Beanstalk 外部的 Amazon RDS 數據庫實例,以及如何配置運行 WordPress 網站的高可用性環境以連接到該實例。該網站使用 Amazon Elastic File System (Amazon EFS) 作為上傳文件的共享存儲。
運行 Elastic Beanstalk 外部的數據庫實例可以將數據庫與環境的生命週期分離。這使您可以從多個環境連接到同一數據庫、將一個數據庫替換為另一個數據庫,或者執行藍/綠部署,而不會影響您的數據庫。
本教程是使用 WordPress 版本 4.9.5 和 PHP 7.0 開發的。
筆記
有關 PHP 版本與 WordPress 版本的兼容性的最新信息,請參閱PHP 兼容性和 WordPress 版本在 WordPress 網站上。在為您的 WordPress 實施升級到新版本的 PHP 之前,您應該參考此信息。
主題
- 先決條件
- 在 Amazon RDS 中啟動數據庫實例
- 下載WordPress
- 啟動 Elastic Beanstalk 環境
- 配置安全組和環境屬性
- 配置和部署您的應用程序
- 安裝 WordPress
- 更新密鑰和鹽
- 刪除訪問限制
- 配置您的 Auto Scaling 組
- 升級WordPress
- 清理
- 下一步
先決條件
本教程假設您了解基本 Elastic Beanstalk 操作和 Elastic Beanstalk 控制台。如果您尚未啟動,請按照開始使用 Elastic Beanstalk中的說明啟動您的第一個 Elastic Beanstalk 環境。
要遵循本指南中的過程,您將需要命令行終端或 shell 來運行命令。命令顯示在列表中,前面帶有提示符 ($) 和當前目錄的名稱(如果適用)。
~/eb-project$
this is a command this is output
在 Linux 和 macOS 上,您可以使用您喜歡的 shell 和包管理器。在 Windows 10 上,您可以安裝適用於 Linux 的 Windows 子系統獲取 Ubuntu 和 Bash 的 Windows 集成版本。
默認專有網絡
本教程中的 Amazon Relational Database Service (Amazon RDS) 過程假設您在默認Amazon Virtual Private Cloud (Amazon VPC)中啟動資源 。所有新賬戶在每個 AWS 區域中都包含一個默認 VPC。如果您沒有默認 VPC,則過程會有所不同。有關 EC2-Classic 和自定義 VPC 平台的說明,請參閱將 Elastic Beanstalk 與 Amazon RDS 結合使用。
AWS 區域
示例應用程序使用 Amazon EFS,它僅在支持 Amazon EFS 的 AWS 區域中運行。要了解支持的 AWS 區域,請參閱_AWS 一般參考_中的Amazon Elastic File System 終端節點和配額。
在 Amazon RDS 中啟動數據庫實例
當您使用 Amazon RDS 啟動實例時,它完全獨立於 Elastic Beanstalk 和您的 Elastic Beanstalk 環境,並且不會被 Elastic Beanstalk 終止或監控。
在以下步驟中,您將使用 Amazon RDS 控制台來:
-
使用MySQL引擎啟動數據庫。
-
啟用多可用區部署。這會在不同的可用區 (AZ) 中創建備用數據庫,以提供數據冗餘、消除 I/O 凍結並最大限度地減少系統備份期間的延遲峰值。
在默認 VPC 中啟動 RDS 數據庫實例
-
打開RDS控制台。
-
在導航窗格中,選擇數據庫。
-
選擇創建數據庫。
-
選擇標準創建。
重要的
不要選擇“輕鬆創建”。如果您選擇它,則無法配置啟動此 RDS 數據庫所需的設置。
-
在“附加配置”下,對於“初始數據庫名稱”,鍵入
ebdb
。 -
查看默認設置並根據您的具體要求調整這些設置。請注意以下選項:
-
數據庫實例類– 選擇具有適合您的工作負載的內存和 CPU 能力的實例大小。
-
多可用區部署– 為了獲得高可用性,請將其設置為在不同可用區中創建 Aurora 副本/讀取器節點。
-
主用戶名和主密碼– 數據庫用戶名和密碼。記下這些設置,因為稍後您將使用它們。
-
-
驗證其餘選項的默認設置,然後選擇創建數據庫。
創建數據庫實例後,修改附加到它的安全組,以允許適當端口上的入站流量。
筆記
這與您稍後將附加到 Elastic Beanstalk 環境的安全組相同,因此您現在添加的規則將向同一安全組中的其他資源授予入口權限。
修改附加到 RDS 實例的安全組的入站規則
-
打開Amazon RDS 控制台。
-
選擇數據庫。
-
選擇數據庫實例的名稱以查看其詳細信息。
-
在“連接”部分中,記下此頁面上顯示的“子網”、“安全組”和 “端點” 。這樣您以後就可以使用此信息。
-
在安全性下,您可以查看與數據庫實例關聯的安全組。打開鏈接以在 Amazon EC2 控制台中查看安全組。
Amazon RDS 控制台中數據庫實例頁面的連接部分
-
在安全組詳細信息中,選擇Inbound。
-
選擇編輯。
-
選擇添加規則。
-
對於Type,選擇您的應用程序使用的數據庫引擎。
-
對於Source,輸入
sg-
以查看可用安全組的列表。選擇與您的 Elastic Beanstalk 環境所使用的 Auto Scaling 組關聯的安全組。這樣環境中的 Amazon EC2 實例就可以訪問數據庫。在 Amazon EC2 控制台中編輯安全組的入站規則
-
選擇保存。
創建數據庫實例大約需要10分鐘。同時,下載 WordPress 並創建您的 Elastic Beanstalk 環境。
下載WordPress
要準備使用 AWS Elastic Beanstalk 部署 WordPress,您必須將 WordPress 文件複製到您的計算機並提供正確的配置信息。
創建 WordPress 項目
-
從wordpress.org下載 WordPress。
~$
curl https://wordpress.org/wordpress-4.9.5.tar.gz -o wordpress.tar.gz -
從示例存儲庫下載配置文件。
~$
wget https://github.com/aws-samples/eb-php-wordpress/releases/download/v1.1/eb-php-wordpress-v1.zip -
解壓 WordPress 並更改文件夾名稱。
~$
tar -xvf wordpress.tar.gz~$
mv wordpress wordpress-beanstalk~$
cd wordpress-beanstalk -
在 WordPress 安裝中提取配置文件。
~/wordpress-beanstalk$
unzip ../eb-php-wordpress-v1.zipcreating: .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 環境
使用 Elastic Beanstalk 控制台創建 Elastic Beanstalk 環境。啟動環境後,您可以將其配置為連接到數據庫,然後將 WordPress 代碼部署到環境中。
在以下步驟中,您將使用 Elastic Beanstalk 控制台來:
-
使用託管PHP平台創建 Elastic Beanstalk 應用程序。
-
接受默認設置和示例代碼。
啟動環境(控制台)
-
使用此預配置鏈接打開 Elastic Beanstalk 控制台:console.aws.amazon.com/elasticbeanstalk/home#/newApplication ?applicationName=tutorials&environmentType=LoadBalanced
-
對於Platform,選擇與您的應用程序使用的語言匹配的平台和平台分支。
-
對於應用程序代碼,選擇示例應用程序。
-
選擇“審查並啟動”。
-
查看可用選項。選擇您要使用的可用選項,準備好後,選擇創建應用程序。
環境創建大約需要五分鐘,並創建以下資源。
-
EC2 instance – An Amazon Elastic Compute Cloud (Amazon EC2) virtual machine configured to run web apps on the platform that you choose.
Each platform runs a specific set of software, configuration files, and scripts to support a specific language version, framework, web container, or combination of these. Most platforms use either Apache or NGINX as a reverse proxy that sits in front of your web app, forwards requests to it, serves static assets, and generates access and error logs.
-
Instance security group – An Amazon EC2 security group configured to allow inbound traffic on port 80. This resource lets HTTP traffic from the load balancer reach the EC2 instance running your web app. By default, traffic isn’t allowed on other ports.
-
Load balancer – An Elastic Load Balancing load balancer configured to distribute requests to the instances running your application. A load balancer also eliminates the need to expose your instances directly to the internet.
-
Load balancer security group – An Amazon EC2 security group configured to allow inbound traffic on port 80. This resource lets HTTP traffic from the internet reach the load balancer. By default, traffic isn’t allowed on other ports.
-
Auto Scaling group – An Auto Scaling group configured to replace an instance if it is terminated or becomes unavailable.
-
Amazon S3 bucket – A storage location for your source code, logs, and other artifacts that are created when you use Elastic Beanstalk.
-
Amazon CloudWatch alarms – Two CloudWatch alarms that monitor the load on the instances in your environment and that are triggered if the load is too high or too low. When an alarm is triggered, your Auto Scaling group scales up or down in response.
-
AWS CloudFormation stack – Elastic Beanstalk uses AWS CloudFormation to launch the resources in your environment and propagate configuration changes. The resources are defined in a template that you can view in the AWS CloudFormation console.
-
Domain name – A domain name that routes to your web app in the form _
subdomain
.MARKDOWN_HASH960db2ed82202a9706b97775a4269378MARKDOWNHASH
.elasticbeanstalk.com.
Elastic Beanstalk 創建的資源
-
EC2 instance – An Amazon Elastic Compute Cloud (Amazon EC2) virtual machine configured to run web apps on the platform that you choose.
Each platform runs a specific set of software, configuration files, and scripts to support a specific language version, framework, web container, or combination of these. Most platforms use either Apache or NGINX as a reverse proxy that sits in front of your web app, forwards requests to it, serves static assets, and generates access and error logs.
-
Instance security group – An Amazon EC2 security group configured to allow inbound traffic on port 80. This resource lets HTTP traffic from the load balancer reach the EC2 instance running your web app. By default, traffic isn’t allowed on other ports.
-
Load balancer – An Elastic Load Balancing load balancer configured to distribute requests to the instances running your application. A load balancer also eliminates the need to expose your instances directly to the internet.
-
Load balancer security group – An Amazon EC2 security group configured to allow inbound traffic on port 80. This resource lets HTTP traffic from the internet reach the load balancer. By default, traffic isn’t allowed on other ports.
-
Auto Scaling group – An Auto Scaling group configured to replace an instance if it is terminated or becomes unavailable.
-
Amazon S3 bucket – A storage location for your source code, logs, and other artifacts that are created when you use Elastic Beanstalk.
-
Amazon CloudWatch alarms – Two CloudWatch alarms that monitor the load on the instances in your environment and that are triggered if the load is too high or too low. When an alarm is triggered, your Auto Scaling group scales up or down in response.
-
AWS CloudFormation stack – Elastic Beanstalk uses AWS CloudFormation to launch the resources in your environment and propagate configuration changes. The resources are defined in a template that you can view in the AWS CloudFormation console.
-
Domain name – A domain name that routes to your web app in the form _
subdomain
.MARKDOWN_HASH960db2ed82202a9706b97775a4269378MARKDOWNHASH
.elasticbeanstalk.com.
所有這些資源均由 Elastic Beanstalk 管理。當您終止環境時,Elastic Beanstalk 將終止其包含的所有資源。
由於您啟動的 Amazon RDS 實例位於您的環境之外,因此您負責管理其生命週期。
筆記
Elastic Beanstalk 創建的 Amazon S3 存儲桶在環境之間共享,並且在環境終止期間不會被刪除。有關更多信息,請參閱將 Elastic Beanstalk 與 Amazon S3 結合使用。
配置安全組和環境屬性
將數據庫實例的安全組添加到您的運行環境中。此過程會導致 Elastic Beanstalk 重新配置您環境中的所有實例並附加附加安全組。
將安全組添加到您的環境
-
執行以下操作之一:
-
使用 Elastic Beanstalk 控制台添加安全組
-
打開Elastic Beanstalk 控制台,然後在區域列表中選擇您的 AWS 區域。
-
在導航窗格中,選擇環境,然後從列表中選擇您的環境的名稱。
筆記
如果您有許多環境,請使用搜索欄過濾環境列表。
-
在導航窗格中,選擇“配置”。
-
在實例配置類別中,選擇編輯。
-
在EC2 安全組下,除了 Elastic Beanstalk 創建的實例安全組之外,還選擇要附加到實例的安全組。
-
要保存更改,請選擇頁面底部的應用。
-
閱讀警告,然後選擇“確認”。
-
-
要使用配置文件示例文件。
-
接下來,使用環境屬性將連接信息傳遞到您的環境。
WordPress 應用程序使用一組默認屬性,這些屬性與您在環境中預置數據庫時 Elastic Beanstalk 配置的屬性相匹配。
為 Amazon RDS 數據庫實例配置環境屬性
-
打開Elastic Beanstalk 控制台,然後在區域列表中選擇您的 AWS 區域。
-
在導航窗格中,選擇環境,然後從列表中選擇您的環境的名稱。
筆記
如果您有許多環境,請使用搜索欄過濾環境列表。
-
在導航窗格中,選擇“配置”。
-
在更新、監控和日誌記錄配置類別中,選擇編輯。
-
在環境屬性部分中,定義應用程序讀取以構造連接字符串的變量。為了與具有集成 RDS 數據庫實例的環境兼容,請使用以下名稱和值。您可以在RDS 控制台。
物業名稱
描述
適當的價值
RDS_HOSTNAME
數據庫實例的主機名。
在Amazon RDS 控制台的連接和安全選項卡上:**終端節點**。
RDS_PORT
數據庫實例接受連接的端口。默認值因數據庫引擎而異。
在Amazon RDS 控制台的連接和安全選項卡上:**端口**。
RDS_DB_NAME
數據庫名稱,
ebdb
.在Amazon RDS 控制台的配置選項卡上:**數據庫名稱**。
RDS_USERNAME
您為數據庫配置的用戶名。
在Amazon RDS 控制台的配置選項卡上:**主用戶名**。
RDS_PASSWORD
您為數據庫配置的密碼。
不可在 Amazon RDS 控制台中參考。
添加了 RDS 屬性的環境屬性配置部分
-
要保存更改,請選擇頁面底部的應用。
配置和部署您的應用程序
驗證文件夾的結構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 並創建源包。
更新配置文件並創建源包
-
修改配置文件如下。
-
.ebextensions/dev.config
– 限制對您的環境的訪問,以在 WordPress 安裝過程中保護它。將文件頂部附近的佔位符 IP 地址替換為您將用來訪問環境網站以完成 WordPress 安裝的計算機的公共 IP 地址。筆記
根據您的網絡,您可能需要使用 IP 地址塊。
-
.ebextensions/efs-create.config
– 在 VPC 中的每個可用區/子網中創建 EFS 文件系統和掛載點。在Amazon VPC 控制台中識別您的默認 VPC 和子網 ID。
-
-
創建包含項目文件夾中的文件的源包。以下命令創建一個名為 的源包
wordpress-beanstalk.zip
。~/eb-wordpress$
zip ../wordpress-beanstalk.zip -r * .[^.]*
將源包上傳到 Elastic Beanstalk 以將 WordPress 部署到您的環境。
部署源包
-
打開Elastic Beanstalk 控制台,然後在區域列表中選擇您的 AWS 區域。
-
在導航窗格中,選擇環境,然後從列表中選擇您的環境的名稱。
筆記
如果您有許多環境,請使用搜索欄過濾環境列表。
-
在環境概覽頁面,選擇上傳並部署。
-
使用屏幕上的對話框上傳源包。
-
選擇部署。
-
部署完成後,您可以選擇站點 URL 以在新選項卡中打開您的網站。
安裝 WordPress
完成 WordPress 安裝
-
打開Elastic Beanstalk 控制台,然後在區域列表中選擇您的 AWS 區域。
-
在導航窗格中,選擇環境,然後從列表中選擇您的環境的名稱。
筆記
如果您有許多環境,請使用搜索欄過濾環境列表。
-
選擇環境 URL 以在瀏覽器中打開您的站點。您將被重定向到 WordPress 安裝嚮導,因為您尚未配置該站點。
-
執行標準安裝。該
wp-config.php
文件已存在於源代碼中,並配置為從環境中讀取數據庫連接信息。系統不應提示您配置連接。
安裝大約需要一分鐘才能完成。
更新密鑰和鹽
WordPress 配置文件wp-config.php
還會從環境屬性中讀取鍵和鹽的值。目前,這些屬性都是test
由文件夾wordpress.config
中的文件設置的.ebextensions
。
哈希鹽可以是滿足環境屬性要求的任何值,但不應將其存儲在源代碼管理中。使用 Elastic Beanstalk 控制台直接在環境中設置這些屬性。
更新環境屬性
-
打開Elastic Beanstalk 控制台,然後在區域列表中選擇您的 AWS 區域。
-
在導航窗格中,選擇環境,然後從列表中選擇您的環境的名稱。
筆記
如果您有許多環境,請使用搜索欄過濾環境列表。
-
在導航窗格中,選擇“配置”。
-
在“軟件”下,選擇“編輯”。
-
對於
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
。
-
-
要保存更改,請選擇頁面底部的應用。
筆記
在環境中設置屬性會直接覆蓋wordpress.config
.
刪除訪問限制
示例項目包括配置文件loadbalancer-sg.config
。它使用您在 中配置的 IP 地址創建一個安全組並將其分配給環境的負載均衡器dev.config
。它將端口 80 上的 HTTP 訪問限制為來自您的網絡的連接。否則,在您安裝 WordPress 並配置管理員帳戶之前,外部人員可能會連接到您的網站。
現在您已經安裝了 WordPress,刪除配置文件以向全世界開放該網站。
刪除限制並更新您的環境
-
.ebextensions/loadbalancer-sg.config
從項目目錄中刪除該文件。~/wordpress-beanstalk$
rm .ebextensions/loadbalancer-sg.config -
創建源包。
~/eb-wordpress$
zip ../wordpress-beanstalk-v2.zip -r * .[^.]*
將源包上傳到 Elastic Beanstalk 以將 WordPress 部署到您的環境。
部署源包
-
打開Elastic Beanstalk 控制台,然後在區域列表中選擇您的 AWS 區域。
-
在導航窗格中,選擇環境,然後從列表中選擇您的環境的名稱。
筆記
如果您有許多環境,請使用搜索欄過濾環境列表。
-
在環境概覽頁面,選擇上傳並部署。
-
使用屏幕上的對話框上傳源包。
-
選擇部署。
-
部署完成後,您可以選擇站點 URL 以在新選項卡中打開您的網站。
配置您的 Auto Scaling 組
最後,為您環境的 Auto Scaling 組配置更高的最小實例數。始終運行至少兩個實例,以防止環境中的 Web 服務器出現單點故障。這還允許您在不停止站點服務的情況下部署更改。
配置環境的 Auto Scaling 組以實現高可用性
-
打開Elastic Beanstalk 控制台,然後在區域列表中選擇您的 AWS 區域。
-
在導航窗格中,選擇環境,然後從列表中選擇您的環境的名稱。
筆記
如果您有許多環境,請使用搜索欄過濾環境列表。
-
在導航窗格中,選擇“配置”。
-
在容量配置類別中,選擇編輯。
-
在Auto Scaling 組部分中,將最小實例數設置為
2
。 -
要保存更改,請選擇頁面底部的應用。
為了支持跨多個實例上傳內容,示例項目使用 Amazon EFS 創建共享文件系統。在網站上創建帖子並上傳內容以將其存儲在共享文件系統上。查看帖子並多次刷新頁面以訪問兩個實例並驗證共享文件系統是否正常工作。
升級WordPress
要升級到新版本的 WordPress,請備份您的網站並將其部署到新環境。
重要的
請勿使用 WordPress 中的更新功能或更新源文件以使用新版本。這兩個操作都可能導致您的帖子 URL 返回 404 錯誤,即使它們仍在數據庫和文件系統中也是如此。
升級 WordPress
-
在 WordPress 管理控制台中,使用導出工具將帖子導出到 XML 文件。
-
使用與安裝先前版本相同的步驟將新版本的 WordPress 部署並安裝到 Elastic Beanstalk。為了避免停機,您可以使用新版本創建環境。
-
在新版本中,在管理控制台中安裝 WordPress 導入器工具,並使用它導入包含您的帖子的 XML 文件。如果帖子是由舊版本上的管理員用戶創建的,請將它們分配給新網站上的管理員用戶,而不是嘗試導入管理員用戶。
-
如果您將新版本部署到單獨的環境,請執行CNAME 交換以將用戶從舊站點重定向到新站點。
清理
當您完成 Elastic Beanstalk 的使用後,您可以終止您的環境。Elastic Beanstalk 終止與您的環境關聯的所有 AWS 資源,例如 Amazon EC2 實例、 數據庫實例、 負載均衡器。
終止您的 Elastic Beanstalk 環境
-
打開Elastic Beanstalk 控制台,然後在區域列表中選擇您的 AWS 區域。
-
在導航窗格中,選擇環境,然後從列表中選擇您的環境的名稱。
筆記
如果您有許多環境,請使用搜索欄過濾環境列表。
-
選擇操作,然後選擇終止環境。
-
使用屏幕上的對話框確認環境終止。
借助 Elastic Beanstalk,您可以隨時輕鬆地為您的應用程序創建新環境。
此外,您可以終止在 Elastic Beanstalk 環境外部創建的數據庫資源。當您終止 Amazon RDS 數據庫實例時,您可以拍攝快照並稍後將數據恢復到另一個實例。
終止您的 RDS 數據庫實例
-
打開Amazon RDS 控制台。
-
選擇數據庫。
-
選擇您的數據庫實例。
-
選擇操作,然後選擇刪除。
-
選擇是否創建快照,然後選擇 刪除。
下一步
當您繼續開發應用程序時,您可能需要一種方法來管理環境和部署應用程序,而無需手動創建 .zip 文件並將其上傳到 Elastic Beanstalk 控制台。Elastic Beanstalk 命令行界面( EB CLI) 提供了易於使用的命令,用於從命令行創建、配置應用程序並將其部署到 Elastic Beanstalk 環境。
示例應用程序使用配置文件來配置 PHP 設置並在數據庫中創建一個表(如果該表尚不存在)。您還可以在環境創建過程中使用配置文件配置實例的安全組設置,以避免耗時的配置更新。有關詳細信息,請參閱使用配置文件 (.ebextensions) 進行高級環境自定義。
對於開發和測試,您可能希望使用 Elastic Beanstalk 功能將託管數據庫實例直接添加到您的環境中。有關在您的環境中設置數據庫的說明,請參閱將數據庫添加到您的 Elastic Beanstalk 環境。
如果您需要高性能數據庫,請考慮使用Amazon Aurora。Amazon Aurora 是一種與 MySQL 兼容的數據庫引擎,以低成本提供商業數據庫功能。要將應用程序連接到不同的數據庫,請重複 安全組配置步驟並更新與 RDS 相關的環境屬性並啟用 HTTPS