【问题标题】:How to invoke lambda version based on versions provided as input如何根据作为输入提供的版本调用 lambda 版本
【发布时间】:2023-01-23 21:42:22
【问题描述】:
我有一个用例,其中客户端发送具有以下有效负载的请求:
payload = {
identifier: arn:aws:lambda:{region}:{account}:function:{function-name}:{version}
data = ""
}
我想根据标识符调用 lambda。有几点考虑:
- 有效负载中的数据可以从 Kbs 到几 MB
- 需要调用的Lambda可以增加
我正在考虑拥有一个 api 网关,它接收来自客户端的请求,然后连接到父 lambda A,后者根据客户端提供的标识符调用其他子 lambda B 和 C。但是我不确定子 lambda 是否可以处理几 Mb 的数据。这也是按以下方式链接 lambda 的好方法吗
我正在研究如何异步调用 lambda,但我找不到任何允许基于版本调用 lambda 的地方。在这方面的任何建议都会有所帮助,谢谢。
【问题讨论】:
标签:
amazon-web-services
aws-lambda
【解决方案1】:
您可以根据版本从 Lambda 调用另一个 Lambda。
但是,异步调用的问题是负载大小限制小于您需要的大小。根据the documentation,异步调用的调用负载大小限制为 256 KB,同步调用为 6 MB。
我不知道你喜欢哪种语言,但是从另一个基于 Python 的 boto3 版本的 Lambda 调用 Lambda 看起来像这样:
import json
from boto3 import client as boto3_client
client = boto3_client('lambda')
def lambda_handler(event, context):
# ...
client.invoke(
# your lambda identifier with version
FunctionName=your_function_name,
# to invoke a function asynchronously, set InvocationType to 'Event'
InvocationType='Event',
Payload=json.dumps(your_payload)
)
# ...
正如the documentation所述,“FunctionName”参数是
Lambda 函数的名称,版本, 或别名。 […] 你可以附加一个
任何格式的版本号或别名。长度约束
仅适用于完整的 ARN。如果仅指定函数名称,
它的长度限制为 64 个字符。
invoke 函数接受“FunctionName”参数的以下名称格式:
Function name – my-function (name-only), my-function:v1 (with alias).
Function ARN – arn:aws:lambda:us-west-2:123456789012:function:my-function.
Partial ARN – 123456789012:function:my-function.