

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

# 了解 Elastic Beanstalk 中的概念
<a name="concepts"></a>

熟悉這些概念和術語可協助您了解使用 Elastic Beanstalk 部署應用程式所需的知識。

![\[顯示 Elastic Beanstalk 應用程式與 Web/Worker 環境之間關係的說明圖表。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-overview.png)


## 應用程式
<a name="concepts-application"></a>

Elastic Beanstalk *應用程式*是 Elastic Beanstalk 元件的容器，包括*環境*、*版本*和*環境組態*。在 Elastic Beanstalk 應用程式中，您可以管理與執行程式碼相關的所有資源。

## 應用程式版本
<a name="concepts-version"></a>

在 Elastic Beanstalk 中，「應用程式版本」**為 Web 應用程式可部署程式碼的特定、具標記的反覆項目。應用程式版本會指向 Amazon Simple Storage Service (Amazon S3) 物件，其中包含諸如 Java WAR 檔案的可部署程式碼。

應用程式版本是應用程式的一部分，一個應用程式可以具備多個版本，而各個版本都是唯一的。在執行環境中，您可以部署任何您已經上傳至應用程式的應用程式版本，或上傳新的應用程式版本並立即部署。例如，您可以上傳多個應用程式版本來測試它們之間的差異。

## Environment
<a name="concepts-environment"></a>

*環境*是執行應用程式版本 AWS 的資源集合。每個環境一次只會執行一個應用程式版本，然而，您可以同時在許多環境中執行相同應用程式版本或不同應用程式版本。當您建立環境時，Elastic Beanstalk 會在您的帳戶中佈建所需的資源， AWS 以執行您指定的應用程式版本。

## 環境層
<a name="concepts-tier"></a>

當您啟動 Elastic Beanstalk 環境時，必須先選擇環境層。環境層會指定環境執行的應用程式類型，並決定 Elastic Beanstalk 佈建哪些資源來支援它。處理 HTTP 請求的應用程式會執行於 [Web 伺服器環境層](concepts-webserver.md)。自 Amazon Simple Queue Service (Amazon SQS) 佇列提取任務的後端環境，則執行於[工作者環境層](concepts-worker.md)。

## 環境組態
<a name="concepts-environmentconfig"></a>

 *環境資訊*會針對定義環境及其相關聯資源行為的參數和設定，辨識其集合。當您更新環境資訊設定時，Elastic Beanstalk 會自動將變更套用至現有資源，或加以刪除並部署新的資源 (依變更類型而異)。

## 已儲存的組態
<a name="concepts-configuration"></a>

*已儲存的組態*為一個範本，可做為建立獨特環境資訊的起點。您可以使用 Elastic Beanstalk 主控台 AWS CLI、EB CLI 或 API，建立和修改已儲存的組態，並將其套用至環境。API 和 將儲存的組態 AWS CLI 稱為*組態範本*。

## 平台
<a name="concepts-platform"></a>

「平台」**是作業系統、程式語言執行時間、Web 伺服器、應用程式伺服器及 Elastic Beanstalk 元件的組合。您可以設計 Web 應用程式並將其定位到平台上。Elastic Beanstalk 提供各種平台讓您建置應用程式。

如需詳細資訊，請參閱[Elastic Beanstalk 平台](concepts-all-platforms.md)。

# Elastic Beanstalk Web 伺服器環境
<a name="concepts-webserver"></a>

下圖顯示 Web 伺服器環境層的範例 Elastic Beanstalk 架構，並解釋這類環境層內的元件如何共同運作。

![\[AWS Elastic Beanstalk Web 伺服器層架構圖。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-architecture2.png)


環境是應用程式的核心。在圖表中，環境會顯示在最上方的實線內。當您建立環境時，Elastic Beanstalk 會佈建執行應用程式所需的資源。為環境建立 AWS 的資源包括一個彈性負載平衡器 （圖表中的 ELB)、Auto Scaling 群組，以及一或多個 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。

每個環境都具備指向負載平衡器的 CNAME (URL)。本環境即具備 URL (如 `myapp.us-west-2.elasticbeanstalk.com`)。此 URL 會使用 CNAME 記錄，在 [Amazon Route 53](https://aws.amazon.com/route53/) 中獲得一個 Elastic Load Balancing URL 別名 (像是 `abcdef-123456.us-west-2.elb.amazonaws.com`)。[Amazon Route 53](https://aws.amazon.com/route53/) 是一種可用性高、可擴展性強的網域名稱系統 (DNS) Web 服務。其能夠安全可靠的路由至您的基礎設施。您向 DNS 供應商註冊的網域名稱，會將請求轉送至 CNAME。

負載平衡器位於 Amazon EC2 執行個體前方，屬於 Auto Scaling 群組的一部分。Amazon EC2 Auto Scaling 會自動啟動額外的 Amazon EC2 執行個體，以容納您的應用程式增加的負載。若您的應用程式負載減少，Amazon EC2 Auto Scaling 會停止執行個體，但永遠會保留至少一個執行個體繼續執行。

執行於 Amazon EC2 執行個體的軟體堆疊，依*容器類型*而異。容器類型會定義用於該環境的基礎設施拓撲和軟體堆疊。例如，搭配 Apache Tomcat 容器的 Elastic Beanstalk 環境，會使用 Amazon Linux 作業系統、Apache Web 伺服器和 Apache Tomcat 軟體。如需支援的容器類型清單，請參閱 [支援 Elastic Beanstalk 的平台](concepts.platforms.md)。執行您應用程式的各個 Amazon EC2 執行個體，都會使用這些容器類型之一。此外，名為「主機管理員 (HM)」**的軟體元件，會執行於各個 Amazon EC2 執行個體。主機管理員負責下列事項：
+ 部署應用程式
+ 彙整事件和指標供主控台、API 或命令列進行擷取
+ 產生執行個體層級事件
+ 監控應用程式日誌檔案是否出現重要錯誤
+ 監控應用程式伺服器
+ 修補執行個體元件
+ 輪動應用程式的日誌檔案，並將其發佈至 Amazon S3

主機管理員會報告指標、錯誤和事件，以及伺服器執行個體狀態，這些可透過 Elastic Beanstalk 主控台、API 和 CLI 取得。

圖中的 Amazon EC2 執行個體均屬於同一「安全群組」**。安全群組會定義您的執行個體的防火牆規則。Elastic Beanstalk 預設會定義安全群組，讓所有人都可使用連接埠 80 (HTTP) 進行連線。您可定義多個安全群組。例如，您可為您的資料庫伺服器定義一個安全群組。如需有關 Amazon EC2 安全群組及其設定方式供 Elastic Beanstalk 應用程式使用的詳細資訊，請參閱[EC2 安全群組](using-features.managing.ec2.console.md#using-features.managing.ec2.securitygroups)。

# Elastic Beanstalk 工作者環境
<a name="concepts-worker"></a>

AWS 為工作者環境層建立的資源包括 Auto Scaling 群組、一或多個 Amazon EC2 執行個體和 IAM 角色。對於工作者環境層，Elastic Beanstalk 也會建立和佈建 Amazon SQS 佇列 (如果您還沒有)。啟動工作者環境層時，Elastic Beanstalk 會依據你所選的程式設計語言安裝必要支援檔案，並在 Auto Scaling 群組的各個 EC2 執行個體安裝協助程式。協助程式會從 Amazon SQS 佇列讀取訊息。協助程式會把從每個訊息讀取的資料，傳送至工作者環境中執行的 Web 應用程式，以進行處理。若您的工作者環境擁有多個執行個體，各個執行個體各自都有協助程式，但一律自相同的 Amazon SQS 佇列讀取資料。

下圖顯示不同的元件及其在環境 AWS 和服務之間的互動。

![\[AWS Elastic Beanstalk 工作者層架構圖。\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-architecture_worker.png)


Amazon CloudWatch 會用於警示及運作狀態監控。如需詳細資訊，請前往 [基礎型運作狀態報告](using-features.healthstatus.md)。

如需工作者環境層的運作詳細資訊，請參閱 [Elastic Beanstalk 工作者環境](using-features-managing-env-tiers.md)。

# Elastic Beanstalk 應用程式的設計考量事項
<a name="concepts.concepts.design"></a>

由於使用 AWS Elastic Beanstalk 在 AWS 雲端 資源上執行部署的應用程式，因此您應該謹記數個組態因素，以最佳化您的應用程式：*可擴展性*、*安全性*、*持久性儲存*、*容錯*能力、*內容交付*、*軟體更新和修補*，以及*連線*能力。本主題分別介紹其中的每一項因素。如需涵蓋架構、安全與經濟等主題的完整技術 AWS 白皮書清單，請參閱[AWS 雲端運算白皮書](https://aws.amazon.com/whitepapers/)。

## 可擴展性
<a name="concepts.concepts.design.scalability"></a>

在物理硬體環境中運作時，與雲端環境相比，您可以透過兩種方法實現可擴展性。您可以透過縱向擴展達成垂直擴展，也可以透過橫向擴展達成水平擴展。垂直擴展方法需要您投資強大的硬體，以支援不斷增長的業務需求。水平擴展方法需要您遵循分散投資模式。因此，您的硬體與應用程式的採購可以更切合目標、資料集能夠整合，而且設計能夠成為服務導向。垂直擴展方法的成本可能極為昂貴，而且也有可能產生需求增長超過容量的風險。在這方面，水平擴展方法通常更有效。不過，使用水平擴展方法時，您必須能夠定期預測需求，並以區塊形式部署基礎設施，以滿足需求。因此，這種方法通常會產生未使用的容量，而且可能需要小心仔細地監控。

只要遷移至雲端，您就可以充分利用雲端的彈性，讓基礎設施與需求順利保持一致。彈性有助於簡化資源的取得和釋出。這樣一來，您的基礎設施可以隨需求的變動快速縮減和擴展。使用時，請將您的 Auto Scaling 設定調整為根據您環境中資源的指標進行擴展或縮減。例如，您可以設定伺服器使用率或網路 I/O 等指標。Auto Scaling 可根據使用量增減，自動新增或移除運算容量。您可以將系統指標 (例如 CPU、記憶體、磁碟 I/O 和網路 I/O) 發佈到 Amazon CloudWatch，然後使用 CloudWatch 設定警示以觸發 Auto Scaling 動作，或根據這些指標傳送通知。如需關於如何設定 Auto Scaling 的指示，請參閱[Auto Scaling 您的 Elastic Beanstalk 環境執行個體](using-features.managing.as.md)。

此外，我們建議您使用鬆耦合的容錯性元件 (可視需要水平擴展)，盡可能將所有 Elastic Beanstalk 應用程式設計為*無狀態*。如需為 設計可擴展應用程式架構的詳細資訊 AWS，請參閱 [https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)。

## 安全
<a name="concepts.concepts.design.security"></a>

上的安全 AWS 是[共同的責任](https://aws.amazon.com/compliance/shared-responsibility-model/)。Amazon Web Services 會保護您環境中的實體資源，並確保雲端是一個執行應用程式的安全之處。您需負責進出 Elastic Beanstalk 環境的資料的安全性，和應用程式的安全性。

請設定 SSL 以保護您的應用程式和用戶端之間的資訊。若要設定 SSL，您需要 AWS Certificate Manager (ACM) 提供的免費憑證。如果您已擁有外部憑證授權單位 (CA) 的憑證，您可以使用 ACM 匯入該憑證，否則，您可以使用 將其匯入 AWS CLI。

如果您的 [無法使用 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/acm.html) ACM，您可以從外部 CA 購買憑證，例如 VeriSign 或 Entrust。然後，使用 AWS Command Line Interface (AWS CLI) 將第三方或自我簽署憑證和私有金鑰上傳至 AWS Identity and Access Management (IAM)。該憑證的公有金鑰會對瀏覽器驗證您的伺服器。它也可用於建立共用工作階段金鑰的基礎，其可為兩方加密資料。關於如何建立、上傳和指派 SSL 憑證至您的環境，相關指示請參閱[為您的 Elastic Beanstalk 環境設定 HTTPS](configuring-https.md)。

當您為環境設定 SSL 憑證時，在用戶端與您環境的 Elastic Load Balancing 負載平衡器之間傳送的資料會加密。根據預設，加密動作會終止於負載平衡器，而負載平衡器與 Amazon EC2 執行個體之間的傳輸資料是未加密的。

## 持久性儲存
<a name="concepts.concepts.design.storage"></a>

Amazon EC2 執行個體上所執行的 Elastic Beanstalk 應用程式，不具備持久性本機儲存功能。當 Amazon EC2 執行個體終止時，不會儲存本機檔案系統。新的 Amazon EC2 執行個體會以預設檔案系統啟動。我們建議您將應用程式設定為將資料儲存於持久的資料來源中。 AWS 提供多種持久性儲存服務，可供您的應用程式使用。下表列出了這些版本。


| 儲存服務 | 服務文件 | Elastic Beanstalk 整合 | 
| --- | --- | --- | 
| [Amazon S3](https://aws.amazon.com/s3/) | [Amazon Simple Storage Service 文件](https://aws.amazon.com/documentation/s3/) | [將 Elastic Beanstalk 與 Amazon S3 搭配使用](AWSHowTo.S3.md) | 
| [Amazon Elastic File System](https://aws.amazon.com/efs/) | [Amazon Elastic File System 文件](https://aws.amazon.com/documentation/efs/) | [搭配 Amazon Elastic File System 使用 Elastic Beanstalk](services-efs.md) | 
| [Amazon Elastic Block Store](https://aws.amazon.com/ebs/) |  [Amazon Elastic Block Store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) [功能指南：Elastic Block Store](https://aws.amazon.com/articles/1667)  |  | 
| [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) | [Amazon DynamoDB 文件](https://aws.amazon.com/documentation/dynamodb/) | [搭配 Amazon DynamoDB 使用 Elastic Beanstalk](AWSHowTo.dynamoDB.md) | 
| [Amazon Relational Database Service (RDS)](https://aws.amazon.com/rds/) | [Amazon Relational Database Service 文件](https://aws.amazon.com/documentation/rds/) | [搭配 Amazon RDS 使用 Elastic Beanstalk](AWSHowTo.RDS.md) | 

**注意**  
Elastic Beanstalk 會建立一個 *webapp* 使用者，您可以將其設定為 EC2 執行個體上應用程式目錄的擁有者。對於 [2022 年 2 月 3 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-02-03-linux.html#release-2022-02-03-linux.changes)起發行的 Amazon Linux 2 平台版本，Elastic Beanstalk 會在新環境中為 *webapp* 使用者指派值為 900 的 uid (使用者 ID) 和 gid (群組 ID)。平台版本更新後，對現有環境也會執行相同的操作。此方法可讓 *webapp* 使用者對永久檔案系統儲存的存取許可保持一致。  
雖然不太可能，但如有其他使用者或程序已經使用 900，作業系統會將 *webapp* 使用者 uid 和 gid 預設為其他值。請在您的 EC2 執行個體上執行 Linux 命令 **id webapp**，對指派給 *webapp* 使用者的 uid 和 gid 值進行驗證。

## 容錯能力
<a name="concepts.concepts.design.faulttolerance"></a>

根據經驗，在設計雲端的架構時，您應採用最壞打算的做法。請充分利用架構提供的彈性。在設計，建置和部署時，一律都要能從故障自動復原。針對您的 Amazon EC2 執行個體和 Amazon RDS，使用多個可用區域。可用區域在概念上如同邏輯資料中心。使用 Amazon CloudWatch，來針對您 Elastic Beanstalk 應用程式的健全狀況取得更高的能見度，以及在硬體故障或效能降低時採取適當的動作。請進行您的 Auto Scaling 設定，來將 Amazon EC2 執行個體叢集維持於固定的大小，以讓新的 Amazon EC2 執行個體取代不健全的 Amazon EC2 執行個體。如果您使用的是 Amazon RDS，請設定備份的保留期，讓 Amazon RDS 可以執行自動備份作業。

## 內容交付
<a name="concepts.concepts.design.cloudfront"></a>

當使用者連線到您的網站，其請求可能會透過眾多的個別網路轉傳。因此，使用者可能會因為高度的延遲而體驗到低落的效能。Amazon CloudFront 可將您的 Web 內容 (例如影像和影片) 分送到世界各地節點網路的各處，進而協助您改善延遲的問題。使用者的請求會轉到最近的邊緣位置，讓內容能夠以最佳效能發佈。CloudFront 可與 Amazon S3 完美搭配運作，後者會持久地儲存您檔案的原始最終版本。如需 Amazon CloudFront 的詳細資訊，請參閱 [Amazon CloudFront 開發人員指南](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html)。

## 軟體更新與修補
<a name="concepts.concepts.design.updates"></a>

AWS Elastic Beanstalk 會定期發行[平台更新](using-features.platform.upgrade.md)，以提供修正、軟體更新和新功能。Elastic Beanstalk 提供了多種處理平台更新的選擇。[受管平台更新](environment-platform-update-managed.md)可以在排定的維護時段將您的環境自動升級至最新的平台版本，同時讓您的應用程式維持運作。在 2019 年 11 月 25 日或之後使用 Elastic Beanstalk 主控台建立的環境中，會盡可能根據預設啟用受管更新。您也可以使用 Elastic Beanstalk 主控台或 EB CLI 手動啟動更新。

## 連線能力
<a name="concepts.concepts.design.connectivity"></a>

Elastic Beanstalk 需要連線到您環境中的執行個體，才能完成部署。當您在 Amazon VPC 中部署 Elastic Beanstalk 應用程式時，啟用連線功能所需的組態，取決於您所建立的 Amazon VPC 環境的類型：
+ 對於單一執行個體環境，不需額外進行設定。這是因為在這類環境中，Elastic Beanstalk 會指派公有彈性 IP 地址給每個 Amazon EC2 執行個體，而此等地址可以讓執行個體直接與網際網路進行通訊。
+ 對於 Amazon VPC 中有負載平衡且可擴展的環境而言 (同時具備公有與私有子網路)，您必須執行以下操作：
  + 在公有子網路中建立負載平衡器，來轉傳從網際網路到 Amazon EC2 執行個體的傳入流量。
  + 建立網路位址轉譯 (NAT) 裝置，來轉傳從私有子網路中的 Amazon EC2 執行個體到網際網路的傳出流量。
  + 針對私有子網路中的 Amazon EC2 執行個體，建立傳入與傳出的轉傳規則。
  + 如果使用 NAT 執行個體，請設定 NAT 執行個體和 Amazon EC2 執行個體適用的安全群組，以啟用網際網路通訊。
+ 對於具備一個公有子網路的 Amazon VPC 中負載平衡的可擴展環境，不需額外進行設定。這是因為在這類環境中，您的 Amazon EC2 執行個體設有公有 IP 地址，而此等地址可以讓執行個體直接與網際網路進行通訊。

如需搭配 Amazon VPC 使用 Elastic Beanstalk 的詳細資訊，請參閱[搭配 Amazon VPC 使用 Elastic Beanstalk](vpc.md)。