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 無效的閘道 應用程式未回應,或自動繼續未在重試次數上限內成功。請參閱 自動繼續。

請求標頭

X-aws-proxy-* 標頭命名空間是由 Lambda 預留給請求中繼資料,例如身分驗證字符 (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 子網路、安全群組和網路通訊協定 (IPv4 或 ) 來建立連接器DualStack:

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網路連線問題。

您可以使用 AWS PrivateLink 在 AWS VPC 資源和 Lambda MicroVMs之間透過網路進行私有連線,而無需周遊公有網際網路。MicroVMs支援兩個 VPC 端點,取決於所需的流量目的地:

  • MicroVM 管理 APIs(建立映像、執行、暫停、終止) – 使用現有的 Lambda VPC 端點 (com.amazonaws.region.lambda)。

  • 與 MicroVMs的連線 (對執行中應用程式的 HTTPS 流量) – 使用單獨的端點 (com.amazonaws.region.lambda-microvm)。

Lambda MicroVMs 與 Lambda () 共用相同的 VPC 端點服務com.amazonaws.region.lambda。如需完整說明,請參閱建立 Lambda 的介面端點。

若要控制誰可以使用您的界面端點,以及他們可以執行哪些 Lambda MicroVMs API 動作,請連接端點政策。此政策會指定可執行動作的委託人、可執行的動作,以及可執行的資源。Lambda MicroVMs 動作使用 IAM lambda: 動作字首。

如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的使用 VPC 端點控制對服務的存取。

下列範例政策MyUser允許使用者透過端點列出和取得 MicroVM 映像:

{ "Statement": [ { "Principal": { "AWS": "arn:aws:iam::111122223333:user/MyUser" }, "Effect": "Allow", "Action": [ "lambda:ListMicrovmImages", "lambda:GetMicrovmImage" ], "Resource": "*" } ] }

若要保持執行中 MicroVMs 的 HTTPS 流量為私有,請為 com.amazonaws.region.lambda-microvm服務建立介面端點。此端點會處理 MicroVM 端點 URLs連線 (例如 abc123def456.lambda-microvm.us-east-1.on.aws)。

若要進一步了解介面端點屬性,請參閱 Amazon VPC 文件中的介面端點指南。

建立 MicroVM 連線的介面端點 (主控台)

  1. 開啟 Amazon VPC 主控台的 Endpoints (端點) 頁面。

  2. 選擇建立端點。

  3. 對於服務類別,請確定您已選擇 AWS 服務。

  4. 在 Service Name (服務名稱) 中,選擇 com.amazonaws.region.lambda-microvm。確認類型為介面。

  5. 建立 VPC 和子網路

  6. 若要啟用界面端點的私有 DNS,請選取啟用 DNS 名稱核取方塊 (建議)。這可確保使用公有 MicroVM 端點主機名稱的請求會自動解析到您的介面端點,而不需要用戶端變更。

  7. 對於安全群組,選擇一或多個安全群組。安全群組必須允許連接埠 443 到端點網路介面的傳出 TCP 流量。

  8. 選擇建立端點。

若要使用私有 DNS 選項,您必須設定 VPC 的 enableDnsHostnames和 enableDnsSupport 屬性。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的檢視並更新 VPC 的 DNS 支援。

建立 MicroVM 連線的介面端點 (AWS CLI)

aws ec2 create-vpc-endpoint \ --vpc-id vpc-ec43eb89 \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-east-1.lambda-microvm \ --subnet-id subnet-abababab \ --security-group-id sg-1a2b3c4d \ --private-dns-enabled

若要驗證端點是否可用,以及私有 DNS 是否有效:

aws ec2 describe-vpc-endpoints \ --vpc-endpoint-ids vpce-1a2b3c4d5e6f7g8h9 \ --query 'VpcEndpoints[0].{State:State,PrivateDns:PrivateDnsEnabled,Dns:DnsEntries[*].DnsName}'

啟用私有 DNS 時 – 端點會管理 VPC *.lambda-microvm.region.on.aws內部的 DNS 解析。您現有的 MicroVM 端點主機名稱 (例如 abc123def456.lambda-microvm.us-east-1.on.aws) 會解析為端點網路介面的私有 IP 地址。不需要變更用戶端。

停用私有 DNS 時 – Amazon VPC 會以 格式為您的端點產生端點特定的 DNS 名稱vpce-id-hash.lambda-microvm.region.vpce.amazonaws.com。若要透過此端點路由流量,同時仍到達正確的 MicroVM,您必須將原始 MicroVM 主機名稱保留在兩個位置:

  • TLS 伺服器名稱指示 (SNI) – TLS 交握使用此值來識別連線的 MicroVM。

  • HTTP 主機標頭 – 代理使用此值將請求路由到正確的 MicroVM。

如果任一值設定為 VPC 端點主機名稱而非 MicroVM 主機名稱,則無法將連線路由至正確的 MicroVM。

範例:透過端點特定的 DNS 名稱連線

下列範例使用 curl 搭配 --connect-to旗標,將 TCP 連線重新導向至 VPC 端點,同時將 MicroVM 主機名稱保留在 URL、SNI 和主機標頭中:

ENDPOINT_HOST=abc123def456.lambda-microvm.us-east-1.on.aws VPCE_HOST=vpce-0a1b2c3d4e5f67890-a1b2c3d4.lambda-microvm.us-east-1.vpce.amazonaws.com curl --connect-to "$ENDPOINT_HOST:443:$VPCE_HOST:443" \ -H "x-aws-proxy-auth: $MICROVM_AUTH_TOKEN" \ -H "x-aws-proxy-port: 8080" \ "https://$ENDPOINT_HOST/"

--connect-to 旗標會告知 curl 開啟與 VPC 端點地址的 TCP 連線,而 URL、TLS SNI 和主機標頭仍會設定為您的 MicroVM 主機名稱。

如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的透過介面端點存取服務。

您可以連接端點政策,以控制哪些 MicroVMs 可透過 lambda-microvm VPC 端點存取。lambda-microvm 服務的端點政策可讓您限定與特定帳戶或組織的連線範圍。根據預設,端點允許連線到任何 AWS 帳戶中MicroVMs。(注意:建立連線的用戶端仍必須保留有效的 MicroVM 驗證權杖,才能授予存取權)。

根據預設,VPC 端點具有允許所有流量的完整存取政策。當您將預設政策取代為自訂政策時,Lambda MicroVMs 會根據透過端點進行的每個連線上的lambda:ConnectMicrovm動作來評估該政策。如果政策不允許連線至 MicroVMs則會以 HTTP 403 禁止回應拒絕連線。未授予 lambda:ConnectMicrovm 的政策會拒絕透過端點的所有連線。

注意

lambda:ConnectMicrovm 動作會授權透過介面端點連線至 MicroVM 端點。它不是 Lambda API 操作,無法在 IAM 身分型或資源型政策中使用 – 它僅在 VPC 端點政策中有效。

主體和資源

使用 MicroVM 驗證權杖而非 AWS Signature 第 4 版來驗證 MicroVM 端點的連線。因此,沒有與連線相關聯的 IAM 主體。相反地,Lambda MicroVMs 會使用匿名主體評估端點政策。這表示:

  • Principal 必須為 "*"。指定特定委託人的政策不匹配任何內容,並拒絕每個連線。

  • 取決於請求者身分 (例如 aws:PrincipalArn、 aws:PrincipalOrgID和 aws:userid) 的條件索引鍵不會填入,也不會相符。

  • Resource 也必須是 "*"。Lambda MicroVMs 不會將端點政策評估範圍限制為個別 MicroVM 資源 ARNs。若要限制端點可以到達的 MicroVMs,請使用 aws:ResourceAccount 條件索引鍵而非 Resource元素。

支援的條件金鑰

條件金鑰 說明
aws:ResourceAccount 擁有要連線之 MicroVM AWS 的帳戶。
aws:ResourceOrgID 擁有 MicroVM 之帳戶的 AWS Organizations 組織 ID。
aws:SourceVpce 連線通過的介面端點 ID。
aws:SourceVpc 連線來源的 VPC ID。
aws:VpcSourceIp 進行連線之用戶端的私有 IP 地址。

範例:僅允許連線至您自己的帳戶中MicroVMs

下列端點政策僅允許透過端點連線至帳戶 111122223333 擁有MicroVMs。任何其他帳戶擁有的 MicroVMs連線遭拒。

{ "Statement": [ { "Principal": "*", "Effect": "Allow", "Action": "lambda:ConnectMicrovm", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" } } } ] }