

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

# 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)<br />[功能指南：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)。