搭配 Amazon VPC 使用 Elastic Beanstalk - AWS Elastic Beanstalk

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

搭配 Amazon VPC 使用 Elastic Beanstalk

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

VPC 要求
  • 網際網路存取 ‒ 執行個體可透過以下其中一種方法存取網際網路:

    • 公有子網路 ‒ 執行個體具備公有 IP 地址,並使用網際網路閘道存取網際網路。

    • 私有子網路 ‒ 執行個體使用 NAT 裝置存取網際網路。

    注意

    如果您將 VPC 中的 VPC 端點設定為連線到 elasticbeanstalkelasticbeanstalk-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 儲存庫提供 AWS CloudFormation 範本,可讓您用來建立 VPC 以搭配 Elastic Beanstalk 環境使用。

若要使用 AWS CloudFormation 範本來建立資源
  1. 複製範本儲存庫,或是使用 README 中的連結下載範本。

  2. 開啟 AWS CloudFormation 主控台

  3. 選擇 Create Stack (建立堆疊)。

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

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

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

堆疊建立完成後,檢查 Outputs (輸出) 索引標籤,尋找 VPC ID 和子網路 ID。在新的環境精靈網路組態類別中使用這些設定 VPC。

公有 VPC

AWS CloudFormation 範本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

AWS CloudFormation 範本vpc-privatepublic.yaml

設定 (負載平衡)
  • 負載平衡器可見度 ‒ 公有

  • 負載平衡器子網路 ‒ 兩個公有子網路

  • 執行個體公有 IP ‒ 已停用

  • 執行個體子網路 ‒ 兩個私有子網路

  • 執行個體安全群組 ‒ 新增預設安全群組

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

私有 VPC

AWS CloudFormation 範本vpc-private.yaml

設定 (負載平衡)
  • 負載平衡器可見度 ‒ 私有

  • 負載平衡器子網路 ‒ 兩個私有子網路

  • 執行個體公有 IP ‒ 已停用

  • 執行個體子網路 ‒ 兩個私有子網路

  • 執行個體安全群組 ‒ 新增預設安全群組

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

在私有 VPC 中執行 Elastic Beanstalk 環境

當您在私有 VPC 中建立 Elastic Beanstalk 環境時,環境無法存取網際網路。您的應用程式可能需要存取 Elastic Beanstalk 服務或其他服務。您的環境可能會使用增強型運作狀態報告,在此情況下,環境執行個體會將運作狀態資訊傳送至增強型運作狀態服務。環境執行個體上的 Elastic Beanstalk 程式碼將流量發送到其他 AWS 服務,並將其他流量發送到非 AWS 端點 (例如,為您的應用程式下載相依性套件)。以下是在此情況下,您可能需要採取的一些步驟,以確保您的環境正常運作。

  • 「為 Elastic Beanstalk 設定 VPC 端點」‒ Elastic Beanstalk 及其增強型運作狀態服務支援 VPC 端點,以確保這些服務的流量保持在 Amazon 網路中,且不需要網際網路存取。如需更多詳細資訊,請參閱 搭配 VPC 端點使用 Elastic Beanstalk

  • 為其他服務設定 VPC 端點 ‒ Elastic Beanstalk 執行個體會代您將流量傳送到其他數個 AWS 服務:Amazon Simple Storage Service (Amazon S3)、Amazon Simple Queue Service (Amazon SQS)、AWS CloudFormation 和 Amazon CloudWatch Logs。您也必須為這些服務設定 VPC 端點。如需 VPC 端點的詳細資訊 (包括每個服務連結),請參閱《Amazon VPC 使用者指南》中的 VPC 端點

    注意

    有些 AWS 服務 (包括 Elastic Beanstalk) 僅在有限數量的 AWS 區域中支援 VPC 端點。當您設計私有 VPC 解決方案時,請確認此處提及的 Elastic Beanstalk 與其他相依服務支援您選擇 AWS 區域中的 VPC 端點。

  • 「提供私有 Docker 影像」‒ 在 Docker 環境中,環境執行個體上的程式碼可能會嘗試在建立環境期間,從網際網路提取已設定的 Docker 影像並失敗。如要避免此失敗,請在您的環境上建置自訂 Docker 影像,或是使用存放在 Amazon Elastic Container Registry (Amazon ECR) 中的 Docker 影像,然後為 Amazon ECS 服務設定 VPC 端點

  • 啟用 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-28Windows Update 2020-02-24

    注意

    需要更新平台版本的原因是,舊版本有一個可能阻止由 Enable DNS name (啟用 DNS 名稱) 選項所建立的 DNS 項目為 Amazon SQS 正常運作的問題。