View a markdown version of this page

聯網 - AWS Lambda

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

聯網

您可以在執行時間將 Network Connector 資源與 AWS Lambda MicroVMs,以設定 MicroVM 的網路存取。網路連接器會在您呼叫 時指定,run-microvm無法在 MicroVM 執行時變更。

概觀

每個 MicroVM 都可以有獨立的輸入 (傳入) 和輸出 (傳出) 網路組態:

  • 輸入網路連接器可啟用傳入連線。用戶端連接到服務受管 HTTPS 端點,Lambda 會將流量轉送到您在 MicroVM 中設定的連接埠。輸入連接器 AWS受到管理 – 您在執行 MicroVM 時由 ARN 參考。

  • 輸出網路連接器會啟用傳出流量。根據預設,MicroVMs具有公有網際網路存取。您可以建立客戶管理的 VPC 輸出連接器,以改為透過 VPC 路由傳出流量。

單一連接器可以在許多 MicroVMs之間重複使用 – 這是預期的使用模式。

傳入連線

每個 Lambda MicroVM 都可以在唯一的 HTTPS 端點 URL 上連線,在您呼叫 時指派run-microvm。用戶端會透過 HTTPS 傳送請求至此端點。Lambda 會將每個請求路由到 MicroVM 內的連接埠,您的應用程式會在該連接埠中接收請求。

根據預設,端點收到的請求會路由至 MicroVM 內的連接埠 8080。若要路由到不同的連接埠,請參閱 連接埠路由

傳入端點支援下列通訊協定:

  • HTTP/1.1

  • HTTP/2

  • WebSockets

  • gRPC

  • 伺服器傳送事件 (SSE)

注意

用戶端與 MicroVM 端點之間的流量一律使用 TLS 加密。您的應用程式可以在內部透過 HTTP 或 HTTPS 提供請求。

連接埠路由

Lambda 會使用下列優先順序選取 MicroVM 內的目標連接埠:

  1. X-aws-proxy-port 標頭 – 對於標準 HTTP 請求,請將此標頭包含目標連接埠號碼。

  2. WebSocket 子通訊協定 – 如果您的 WebSocket 用戶端無法設定自訂標頭,請將目標連接埠指定為名為 的子通訊協定lambda-microvms.port.N,其中 N 是連接埠號碼。您在開啟 WebSocket 連線時提供子通訊協定。如需範例,請參閱 通訊協定

  3. 預設 (8080) – 如果兩者皆未指定,則請求路由至連接埠 8080。

重要

目標連接埠必須在身分驗證字符中allowedPorts定義的 內。對未經授權連接埠的請求會收到 403 禁止的回應。

身分驗證

對 MicroVM 端點的所有請求都需要 X-aws-proxy-auth標頭中的有效身分驗證字符。您可以使用 產生權杖create-microvm-auth-token。每個字符都是加密的 JWE (JSON Web Encryption) 字串,範圍為:

  • 特定 MicroVM (以 ID 識別)。

  • 一組允許的連接埠 (單一連接埠、範圍或所有連接埠)。

  • 過期時間 (在權杖建立時設定)。

下列範例會建立字符,並使用它來傳送已驗證的請求:

aws lambda-microvms create-microvm-auth-token \ --microvm-identifier microvm-id \ --expiration-in-minutes 30 \ --allowed-ports '[{"port":8080}]'
curl 'https://microvm-endpoint' \ -H 'X-aws-proxy-auth: TOKEN' \ -H 'X-aws-proxy-port: 8080'

如需建立字符並連線至 MicroVM 的完整逐步解說,包括 WebSocket 連線,請參閱 連線至 MicroVM

錯誤回應

當 MicroVM 端點無法處理或交付請求到您的應用程式時,會傳回下列 HTTP 狀態碼。這些回應來自端點,而不是您的應用程式。

Code 狀態 原因和解決方法
400 錯誤的請求。 格式不正確的請求,或無效的連接埠標頭或 WebSocket 子通訊協定。驗證格式。
403 禁止 字符遺失、過期或無效;或請求的連接埠不在字符的 中allowedPorts。產生新的字符,或使用允許的連接埠。
429 請求過多 超過速率限制 (帳戶層級或每個 MicroVM)。以指數退避重試。
500 內部伺服器錯誤 發生內部錯誤。重試 請求。
502 無效的閘道 應用程式未回應,或自動繼續未在重試次數上限內成功。請參閱 自動繼續

請求標頭

Lambda 會為請求中繼資料保留X-aws-proxy-*標頭命名空間,例如身分驗證字符 (X-aws-proxy-auth) 和目標連接埠 ()X-aws-proxy-port。Lambda 會在轉送請求到您的應用程式之前移除X-aws-proxy-*標頭。

請求/回應頻寬

每個 Lambda MicroVM 都有一個請求/回應頻寬,可根據其大小線性擴展。此頻寬適用於透過 MicroVM 端點的所有流量,包括傳入請求和傳出回應。

MicroVM 大小 (基準) 最大頻寬
0.5 GB、0.25 vCPU 1 MB/s (8 Mbps)
1 GB、0.5 vCPU 2 MB/s (16 Mbps)
2 GB、1 個 vCPU 4 MB/s (32 Mbps)
4 GB、2 個 vCPU 8 MB/s (64 Mbps)
8 GB、4 個 vCPU 16 MB/s (128 Mbps)

如果您因為網路飽和而遇到請求延遲增加,請減少請求並行或承載大小,或選取較大的 MicroVM 大小來增加可用的頻寬。

HTTP/2 支援

Lambda MicroVMs 在傳入端點上支援 HTTP/2。Lambda 在 TLS 交握期間透過 ALPN (應用程式層通訊協定交涉) 交涉通訊協定,偏好 HTTP/2 並回到 HTTP/1.1。具備 HTTP/2 功能的用戶端會自動使用它。

若要在端點與 MicroVM 內的應用程式之間使用 HTTP/2:

  • 您的應用程式提供 TLS – Lambda 透過 ALPN 與您的應用程式交涉 HTTP/2,如果不支援 HTTP/2,則返回 HTTP/1.1。

  • 您的應用程式提供純文字 HTTP – 在請求中包含 X-aws-proxy-force-h2: true標頭,以在應用程式的連線上使用 HTTP/2。

傳出連線

根據預設,Lambda MicroVMs輸出路徑上具有公有網際網路存取。若要透過 Direct Connect 或 VPN 將 MicroVMs與私有 VPCs 中的資源連線,例如 RDS、ElastiCache、內部 APIs 和內部部署系統,請使用 VPC 組態建立 Lambda Network Connector。

使用 VPC 輸出時,傳出流量受管理 VPC 中流量的安全群組規則和網路 ACLs 約束。

使用輸出網路連接器

輸出網路連接器會透過 VPC 路由來自 MicroVM 的傳出流量。您建立一次連接器,然後在透過 run-microvm命令啟動 MicroVMs時由 ARN 參考它。

先決條件

在建立網路連接器之前,您需要一個 IAM 角色,允許 Lambda 在 VPC 中建立彈性網路介面 ENIs)。角色需要以下許可:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateENI", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": [ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "TagENI", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:ManagedResourceOperator": "network-connectors.lambda.amazonaws.com" } } } ] }

建立網路連接器

透過指定 VPC 子網路、安全群組和網路通訊協定 (IPv4DualStack) 來建立連接器:

aws lambda-core create-network-connector \ --name my-connector \ --configuration '{ "VpcEgressConfiguration": { "SubnetIds": ["subnet-xxx"], "SecurityGroupIds": ["sg-xxx"], "NetworkProtocol": "IPv4", "AssociatedComputeResourceTypes": ["MicroVm"] } }' \ --operator-role arn:aws:iam::123456789012:role/NetworkConnectorOperatorRole

網路連接器狀態

連接器必須處於 ACTIVE 狀態,才能在 中參考它run-microvm

State 說明
PENDING 正在建立連接器 (正在佈建基礎 ENIs)。
ACTIVE 連接器已準備好可供使用。
INACTIVE 連接器暫時處於非作用中狀態。
FAILED 佈建或更新失敗。檢查 StateReason
DELETING 連接器正在刪除;正在清除 ENIs。
DELETE_FAILED 刪除失敗。

使用網路連接器執行 MicroVM

執行 MicroVM 時參考連接器 ARN:

aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --egress-network-connectors connector-arn \ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800,"autoResumeEnabled":false}'
注意

更新或刪除連接器之前,請確定所有使用連接器MicroVMs 都已終止。修改正在使用的連接器可能會導致執行 MicroVMs網路連線問題。