Lambda 會在 VPC Lattice 中做為目標 - Amazon VPC Lattice

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

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-id vpc-lattice \ --principal vpc-lattice.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn target-group-arn
Lambda 函數版本控制

您可以為每個目標群組註冊一個 Lambda 函數。為了確保您可以變更 Lambda 函數,且 VPC Lattice 服務一律叫用 Lambda 函數的目前版本,請在向 VPC Lattice 服務註冊 Lambda 函數ARN時建立函數別名,並將別名包含在函數中。如需詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的 Lambda 函數版本建立 Lambda 函數的別名

為 Lambda 函數建立目標群組

建立目標群組以用於請求路由。如果請求內容符合接聽程式規則與 動作,以將其轉送到此目標群組,VPCLattice 服務會叫用已註冊的 Lambda 函數。

使用主控台建立目標群組並註冊 Lambda 函數
  1. 在 開啟 Amazon VPC主控台https://console.aws.amazon.com/vpc/

  2. 在導覽窗格的 VPC Lattice 下,選擇目標群組

  3. 選擇 Create target group (建立目標群組)

  4. 選取目標類型中,選取 Lambda 函數

  5. 針對 Target group name (目標群組名稱),輸入目標群組的名稱。

  6. 針對 Lambda 事件結構版本,選擇版本。如需詳細資訊,請參閱從 VPC Lattice 服務接收事件

  7. (選用) 若要新增標籤,請展開標籤,選擇新增標籤,然後輸入標籤索引鍵和標籤值。

  8. 選擇 Next (下一步)

  9. 對於 Lambda function (Lambda 函數),請執行以下其中一項:

    • 選取現有的 Lambda 函數。

    • 建立新的 Lambda 函數並選取它。

    • 稍後註冊 Lambda 函數。

  10. 選擇 Create target group (建立目標群組)

使用 AWS CLI建立目標群組和註冊 Lambda 函數

使用 create-target-groupregister-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 函數接收的事件結構版本。可能的版本為 V1V2

範例事件: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標頭,例如 ConnectionTransfer-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 函數
  1. 在 開啟 Amazon VPC主控台https://console.aws.amazon.com/vpc/

  2. 在導覽窗格的 VPC Lattice 下,選擇目標群組

  3. 選擇目標群組的名稱,以開啟其詳細資訊頁面。

  4. Targets (目標) 索引標籤上,選擇 Deregister (取消註冊)

  5. 出現確認提示時,輸入 confirm,然後選擇取消註冊

使用 取消註冊 Lambda 函數 AWS CLI

使用 deregister-targets 命令。