使用外部 Amazon RDS 資料庫將高可用性PHP應用程式部署至 Elastic Beanstalk - AWS Elastic Beanstalk

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

使用外部 Amazon RDS 資料庫將高可用性PHP應用程式部署至 Elastic Beanstalk

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

教學課程使用範例PHP應用程式,該應用程式使用 MySQL 資料庫來存放使用者提供的文字資料。範例應用程式使用組態檔案來設定PHP設定,並在資料庫中建立資料表供應用程式使用。此外,亦說明如何於部署期間使用 Composer 檔案來安裝套件。

必要條件

開始之前,請從 下載範例應用程式來源套件 GitHub:eb-demo-php-simple-app-1.3.zip

本教學課程中的 Amazon Relational Database Service (Amazon RDS) 任務程序假設您正在預設的 Amazon Virtual Private Cloud (Amazon ) 中啟動資源VPC。所有新帳戶VPC在每個區域中都包含預設值。如果您沒有預設 VPC,程序會有所不同。如需 EC2-Classic 和自訂VPC平台的說明使用 Elastic Beanstalk 與 Amazon RDS,請參閱 。

在 Amazon 中啟動資料庫執行個體 RDS

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

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

在預設中啟動RDS資料庫執行個體 VPC
  1. 開啟RDS主控台

  2. 在導覽窗格中,選擇 Databases (資料庫)。

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

  4. 選擇 Standard Create (標準建立)

    重要

    請勿選擇 Easy Create (輕鬆建立)。如果您選擇這麼做,則無法設定啟動此RDS資料庫所需的設定。

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

  6. 檢閱預設設定,並根據您的特定要求來調整這些設定。請注意以下選項:

    • 資料庫執行個體類別 – 選擇具有適合您工作負載之記憶體和CPU功率的執行個體大小。

    • 異地同步備份部署 – 若要達到高可用性,請將此項設定為在不同的 AZ 中建立 Aurora 複本/讀取器節點

    • 主要使用者名稱主要密碼 – 資料庫使用者名稱和密碼。記下這些設定,以供稍後使用。

  7. 檢查其餘選項的預設設定,然後選擇 Create database (建立資料庫)

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

修改連接至RDS執行個體之安全群組上的傳入規則
  1. 開啟 Amazon RDS主控台

  2. 選擇 Databases (資料庫)。

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

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

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

  6. 在安全群組的詳細資訊中,選擇 Inbound (傳入)

  7. 選擇編輯

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

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

  10. 對於 Source (來源),輸入 sg- 檢視可用的安全群組清單。選擇與 Elastic Beanstalk 環境中使用之 Auto Scaling 群組相關聯的安全群組。這是為了讓環境中的 Amazon EC2執行個體可以存取資料庫。

    螢幕映像,以在 Amazon EC2主控台中編輯安全群組的傳入規則。
  11. 選擇 Save (儲存)。

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

建立 Elastic Beanstalk 環境

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

啟動環境 (主控台)
  1. 使用此預先設定的連結開啟 Elastic Beanstalk 主控台: console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced

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

  3. 針對 Application code (應用程式程式碼),選擇 Sample application (範例應用程式)

  4. 選擇 Review and launch (檢閱和啟動)

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

使用大約需要五分鐘時間建立環境,並且建立下列資源:

  • EC2 執行個體 – Amazon Elastic Compute Cloud (AmazonEC2) 虛擬機器,設定為在您選擇的平台上執行 Web 應用程式。

    每個平台會執行特定的一套軟體、設定檔和指令碼,來支援特定的語言版本、架構、Web 容器或其組合。大多數平台會使用 Apache 或 NGINX 作為反向代理,該代理位於 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 群組會擴展或縮減以進行回應。

  • AWS CloudFormation 堆疊 – Elastic Beanstalk 使用 AWS CloudFormation 啟動環境中的資源並傳播組態變更。資源定義於範本中,您可在 AWS CloudFormation 主控台中檢視此範本。

  • 網域名稱 – 以 形式路由至 Web 應用程式的網域名稱 subdomain.region.elasticbeanstalk.com

    網域安全

    為了增強 Elastic Beanstalk 應用程式的安全性,在公有字尾清單中註冊 elasticbeanstalk.com 網域 ()。 PSL

    如果您需要在 Elastic Beanstalk 應用程式的預設網域名稱中設定敏感 Cookie,我們建議您使用具有__Host-字首的 Cookie 來提高安全性。此做法會保護您的網域,防止跨網站請求偽造嘗試 (CSRF)。如需更多資訊,請參閱 Mozilla 開發人員網路中的設定 Cookie 頁面。

這些資源全都由 Elastic Beanstalk 管理。當您終止環境時,Elastic Beanstalk 會終止其中的所有資源。您啟動的RDS資料庫執行個體不在您的環境中,因此您有責任管理其生命週期。

注意

Elastic Beanstalk 建立的 Amazon S3 儲存貯體會在環境間共享,且不會在環境終止時刪除。如需詳細資訊,請參閱將 Elastic Beanstalk 與 Amazon S3 搭配使用

設定安全群組、環境屬性和擴展

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

欲將安全群組新增至您的環境
  • 執行以下任意一項:

    • 使用 Elastic Beanstalk 主控台新增安全群組

      1. 開啟 Elastic Beanstalk 主控台 ,然後在區域清單中選取您的 AWS 區域。

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

        注意

        如果您有許多環境,請使用搜尋列來篩選環境清單。

      3. 在導覽窗格中,選擇 Configuration (組態)

      4. Instances (執行個體) 組態類別中,選擇 Edit (編輯)

      5. EC2安全群組 下,除了 Elastic Beanstalk 建立的執行個體安全群組之外,選擇要連接至執行個體的安全群組。

      6. 若要儲存變更,請選擇頁面底部的儲存變更

      7. 閱讀警告的內容,然後選擇 Confirm (確認)

    • 若要使用組態檔案新增安全群組,請使用 securitygroup-addexisting.config 範例檔案。

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

設定 Amazon RDS 資料庫執行個體的環境屬性
  1. 開啟 Elastic Beanstalk 主控台 ,然後在區域清單中選取您的 AWS 區域。

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

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇組態

  4. 更新、監控和日誌記錄組態類別中,選擇編輯

  5. Environment Properties (環境屬性) 區段,定義應用程式建立連線字串所讀取的變數。若要與具有整合式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屬性組態區段
  6. 若要儲存變更,請選擇頁面底部的儲存變更

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

若要設定您環境的 Auto Scaling 群組,以維持高可用性
  1. 開啟 Elastic Beanstalk 主控台 ,然後在區域清單中選取您的 AWS 區域。

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

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇 Configuration (組態)。

  4. Capacity (容量) 組態類別中,選擇 Edit (編輯)

  5. Auto Scaling 群組區段,將最小執行個體設定為 2

  6. 若要儲存變更,請選擇頁面底部的儲存變更

部署範例應用程式

現在,您的環境已準備好執行範例應用程式並連線至 Amazon RDS。將範例應用程式部署至您的環境。

注意

如果您尚未下載來源套件 GitHub,請從 下載:eb-demo-php-simple-app-1.3.zip

若要部署原始碼套件
  1. 開啟 Elastic Beanstalk 主控台 ,然後在區域清單中選取您的 AWS 區域。

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

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

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

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

  5. 選擇 Deploy (部署)。

  6. 部署完成時,您可以選擇網站URL,在新索引標籤中開啟您的網站。

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

User interface for sharing thoughts, with a posted comment about Elastic Beanstalk on AWS.

清除

當您完成使用 Elastic Beanstalk 時,即可終止您的環境。Elastic Beanstalk 會終止與環境相關聯的所有 AWS 資源,例如 Amazon EC2執行個體資料庫執行個體 負載平衡器 、安全群組和警示

從主控台終止您的 Elastic Beanstalk 環境
  1. 開啟 Elastic Beanstalk 主控台 ,然後在區域清單中選取您的 AWS 區域。

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

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 選擇 Actions (動作),然後選擇 Terminate Environment (終止環境)。

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

您可以使用 Elastic Beanstalk,隨時輕鬆地為您的應用程式建立新環境。

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

終止RDS資料庫執行個體
  1. 開啟 Amazon RDS主控台

  2. 選擇 Databases (資料庫)。

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

  4. 選擇動作,然後選擇刪除

  5. 選擇是否建立快照,然後選擇 Delete (刪除)

後續步驟

隨著您繼續開發應用程式,您可能會希望無須手動建立 .zip 檔案並將其上傳至 Elastic Beanstalk 主控台,即可管理環境和部署應用程式。Elastic Beanstalk 命令列介面 (EB CLI) 提供 easy-to-use從命令列建立、設定和部署應用程式至 Elastic Beanstalk 環境的命令。

範例應用程式使用組態檔案來設定PHP設定,並在資料庫中建立資料表,如果它不存在。您亦可於環境建立期間,使用組態檔案進行執行個體的安全群組設定,以避免耗時的組態更新。如需更多資訊,請參閱使用組態檔案 (.ebextensions) 來進行進階的環境自訂

進行開發和測試時,建議您使用 Elastic Beanstalk 的功能,將受管的資料庫執行個體直接加入您的環境。如需於環境中設定資料庫的說明,請參閱將資料庫新增至您的 Elastic Beanstalk 環境

若您需要高效能資料庫,請考慮使用 Amazon Aurora。Amazon Aurora 是 My SQL相容的資料庫引擎,以低成本提供商業資料庫功能。若要將應用程式連線至不同的資料庫,請重複安全群組組態步驟,並更新 RDS相關環境屬性

最後,如果您計劃在生產環境中使用應用程式,則需要為環境設定自訂網域名稱,啟用 HTTPS 以進行安全連線。