本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從網際網路接收 Amazon ECS 傳入連線的最佳實務
如果您執行公有服務,則必須接受來自網際網路的傳入流量。例如,您的公有網站必須接受來自瀏覽器的傳入 HTTP 請求。在這種情況下,網際網路上的其他主機也必須啟動與應用程式主機的傳入連線。
此問題的一個方法是在具有公有 IP 地址的公有子網路中的主機上啟動您的容器。不過,我們不建議用於大規模應用程式。在這些方面,更好的方法是擁有位於網際網路和應用程式之間的可擴展輸入層。對於此方法,您可以使用本節中列出的任何 AWS 服務做為輸入。
Application Load Balancer
應用程式層的 Application Load Balancer 函數。這是開放系統互連 (OSI) 模型的第七層。這使得 Application Load Balancer 適用於公有 HTTP 服務。如果您有網站或 HTTP REST API,則 Application Load Balancer 是適合此工作負載的負載平衡器。如需詳細資訊,請參閱《Application Load Balancer 使用者指南》中的什麼是 Application Load Balancer?。

透過此架構,您可以在公有子網路中建立 Application Load Balancer,使其具有公有 IP 地址,並可接收來自網際網路的傳入連線。當 Application Load Balancer 收到傳入連線,或特別是 HTTP 請求時,它會使用其私有 IP 地址開啟與應用程式的連線。然後,它會透過內部連線轉送請求。
Application Load Balancer 具有下列優點。
-
SSL/TLS 終止 — Application Load Balancer 可以維持安全的 HTTPS 通訊和憑證,以便與用戶端進行通訊。它可以選擇終止負載平衡器層級的 SSL 連線,這樣您就不必在自己的應用程式中處理憑證。
-
進階路由 — Application Load Balancer 可以有多個 DNS 主機名稱。它還具有進階路由功能,可根據主機名稱或請求路徑等指標,將傳入的 HTTP 請求傳送至不同的目的地。這表示您可以使用單一 Application Load Balancer 做為許多不同內部服務的輸入,甚至是 REST API 不同路徑上的微服務。
-
gRPC 支援和 Websocket:Application Load Balancer 不僅可以處理 HTTP。它也可以透過 HTTP/2 支援來負載平衡 gRPC 和 Websocket 型服務。
-
安全性:Application Load Balancer 可協助保護您的應用程式免於惡意流量。它包含 HTTP 取消同步緩解等功能,並與 AWS Web Application Firewall (AWS WAF) 整合。 AWS WAF 可以進一步篩選可能包含攻擊模式的惡意流量,例如 SQL Injection 或跨網站指令碼。
Network Load Balancer
Network Load Balancer 是在開放系統互連 (OSI) 模型的第四層運作。它適用於需要end-to-end加密的非 HTTP 通訊協定或案例,但沒有與 Application Load Balancer 相同的 HTTP 特定功能。因此,Network Load Balancer 最適合不使用 HTTP 的應用程式。如需詳細資訊,請參閱《Network Load Balancer 使用者指南》中的什麼是 Network Load Balancer?。

使用 Network Load Balancer 做為輸入時,其運作方式類似於 Application Load Balancer。這是因為其是在公有子網路中建立,且具有可在網際網路上存取的公有 IP 地址。Network Load Balancer 接著會開啟與執行容器之主機私有 IP 地址的連線,並將封包從公有端傳送至私有端。
Network Load Balancer 功能
由於 Network Load Balancer 在較低層級的網路堆疊中運作,因此它沒有與 Application Load Balancer 相同的一組功能。不過,它確實具有下列重要功能。
-
End-to-end加密 — 由於 Network Load Balancer 在 OSI 模型的第四層運作,因此不會讀取封包的內容。這使得它適用於需要end-to-end加密的負載平衡通訊。
-
TLS 加密 — 除了end-to-end加密之外,Network Load Balancer 也可以終止 TLS 連線。如此一來,您的後端應用程式就不必實作自己的 TLS。
-
UDP 支援 – 由於 Network Load Balancer 在 OSI 模型的第四層運作,因此適合 TCP 以外的非 HTTP 工作負載和通訊協定。
關閉連線
由於 Network Load Balancer 未在 OSI 模型的較高層觀察應用程式通訊協定,因此無法傳送關閉訊息給這些通訊協定中的用戶端。與 Application Load Balancer 不同,這些連線需要由應用程式關閉,或者您可以設定 Network Load Balancer 在任務停止或取代時關閉第四層連線。請參閱 Network Load Balancer 文件中 Network Load Balancer 目標群組的連線終止設定。
如果用戶端未處理,讓 Network Load Balancer 關閉第四層的連線可能會導致用戶端顯示不需要的錯誤訊息。有關建議用戶端組態的詳細資訊,請參閱這裡
關閉連線的方法會因應用程式而異,但其中一種方法是確保 Network Load Balancer 目標取消註冊延遲比用戶端連線逾時更長。用戶端會先逾時,並透過 Network Load Balancer 正常重新連線至下一個任務,而舊任務會緩慢耗盡其所有用戶端。如需 Network Load Balancer 目標取消註冊延遲的詳細資訊,請參閱 Network Load Balancer 文件。
Amazon API Gateway HTTP API
Amazon API Gateway 適用於請求磁碟區或低請求磁碟區突然爆增的 HTTP 應用程式。如需詳細資訊,請參閱 API Gateway 開發人員指南中的什麼是 Amazon API Gateway?。

Application Load Balancer 和 Network Load Balancer 的定價模型包含每小時價格,讓負載平衡器隨時可供接受傳入連線。相反地,API Gateway 會分別針對每個請求收取費用。這會影響如果沒有請求進來,就不會產生費用。在高流量負載下,Application Load Balancer 或 Network Load Balancer 能以比 API Gateway 更便宜的價格處理更多請求。不過,如果您的整體請求數量較少,或流量期間很低,則使用 API Gateway 的累積價格應該比支付每小時費用更符合成本效益,以維持未充分利用的負載平衡器。API Gateway 也可以快取 API 回應,這可能會導致較低的後端請求率。
使用 VPC 連結的 API Gateway 函數,允許 AWS 受管服務使用其私有 IP 地址連接到 VPC 私有子網路內的主機。它可以透過查看由 Amazon ECS Service Discovery 管理 AWS Cloud Map 的服務探索記錄來偵測這些私有 IP 地址。
API Gateway 支援下列功能。
-
API Gateway 操作類似於負載平衡器,但具有 API 管理特有的其他功能
-
API Gateway 提供用戶端授權、用量層和請求/回應修改的其他功能。如需詳細資訊,請參閱 Amazon API Gateway 功能
。 -
API Gateway 可以支援邊緣、區域和私有 API 閘道端點。Edge 端點可透過受管 CloudFront 分佈取得。區域和私有端點都是區域本機端點。
-
SSL/TLS 終止
-
將不同的 HTTP 路徑路由到不同的後端微服務
除了上述功能之外,API Gateway 還支援使用自訂 Lambda 授權方,您可以使用這些授權方來保護 API 免受未經授權的使用。如需詳細資訊,請參閱 欄位備註:使用 Amazon ECS 和 Amazon APIs Gateway 的無伺服器容器型 API Amazon API Gateway