本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Lambda 會在 VPC Lattice 中做為目標
您可以使用 VPC Lattice 目標群組將 Lambda 函數註冊為目標,並設定接聽程式規則,將請求轉送至 Lambda 函數的目標群組。當服務將請求轉送至具有 Lambda 函數做為目標的目標群組時,它會叫用您的 Lambda 函數,並將請求的內容以 JSON 格式傳遞給 Lambda 函數。如需詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的搭配使用 AWS Lambda 與 Amazon VPC Lattice。
限制
-
Lambda 函數和目標群組必須在相同的帳戶中,且在相同的區域內。
-
您可以傳送到 Lambda 函數的請求內文大小上限為 6 MB。
-
JSON Lambda 函數可傳送的回應大小上限為 6 MB。
-
通訊協定必須為 HTTP或 HTTPS。
準備 Lambda 函數
如果您使用 Lambda 函數搭配 VPC Lattice 服務,則適用下列建議。
調用 Lambda 函數的許可
當您使用 AWS Management Console 或 建立目標群組並註冊 Lambda 函數時 AWS CLI,VPCLattice 會代表您將必要的許可新增至 Lambda 函數政策。
您也可以使用下列API呼叫自行新增許可:
aws lambda add-permission \ --function-name
lambda-function-arn-with-alias-name
\ --statement-idvpc-lattice
\ --principal vpc-lattice.amazonaws.com \ --action lambda:InvokeFunction \ --source-arntarget-group-arn
Lambda 函數版本控制
您可以為每個目標群組註冊一個 Lambda 函數。為了確保您可以變更 Lambda 函數,且 VPC Lattice 服務一律叫用 Lambda 函數的目前版本,請在向 VPC Lattice 服務註冊 Lambda 函數ARN時建立函數別名,並將別名包含在函數中。如需詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的 Lambda 函數版本和建立 Lambda 函數的別名。
為 Lambda 函數建立目標群組
建立目標群組以用於請求路由。如果請求內容符合接聽程式規則與 動作,以將其轉送到此目標群組,VPCLattice 服務會叫用已註冊的 Lambda 函數。
使用主控台建立目標群組並註冊 Lambda 函數
在 開啟 Amazon VPC主控台https://console.aws.amazon.com/vpc/
。 -
在導覽窗格的 VPC Lattice 下,選擇目標群組。
-
選擇 Create target group (建立目標群組)。
-
在選取目標類型中,選取 Lambda 函數。
-
針對 Target group name (目標群組名稱),輸入目標群組的名稱。
-
針對 Lambda 事件結構版本,選擇版本。如需詳細資訊,請參閱從 VPC Lattice 服務接收事件。
-
(選用) 若要新增標籤,請展開標籤,選擇新增標籤,然後輸入標籤索引鍵和標籤值。
-
選擇 Next (下一步)。
-
對於 Lambda function (Lambda 函數),請執行以下其中一項:
-
選取現有的 Lambda 函數。
-
建立新的 Lambda 函數並選取它。
-
稍後註冊 Lambda 函數。
-
-
選擇 Create target group (建立目標群組)。
使用 AWS CLI建立目標群組和註冊 Lambda 函數
使用 create-target-group和 register-targets 命令。
從 VPC Lattice 服務接收事件
VPC Lattice 服務支援 Lambda 呼叫 HTTP和 的請求HTTPS。服務會以 JSON 格式傳送事件,並將 X-Forwarded-For
標頭新增至每個請求。
Base64 編碼
如果content-encoding
標頭存在且內容類型不是下列其中一項,則服務 Base64 會編碼內文:
-
text/*
-
application/json
-
application/xml
-
application/javascript
如果 content-encoding
標頭不存在,則 Base64 編碼取決於內容類型。對於上述內容類型,服務會照原樣傳送內文,無需 Base64 編碼。
事件結構格式
當您建立或更新類型 的目標群組時LAMBDA
,您可以指定 Lambda 函數接收的事件結構版本。可能的版本為 V1
和 V2
。
範例事件:V2
{
"version": "2.0",
"path": "/",
"method": "GET|POST|HEAD|...",
"headers": {
"header-key
": ["header-value
", ...],
...
},
"queryStringParameters": {
"key
": ["value
", ...]
},
"body": "request-body
",
"isBase64Encoded": true|false,
"requestContext": {
"serviceNetworkArn": "arn:aws:vpc-lattice:region
:123456789012
:servicenetwork/sn-0bf3f2882e9cc805a
",
"serviceArn": "arn:aws:vpc-lattice:region
:123456789012
:service/svc-0a40eebed65f8d69c
",
"targetGroupArn": "arn:aws:vpc-lattice:region
:123456789012
:targetgroup/tg-6d0ecf831eec9f09
",
"identity": {
"sourceVpcArn": "arn:aws:ec2:region
:123456789012
:vpc/vpc-0b8276c84697e7339
",
"type": "AWS_IAM",
"principal": "arn:aws:iam::123456789012
:assumed-role/my-role
/my-session
",
"principalOrgID": "o-50dc6c495c0c9188
",
"sessionName": "i-0c7de02a688bde9f7
",
"x509IssuerOu": "string
",
"x509SanDns": "string
",
"x509SanNameCn": "string
",
"x509SanUri": "string
",
"x509SubjectCn": "string
"
},
"region": "region
",
"timeEpoch": "1690497599177430
"
}
}
body
請求的本文。只有在通訊協定為 HTTP、 HTTPS或 g 時才會顯示RPC。
headers
請求的HTTP標頭。只有在通訊協定為 HTTP、 HTTPS或 g 時才會顯示RPC。
identity
-
身分資訊。以下是可能的欄位。
principal
– 已驗證的委託人。只有在 AWS 身分驗證成功時才會顯示。principalOrgID
– 已驗證主體的組織 ID。只有在 AWS 身分驗證成功時才會顯示。sessionName
– 已驗證工作階段的名稱。只有在 AWS 身分驗證成功時才會顯示。sourceVpcArn
– 請求產生ARNVPC位置的 。只有在VPC可以識別來源時才會顯示。type
– 如果使用身分驗證政策且 AWS 身分驗證成功AWS_IAM
,則值為 。
如果使用 Roles Anywhere 登入資料且身分驗證成功,則下列是可能的欄位。
x509IssuerOu
– 發行者 (OU)。x509SanDns
– 主體替代名稱 (DNS)。x509SanNameCn
– 發行者替代名稱 (名稱/CN)。x509SanUri
– 主體替代名稱 (URI)。x509SubjectCn
– 主旨名稱 (CN)。
isBase64Encoded
指出內文是否進行 base64 編碼。只有在通訊協定為 HTTP、 或 g HTTPSRPC 且請求內文尚未是字串時才會顯示。
method
請求HTTP的方法。只有在通訊協定為 HTTP、 HTTPS或 g 時才會顯示RPC。
path
請求的路徑。只有在通訊協定為 HTTP、 HTTPS或 g 時才會顯示RPC。
queryStringParameters
HTTP 查詢字串參數。只有在通訊協定為 HTTP、 HTTPS或 g 時才會顯示RPC。
serviceArn
接收請求的服務ARN的 。
serviceNetworkArn
交付請求的服務網路ARN的 。
targetGroupArn
接收請求的目標群組ARN的 。
timeEpoch
時間,以微秒為單位。
範例事件:V1
{
"raw_path": "/path/to/resource
",
"method": "GET|POST|HEAD|...",
"headers": {"header-key
": "header-value
", ... },
"query_string_parameters": {"key
": "value
", ...},
"body": "request-body
",
"is_base64_encoded": true|false
}
回應 VPC Lattice 服務
來自 Lambda 函數的回應必須包含 Base64 編碼狀態、狀態碼、狀態描述和標頭。您可以省略內文。
若要在回應的內文中包含二進位內容,您必須將內容以 Base64 編碼,並將 isBase64Encoded
設定為 true
。服務會解碼內容以擷取二進位內容,並將其傳送至HTTP回應內文中的用戶端。
VPC Lattice 服務不會遵守 hop-by-hop標頭,例如 Connection
或 Transfer-Encoding
。您可以省略 Content-Length
標頭,因為服務會在傳送回應給用戶端之前先進行運算。
以下是 Lambda 函數的範例回應:
{ "isBase64Encoded":
false
, "statusCode":200
, "statusDescription": "200 OK
", "headers": { "Set-cookie": "cookies
", "Content-Type": "application/json" }, "body": "Hello from Lambda (optional)" }
多值標頭
VPC Lattice 支援來自用戶端的請求或來自 Lambda 函數的回應,其中包含具有多個值的標頭,或多次包含相同的標頭。 VPCLattice 會將所有值傳遞至目標。
在下列範例中,有兩個標題命名為 header1 使用不同的值。
header1 = value1
header1 = value2
使用 V2 事件結構,VPCLattice 會傳送清單中的值。例如:
"header1": ["value1", "value2"]
使用 V1 事件結構時,VPCLattice 會將值合併為單一字串。例如:
"header1": "value1, value2"
多值查詢字串參數
VPC Lattice 支援具有相同索引鍵多個值的查詢參數。
在下列範例中,有兩個名為 的參數 QS1 使用不同的值。
http://www.example.com?&QS1=value1&QS1=value2
使用 V2 事件結構,VPCLattice 會傳送清單中的值。例如:
"QS1": ["value1", "value2"]
對於 V1 事件結構,VPCLattice 會使用傳遞的最後一個值。例如:
"QS1": "value2"
取消註冊 Lambda 函數
如果您不再需要將流量傳送到您的 Lambda 函數,則可以將它取消註冊。取消註冊 Lambda 函數之後,傳輸中請求會失敗,並出現 HTTP 5XX 錯誤。
若要取代 Lambda 函數,建議您建立新的目標群組、向新目標群組註冊新函數,並更新接聽程式規則以使用新的目標群組,而非現有的目標群組。
使用主控台取消註冊 Lambda 函數
在 開啟 Amazon VPC主控台https://console.aws.amazon.com/vpc/
。 -
在導覽窗格的 VPC Lattice 下,選擇目標群組。
-
選擇目標群組的名稱,以開啟其詳細資訊頁面。
-
在 Targets (目標) 索引標籤上,選擇 Deregister (取消註冊)。
-
出現確認提示時,輸入
confirm
,然後選擇取消註冊。
使用 取消註冊 Lambda 函數 AWS CLI
使用 deregister-targets 命令。