AWS Elastic Beanstalk 常見問題集

一般問題

AWS Elastic Beanstalk 讓開發人員能夠更加輕鬆地在 AWS 雲端中快速部署和管理應用程式。開發人員只需上傳應用程式,Elastic Beanstalk 將自動處理容量佈建、負載平衡、自動調整規模和應用程式運作狀態監控的部署細節。

希望在 AWS 雲端中快速部署和管理應用程式的使用者。無須熟悉雲端運算即可使用該服務。AWS Elastic Beanstalk 可支援 Java、.NET、PHP、Node.js、Python、Ruby、Go 和 Docker Web 應用程式。

AWS Elastic Beanstalk 支援以下語言和開發堆疊:

適用於 Java 應用程式的 Apache Tomcat

適用於 PHP 應用程式的 Apache HTTP 伺服器

適用於 Python 應用程式的 Apache HTTP 伺服器

Node.js 應用程式的 Nginx 或 Apache HTTP 伺服器

適用於 Ruby 應用程式的 Passenger 或 Puma

適用於 .NET 應用程式的 Microsoft IIS 7.5、8.0 和 8.5

Java SE

Docker

Go

請參閱支援的平台以取得支援語言和開發堆疊的最新完整清單。

是。AWS Elastic Beanstalk 經過精心設計,以便將來可以擴展支援多種開發堆疊和程式設計語言。AWS 正在與解決方案供應商合作建立其他 Elastic Beanstalk 服務所需的 API 和功能。

AWS Elastic Beanstalk 可自動執行容量佈建、負載平衡、自動擴展和應用程式部署的細節,建立一個執行您應用程式版本的環境。您只需上傳可部署的程式碼 (如 WAR 檔),剩餘工作則可由 AWS Elastic Beanstalk 執行。藉助 AWS Toolkit for Visual Studio 和 AWS Toolkit for Eclipse,即可將應用程式部署到 AWS Elastic Beanstalk 並進行管理,而不必離開 IDE。一旦應用程式執行,Elastic Beanstalk 就會自動執行監控、應用程式版本部署、基本運作狀態檢查等管理任務,並協助日誌檔存取。使用 Elastic Beanstalk,開發人員可著重在開發應用程式,無須再處理佈建伺服器、設定負載平衡或管理擴展等方面的部署任務。

大多數現有的應用程式容器或平台即服務解決方案在減少所需的程式設計量的同時,會大大降低開發人員的靈活性和控制。開發人員被迫迎合廠商預先做出的所有決定,很少有機會能夠拿回對其應用程式基礎設施各個部分的控制權。而使用 AWS Elastic Beanstalk,開發人員可保留對支援其應用程式的 AWS 資源的完整控制。如果開發人員決定要管理基礎設施的部分 (或所有) 元素,可以使用 Elastic Beanstalk 的管理功能無縫執行此操作。

使用 AWS Elastic Beanstalk,您可以:

選取與您的應用程式要求相符的作業系統 (例如,Amazon Linux 或 Windows Server 2016)

從數個 Amazon EC2 執行個體中選擇,包括隨需執行個體、預留執行個體和 Spot 執行個體 

從一些可用的資料庫和儲存選項中選擇

能夠登入存取 Amazon EC2 執行個體,以即時並直接的排除故障

透過在多個可用區域執行,快速提高應用程式可靠性

透過在負載平衡器上啟用 HTTPS 通訊協定,增強應用程式安全性

存取內建 Amazon CloudWatch,監控和取得應用程式運作狀態及其他重要事件的通知

調整應用程式伺服器設定 (如 JVM 設定) 和傳送環境變數

在 Amazon EC2 中並列執行其他應用程式元件,例如記憶體快取服務

不登入應用程式伺服器即可存取日誌檔

AWS Elastic Beanstalk 使用經過驗證的 AWS 功能和服務,例如 Amazon EC2、Amazon RDS、Elastic Load Balancing、Auto Scaling、Amazon S3 和 Amazon SNS 來建立執行應用程式的環境。目前版本的 AWS Elastic Beanstalk 採用 Amazon Linux AMI 或 Windows Server 2019。

AWS Elastic Beanstalk 可支援 Java、.NET、PHP、Node.js、Python、Ruby、Go 和 Docker,很適合用於 Web 應用程式。不過,由於 Elastic Beanstalk 為開放式架構,也可使用 Elastic Beanstalk 來部署非 Web 應用程式。預計將來還會支援其他應用程式類型和程式設計語言。請參閱支援的平台以進一步了解相關資訊。

AWS Elastic Beanstalk 可在 Amazon Linux AMI 和 Windows Server AMI 上執行。兩種 AMI 均受 Amazon Web Services 的支援和保護,旨在為 Amazon EC2 雲端運算提供穩定、安全和高效能的執行環境。

開始使用

要註冊 AWS Elastic Beanstalk,請選取 Elastic Beanstalk 詳細資訊頁面上的立即註冊按鈕。您必須擁有 Amazon Web Services 帳戶才能存取此服務;如果您還沒有帳戶,系統將在您開始 Elastic Beanstalk 程序時提示您建立帳戶。註冊後,請參閱 AWS Elastic Beanstalk 入門指南。

AWS Elastic Beanstalk 註冊要求您在 AWS 上登記有效電話號碼和電子郵件地址,以便我們需要聯繫您時使用。驗證您的電話號碼只需要幾分鐘時間。註冊過程中您會接到一通自動電話,然後需要您使用電話鍵盤輸入 PIN 碼。

了解如何開始使用 AWS Elastic Beanstalk 的最佳方式就是仔細閱讀技術文件中的 AWS Elastic Beanstalk Getting Started Guide 部分。只需幾分鐘時間,您即可部署和使用範例應用程式或上傳自己的應用程式。

是。AWS Elastic Beanstalk 包括範例應用程式,可用來試用產品及探索功能。

資料庫和儲存

是。AWS Elastic Beanstalk 會在 Amazon S3 中存放您的應用程式檔案及伺服器日誌檔 (可選)。如果使用 AWS 管理主控台、AWS Toolkit for Visual Studio 或 AWS Toolkit for Eclipse,系統會在您的帳戶為您建立一個 Amazon S3 儲存貯體,而且會將您上傳的檔案自動從本機用戶端複製到 Amazon S3。您還可以選擇將 Elastic Beanstalk 設定為每小時複製伺服器日誌檔到 Amazon S3。透過編輯環境資訊設定,可完成上述操作。

是。您可以使用 Amazon S3 來儲存應用程式。最簡單的方法是將 AWS 開發套件作為應用程式可部署檔案的一部分包括在內。例如,您可以將適用於 Java 的 AWS 開發套件包括在應用程式 WAR 檔中。

AWS Elastic Beanstalk 不會限制您使用任何特定的資料永續性技術。您可以選擇使用 Amazon Relational Database Service (Amazon RDS) 或 Amazon DynamoDB,或使用 Microsoft SQL Server、Oracle 或其他在 Amazon EC2 上執行的關聯式資料庫。

Elastic Beanstalk 可以自動佈建 Amazon RDS 資料庫執行個體。您的應用程式可透過環境變數了解資料庫執行個體的連線資訊。要進一步了解如何為您的環境設定 RDS 資料庫執行個體,請參閱 Elastic Beanstalk Developer Guide。

使用 AWS Elastic Beanstalk,您無須修改。使用 Elastic Beanstalk,您可以在環境資訊中指定連線資訊。透過應用程式的程式碼擷取連線字串,可以輕鬆地設定不同的 Elastic Beanstalk 環境來使用不同的資料庫。

安全性

在預設情況下,您的應用程式會在 myapp.elasticbeanstalk.com 中公開,可供任何使用者存取。您可以使用 Amazon VPC,在您定義的虛擬網路中佈建一個私有、隔離的應用程式部分。透過特定的安全群組規則、網路 ACL 和自訂路由表可將此虛擬網路設定為私有。您也可以變更 EC2 安全群組設定,輕鬆地控制是否向應用程式伺服器傳送其他傳入流量 (如 SSH)。

是的,您可以在 VPC 內執行您的應用程式。有關更多詳細資訊,請參閱 AWS Elastic Beanstalk Developer Guide。

如需有關 AWS 安全性的詳細資訊,請參閱我們的 Amazon Web Services: Overview of Security Processes 文件和瀏覽我們的安全中心。

是。如果 IAM 使用者有適當的許可,現在可以與 AWS Elastic Beanstalk 進行互動。

IAM 允許您集中管理使用者和群組。您可以控制哪些 IAM 使用者能夠存取 AWS Elastic Beanstalk,對於不能對 Elastic Beanstalk 資源執行動作的操作員,可將許可限制為唯讀存取。您帳戶內的所有使用者活動將彙總為一個 AWS 帳單。

您可以使用 IAM 主控台、IAM 命令列界面 (CLI) 或 IAM API 來佈建 IAM 使用者。在預設情況下,IAM 使用者在獲得許可之前不能存取 AWS 服務。

您可以使用政策授與 IAM 使用者對服務的存取權限。要簡化授與 AWS Elastic Beanstalk 存取權限的程序,您可以在 IAM 主控台中使用其中一個政策範本來協助您開始使用。Elastic Beanstalk 提供兩種範本:唯讀存取權限範本和完整存取權限範本。唯讀範本授與對 Elastic Beanstalk 資源的讀取權限。完整存取權限範本可授與所有 Elastic Beanstalk 操作的完整存取權限,也可授與用來管理 Elastic Load Balancing、Auto Scaling 和 Amazon S3 等相依資源的許可。您也可以使用 AWS 政策產生器來建立自訂政策。有關更多詳細資訊,請參閱 AWS Elastic Beanstalk Developer Guide。

是。您可以允許或拒絕對應用程式、應用程式版本和環境等特定 AWS Elastic Beanstalk 資源的許可。

IAM 使用者在根帳戶下建立的所有資源屬根帳戶所有,費用列入根帳戶。

根帳戶對任何 IAM 使用者在該帳戶下啟動的所有 AWS Elastic Beanstalk 環境具有完整的存取權限。如果您使用 Elastic Beanstalk 範本授與 IAM 使用者唯讀權限,則該使用者將可查看所有應用程式、應用程式版本、環境及該帳戶中任何關聯的資源。如果使用 Elastic Beanstalk 範本對 IAM 使用者授與完整存取權限,則該使用者將能夠建立、修改和終止該帳戶下的任何 Elastic Beanstalk 資源。

是。IAM 使用者可以使用其使用者名和密碼存取 AWS Elastic Beanstalk 主控台。

是。IAM 使用者可以使用其存取金鑰和私密金鑰執行使用 Elastic Beanstalk API 的操作。

是。IAM 使用者可以使用其存取金鑰和私密金鑰,執行使用 AWS Elastic Beanstalk 命令列界面 (CLI) 的操作。

受管平台更新

您可以選擇讓 AWS Elastic Beanstalk 環境在指定的維護時段中,將執行應用程式的基礎平台自動更新到最新版本。Elastic Beanstalk 會定期釋出支援平台的新版本 (Java、PHP、Ruby、Node.js、Python、.NET、Go 和 Docker) 以及作業系統、Web 與應用程式伺服器和語言與架構的更新。

為了讓 Elastic Beanstalk 自動管理平台更新,您必須在 Elastic Beanstalk 主控台的設定標籤或是使用 EB CLI 或 API 來啟用受管平台更新。啟用此功能後,即可設定允許更新的類型及進行更新的時間。

AWS Elastic Beanstalk 可以為新的修補程式和次要平台版本自動執行平台更新。Elastic Beanstalk 不會自動執行主要平台版本更新 (如 Java 7 Tomcat 7 到 Java 8 Tomcat 8),因為這些版本包含回溯不相容的變更,而且還需要進行其他測試。如果是這些情況,您必須手動啟動更新。

AWS Elastic Beanstalk 平台使用這個模式 MAJOR.MINOR.PATCH (如 2.0.0) 進行版本控制。每個部分的增量方式如下:

有不相容的變更時為 MAJOR 版本。

為了回溯相容性而新增其他功能時為「次要」版本。

有回溯相容性錯誤修正時,則為「修補程式」版本。

您可以使用 AWS Elastic Beanstalk 管理主控台、API 或 CLI 來隨時執行主要版本更新。您有下列選項可執行主要版本更新:

在現有環境中就地套用更新。請參閱 Updating Your Elastic Beanstalk Environment's Platform Version。

使用新平台版本建立現有環境的複製。請參閱 Clone an Environment 進一步了解相關資訊。

更新的套用方式是使用不可變的部署機制,以確保不會對現有環境進行變更,直到 Amazon EC2 執行個體平行叢集 (已安裝好更新) 準備好與現有的執行個體交換時,才會終止現有執行個體。此外,如果 Elastic Beanstalk 運作狀態系統在更新期間偵測到任何問題,流量會被重新導向到現有的執行個體叢集,以盡量減少對應用程式的最終使用者造成影響。

因為受管平台更新使用不可變的部署機制來執行更新,所以應用程式在維護時段仍能使用,而且您的應用程式消費者不會受到更新的影響。

使用受管平台更新功能無須額外付費。您只需要支付更新期間執行更新所需的額外 EC2 執行個體的費用。

維護時段是每週兩小時的時間空檔,如果啟用受管平台更新且有可用的新版平台時,AWS Elastic Beanstalk 就會在這個時段啟動平台更新。例如,如果您選擇的維護時段是在每週日的上午 2 點開始,AWS Elastic Beanstalk 會在每週日的上午 2 點到 4 點之間啟動平台更新。請特別注意,依您的應用程式組態而定,更新可能會在維護時段以外的時間完成。

維護時段的設定是以每個環境為基礎,讓您可為各種應用程式元件或應用程式選擇設定不同的維護時段。如果您不希望同時更新應用程式的多個部分,即可交錯安排環境更新的時間。如果啟用受管平台更新但未指定維護時段,則會為您的環境指派預設的每週 2 小時的時段。如果您希望變更代表您執行維護的時間,可在 AWS 管理主控台或使用 UpdateEnvironment API 修改受管更新組態。

您可以透過 AWS 管理主控台、論壇公告和版本備註來收到可用新平台版本的通知。

平台版本間變更的詳細資訊可在 AWS Elastic Beanstalk 版本備註頁面上找到。

受管平台更新期間唯一可用的動作是「中止」。這個動作讓您立即停止更新並轉返到之前的版本。

您的環境將一律根據您選擇的等級 (次要版本加修補程式或僅修補程式) 更新到最新的可用版本。

每個受管平台更新的詳細資訊都在事件頁面上,而且標記為 "MAINTENANCE" 事件類型。

特定年度的版本版次數量取決於語言/架構廠商或核心團隊發佈的版本版次和修補程式的頻率和內容,以及由我們平台工程團隊負責版次和修補程式全面審查的最終結果。

AWS Graviton 支援

若要在 Elastic Beanstalk 主控台上使用 arm64 處理器部署應用程式,您可以從設定更多選項設定的容量標籤中選擇處理器架構和執行個體類型。

若要使用 Elastic Beanstalk CLI、AWS CLI、CFN 或 AWS CDK 部署您的應用程式,請參閱 Elastic Beanstalk 開發人員指南

如果您的工作負載使用解釋型程式設計語言 (例如 Node.js、Python、Tomcat、PHP 或 Ruby),則無需重新編譯您的工作負載即可使用 Graviton。如果您為工作負載使用 Go 或 .Net Core,則需要針對 arm64 執行個體類型更新建置命令。您還需要重新編譯二進制相依項或使用 arm64 相容版本的二進制相依項。如果您使用 Docker,您的 Docker 映像必須是多架構的,並且支援部署到 x86 和 arm64。

Elastic Beanstalk 在 64 位 Amazon Linux 2 上支援 Graviton,適用於各種平台和分支。如需完整清單,請參閱文件

您可以輕鬆地將工作負載轉移到 Graviton,並在以下使用案例中利用效能和成本優勢:主要基於開源技術建立的基於 Linux 的工作負載;容器化和基於微型服務的應用程式,例如 Docker 和 MC Docker;使用 Java、Python、.NET Core、node.js 和 PHP 等可移植程式設計語言編寫的應用程式;已編譯的 C/C++、Rust 或 Go 應用程式;在 Linux 上執行的 .NET Core (v3.1 +) 工作負載;多執行緒工作負載;非統一記憶體存取 (NUMA) 敏感工作負載;以及 arm64 原生軟體開發和測試。

計費

AWS Elastic Beanstalk 不收取其他費用 – 您只需支付實際使用 AWS 資源存放和執行應用程式的費用。

您只需按實際用量付費,使用任何 AWS 資源都沒有最低費用。有關 Amazon EC2 定價資訊,請瀏覽 EC2 詳細資訊頁面上的定價部分。有關 Amazon S3 定價資訊,請瀏覽 S3 詳細資訊頁面上的定價部分。您可以使用 AWS 簡易計算器來估算不同應用程式大小的帳單。

只需登入您的 Amazon Web Services 帳戶,然後選擇您的 Web 服務帳戶下的帳戶活動,即可隨時在 Amazon Web Services 網站上查看目前帳單期間的費用。

支援

是。對於 AWS Elastic Beanstalk 使用相關問題,AWS Support 都提供支援。有關其他詳細資訊和定價,請參閱 AWS Support 頁面。

透過 AWS Elastic Beanstalk 開發論壇,您可以了解廣泛的現有 AWS 社群知識,有助於進行開發。