本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Lambda 函数作为 VPC Lattice 中的目标
您可以将 Lambda 函数注册为 VPC Lattice 目标组的目标,并配置侦听器规则,将请求转发到 Lambda 函数的目标组。当服务将请求转发到以 Lambda 函数为目标的目标组时,则会调用 Lambda 函数,并以 JSON 格式将请求内容传递给 Lambda 函数。有关更多信息,请参阅AWS Lambda 开发人员指南中的AWS Lambda 与 Amazon VPC Lattice 搭配使用。
限制
-
Lambda 函数和目标组必须位于同一账户中,且位于同一区域中。
-
您可以发送到 Lambda 函数的请求正文最大大小为 6MB。
-
Lambda 函数可以发送的响应 JSON 最大大小为 6MB。
-
协议必须是 HTTP 或 HTTPS。
准备 Lambda 函数
如果您将 Lambda 函数与 VPC Lattice 服务结合使用,则以下建议适用。
调用 Lambda 函数的权限
当您创建目标组并使用 AWS Management Console 或注册 Lambda 函数时, AWS CLI VPC Lattice 会代表您向您的 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 中包含该别名。有关更多信息,请参阅开发人员指南中的 Lambda 函数版本和为 Lambda 函数创建别名。AWS Lambda
为 Lambda 函数创建目标组
创建一个要在请求路由中使用的目标组。如果请求内容与侦听器规则匹配,并执行将其转发到此目标组的操作,则 VPC Lattice 服务将调用注册的 Lambda 函数。
要使用控制台创建目标组并注册 Lambda 函数
通过 https://console.aws.amazon.com/vpc/
打开 Amazon VPC 控制台。 -
在导航窗格中的 VPC Lattice 下,选择目标组。
-
选择创建目标组。
-
对于选择目标类型,选择 Lambda 函数。
-
对于目标组名称,输入目标组的名称。
-
对于 Lambda 事件结构版本,请选择一个版本。有关更多信息,请参阅 从 VPC Lattice 服务接收事件。
-
(可选)要添加标签,请展开标签,选择添加新标签,然后输入标签键和标签值。
-
选择下一步。
-
对于 Lambda function (Lambda 函数),请执行下列操作之一:
-
选择现有 Lambda 函数。
-
创建新的 Lambda 函数并选中。
-
稍后注册 Lambda 函数。
-
-
选择创建目标组。
使用 AWS CLI创建目标组并注册 Lambda 函数
从 VPC Lattice 服务接收事件
VPC Lattice 服务支持通过 HTTP 和 HTTPS 调用 Lambda 请求。该服务以 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 或 gRPC 时出现。
headers
请求的 HTTP 标头。仅在协议为 HTTP、HTTPS 或 gRPC 时出现。
identity
-
身份信息。以下是可能的字段。
principal
:经过验证的主体。仅当 AWS 身份验证成功时才会出现。principalOrgID
:经过验证主体的组织 ID。仅当 AWS 身份验证成功时才会出现。sessionName
:经过验证会话的名称。仅当 AWS 身份验证成功时才会出现。sourceVpcArn
:发出请求的 VPC 的 ARN。仅在可以识别源 VPC 时才会出现。type
—AWS_IAM
如果使用了身份验证策略并且 AWS 身份验证成功,则该值为。
如果使用 Roles Anywhere 凭证且验证成功,则会显示以下字段。
x509IssuerOu
:发布者(OU)。x509SanDns
:使用者备用名称(DNS)。x509SanNameCn
:发布者备用名称(名称/CN)。x509SanUri
:使用者备用名称(URI)。x509SubjectCn
:使用者名称(CN)。
isBase64Encoded
表示正文是否经过 base64 编码。仅当协议为 HTTP、HTTPS 或 gRPC,且请求正文还不是字符串时才会出现。
method
请求中的 HTTP 方法。仅在协议为 HTTP、HTTPS 或 gRPC 时出现。
path
请求的路径。仅在协议为 HTTP、HTTPS 或 gRPC 时出现。
queryStringParameters
HTTP 查询字符串参数。仅在协议为 HTTP、HTTPS 或 gRPC 时出现。
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 函数的响应,其中包含具有多个值的标头或多次包含相同的标头。VPC Lattice 还支持同一键具有多个值的查询参数。
对于请求标头,如果多个参数名称相同,VPC Lattice 会将两个值传递给目标。以下是一个示例,其中 header
1
是两个单独标头的名称:
header1 = foo header1 = bar
然后,VPC Lattice 将两个值发送给目标:
"header1": ["foo", "bar"]
对于查询字符串,如果多个参数名称相同,则以最后一个值为准。这意味着,如果参数具有相同的键名,则 _not_ coalesced
将成为一个值。
以下是一个示例,其中 foo
和 bar
是同名参数的值,QS1
:
http://www.example.com?&QS1=foo&QS1=bar
然后,VPC Lattice 将最后一个值发送给目标:
"QS1": "bar"
注销 Lambda 函数
如果您不再需要向您的 Lambda 函数发送流量,则可以将其取消注册。在取消注册 Lambda 函数后,进行中的请求会失败,并显示 HTTP 5XX 错误。
要替换 Lambda 函数,建议您创建新的目标组,向新目标组注册新函数,并将侦听器规则更新为使用新目标组而不是现有目标组。
要使用新控制台取消注销 Lambda 函数
通过 https://console.aws.amazon.com/vpc/
打开 Amazon VPC 控制台。 -
在导航窗格中的 VPC Lattice 下,选择目标组。
-
选择目标组的名称以打开其详细信息页面。
-
在 Targets (目标) 选项卡上,选择 Deregister (取消注册)。
-
当系统提示确认时,输入
confirm
,然后选择取消注册。
要取消注册 Lambda 函数,请使用 AWS CLI
使用 deregister-targets 命令。