

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

# 搭配 Amazon VPC 使用 Elastic Beanstalk
<a name="vpc"></a>

本主題說明搭配 Elastic Beanstalk 使用 VPC 端點的好處，以及您可以實作的不同組態類型。

您可以使用 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) 為您的 Elastic Beanstalk 應用程式和相關 AWS 資源建立安全網路。建立您的環境時，您可以選擇哪些 VPC、子網路和安全群組是用於您的應用程式執行個體和負載平衡器。您可以使用任何 VPC 組態，只要符合以下需求即可。

**VPC 要求**
+ **網際網路存取** ‒ 執行個體可透過以下其中一種方法存取網際網路：
  + **公有子網路** ‒ 執行個體具備公有 IP 地址，並使用網際網路閘道存取網際網路。
  + **私有子網路** ‒ 執行個體使用 NAT 裝置存取網際網路。
**注意**  
如果您將 VPC 中的 [VPC 端點](vpc-vpce.md)設定為連線到 `elasticbeanstalk` 和 `elasticbeanstalk-health` 服務，則網際網路存取是選擇性的，而且只有在應用程式特別需要時才需要。如果沒有 VPC 端點，您的 VPC 必須能夠存取網際網路。  
Elastic Beanstalk 為您設定的預設 VPC 提供網際網路存取。

  Elastic Beanstalk 不支援使用 `HTTPS_PROXY` 等代理設定來設定 Web 代理。
+ **NTP** ‒ 您 Elastic Beanstalk 環境中的執行個體會使用網路時間協定 (NTP) 同步系統時鐘。若執行個體上無法於 UDP 連接埠 123 通訊，時鐘可能會無法同步，並於 Elastic Beanstalk 運作狀態報告出現問題。請確認您的 VPC 安全群組和網路 ACL，允許連接埠 123 上的 UDP 流量出入，以避免這些問題。

[elastic-beanstalk-samples](https://github.com/awsdocs/elastic-beanstalk-samples/) 儲存庫提供 CloudFormation 範本，可用來建立 VPC 以搭配 Elastic Beanstalk 環境使用。

**使用 CloudFormation 範本建立資源**

1. 複製範本儲存庫，或是使用 [README](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/cfn-templates/README.md) 中的連結下載範本。

1. 開啟 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/home)。

1. 選擇**建立堆疊**。

1. 選擇 **Upload a template to Amazon S3 (上傳範本到 Amazon S3)**。

1. 選擇 **Upload file (上傳檔案)** 並從您的本機機器上傳範本檔案。

1. 選擇 **Next (下一步)** 並依照說明操作來使用範本中的資源建立堆疊。

堆疊建立完成後，檢查 **Outputs (輸出)** 索引標籤，尋找 VPC ID 和子網路 ID。在新的環境精靈[網路組態類別](environments-create-wizard.md#environments-create-wizard-network)中使用這些設定 VPC。

**Topics**
+ [公有 VPC](#services-vpc-public)
+ [公有/私有 VPC](#services-vpc-privatepublic)
+ [私有 VPC](#services-vpc-private)
+ [範例：透過堡壘主機啟動 VPC 內的 Elastic Beanstalk 應用程式](vpc-bastion-host.md)
+ [範例：透過 Amazon RDS 在 VPC 中啟動 Elastic Beanstalk](vpc-rds.md)
+ [搭配 VPC 端點使用 Elastic Beanstalk](vpc-vpce.md)
+ [使用端點政策搭配 VPC 端點來控制存取](vpc-vpce.policy.md)

## 公有 VPC
<a name="services-vpc-public"></a>

**CloudFormation 範本** – [vpc-public.yaml](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/cfn-templates/vpc-public.yaml)

**設定 (負載平衡)**
+ **負載平衡器可見度** ‒ 公有
+ **負載平衡器子網路** ‒ 兩個公有子網路
+ **執行個體公有 IP** ‒ 已啟用
+ **執行個體子網路** ‒ 兩個公有子網路
+ **執行個體安全群組** ‒ 新增預設安全群組

**設定 (單一執行個體)**
+ **執行個體子網路** ‒ 其中一個公有子網路
+ **執行個體安全群組** ‒ 新增預設安全群組

基本*僅公有* VPC 版面配置包含一或多個公有子網路、網際網路閘道和預設的安全群組，讓 VPC 中各資源之間存在流量。當您在 VPC 中建立環境時，Elastic Beanstalk 會根據環境類型建立額外的資源。

**VPC 資源**
+ **單一執行個體** &endash; Elastic Beanstalk 會針對應用程式執行個體建立安全群組，允許來自連接埠 80 的網際網路流量，並為此執行個體指派彈性 IP，為其指定一個公有 IP 地址。環境的網域名稱解析成執行個體的公有 IP 地址。
+ **負載平衡** &endash; Elastic Beanstalk 為負載平衡器建立安全群組，允許來自連接埠 80 的網際網路流量，並會為應用程式執行個體建立安全群組，允許來自負載平衡器安全群組的流量。環境的網域名稱解析成負載平衡器的網域名稱。

這與 Elastic Beanstalk 在您使用預設 VPC 時管理聯網的方式相似。公有子網路中的安全取決於負載平衡器以及 Elastic Beanstalk 建立的執行個體安全群組。這是最便宜的配置，因為它不需要 NAT 閘道。

## 公有/私有 VPC
<a name="services-vpc-privatepublic"></a>

**CloudFormation 範本** – [vpc-privatepublic.yaml](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/cfn-templates/vpc-privatepublic.yaml)

**設定 (負載平衡)**
+ **負載平衡器可見度** ‒ 公有
+ **負載平衡器子網路** ‒ 兩個公有子網路
+ **執行個體公有 IP** ‒ 已停用
+ **執行個體子網路** ‒ 兩個私有子網路
+ **執行個體安全群組** ‒ 新增預設安全群組

如需額外的安全性，可新增私有子網路到您的 VPC 以建立*公有-私有*配置。此配置需要公有子網路中的負載平衡器和 NAT 閘道，讓您執行應用程式執行個體、資料庫和私有子網路中的任何其他資源。私有子網路中的執行個體只能透過負載平衡器和 NAT 閘道與網際網路通訊。

## 私有 VPC
<a name="services-vpc-private"></a>

**CloudFormation 範本** – [vpc-private.yaml](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/cfn-templates/vpc-private.yaml)

**設定 (負載平衡)**
+ **負載平衡器可見度** ‒ 私有
+ **負載平衡器子網路** ‒ 兩個私有子網路
+ **執行個體公有 IP** ‒ 已停用
+ **執行個體子網路** ‒ 兩個私有子網路
+ **執行個體安全群組** ‒ 新增預設安全群組

對於不應被網際網路存取的內部應用程式，您可以在私有子網路執行所有項目，並設定負載平衡器為朝向內部 (變更 **Load balancer visibility (負載平衡器可見度)** 至 **Internal (內部)**)。此範本會建立不含公有子網路和網際網路閘道的 VPC。使用應用程式的這個配置，其只能從相同的 VPC 或連接的 VPN 存取。

### 在私有 VPC 中執行 Elastic Beanstalk 環境
<a name="services-vpc-private-beanstalk"></a>

當您在私有 VPC 中建立 Elastic Beanstalk 環境時，環境無法存取網際網路。您的應用程式可能需要存取 Elastic Beanstalk 服務或其他服務。您的環境可能會使用增強型運作狀態報告，在此情況下，環境執行個體會將運作狀態資訊傳送至增強型運作狀態服務。而環境執行個體上的 Elastic Beanstalk 程式碼會將流量傳送至其他 AWS 服務，並將其他流量傳送至非AWS 端點 （例如，下載應用程式的相依性套件）。以下是在此情況下，您可能需要採取的一些步驟，以確保您的環境正常運作。
+ 「為 Elastic Beanstalk 設定 VPC 端點」**‒ Elastic Beanstalk 及其增強型運作狀態服務支援 VPC 端點，以確保這些服務的流量保持在 Amazon 網路中，且不需要網際網路存取。如需詳細資訊，請參閱[搭配 VPC 端點使用 Elastic Beanstalk](vpc-vpce.md)。
+ *為其他服務設定 VPC 端點* – Elastic Beanstalk 執行個體會代表您將流量傳送至數個 AWS 其他服務：Amazon Simple Storage Service (Amazon S3) AWS CloudFormation、Amazon Simple Queue Service (Amazon SQS) 和 Amazon CloudWatch Logs。您也必須為這些服務設定 VPC 端點。如需 VPC 端點的詳細資訊，包括每個服務連結，請參閱《*Amazon* [VPC 使用者指南》中的 VPC 端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)。
**注意**  
有些 AWS 服務，包括 Elastic Beanstalk，支援有限數量 AWS 區域中的 VPC 端點。當您設計私有 VPC 解決方案時，請確認 Elastic Beanstalk 和此處提及的其他相依服務支援您選擇的 AWS 區域中的 VPC 端點。
+ 「提供私有 Docker 影像」**‒ 在 [Docker](create_deploy_docker.md) 環境中，環境執行個體上的程式碼可能會嘗試在建立環境期間，從網際網路提取已設定的 Docker 影像並失敗。如要避免此失敗，請在您的環境上[建置自訂 Docker 影像](single-container-docker-configuration.md#single-container-docker-configuration.dockerfile)，或是使用存放在 [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/) 中的 Docker 影像，然後[為 Amazon ECS 服務設定 VPC 端點](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html)。
+ *啟用 DNS 名稱* – 環境執行個體上的 Elastic Beanstalk 程式碼會使用其公有端點將流量傳送至所有 AWS 服務。若要確保此流量經過，請在設定所有界面 VPC 端點時選擇 **Enable DNS name (啟用 DNS 名稱)** 選項。這會在 VPC 中新增 DNS 項目，此項目會將公有服務端點映射至界面 VPC 端點。
**重要**  
如果您的 VPC 並非私有且具有公有網際網路存取權，而且任何 VPC 端點的 **Enable DNS name (啟用 DNS 名稱)** 已停用，則個別服務的流量會透過公用網際網路傳輸。這可能不是您想要的。使用私有 VPC 很容易偵測到此問題，因為它可以防止此流量發生，並且您會收到錯誤。但是，對於公有面向的 VPC，則不會有任何指示。
+ 「包含應用程式相依性」**‒ 如果您的應用程式具有相依性 (例如語言執行時間套件)，則其可能會在環境建立期間嘗試從網際網路下載進行安裝並失敗。為了避免這種失敗，請在應用程式的原始碼套件中包含所有相依性套件。
+ 「使用目前的平台版本」**‒ 請確定您的環境使用 2020 年 2 月 24 日以後發行的平台版本。具體來說，使用在這兩個更新之一或之後發行的平台版本：[Linux Update 2020-02-28](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2020-02-28-linux.html)、[Windows Update 2020-02-24](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2020-02-24-windows.html)。
**注意**  
需要更新平台版本的原因是，舊版本有一個可能阻止由 **Enable DNS name (啟用 DNS 名稱)** 選項所建立的 DNS 項目為 Amazon SQS 正常運作的問題。