我需要传递调用 WSO2 api 网关的查询字符串参数,该网关调用 AWS lambda 函数。
我在 AWS 的 NodeJS 中创建了以下 lambda 函数:
exports.handler = async (event, context) => {
return {
statusCode: 200,
body: JSON.stringify({
incoming:JSON.parse(event),
date: new Date(),
context: JSON.parse(context)
}),
};
};
然后我:
getTest
配置了资源 GET
parameter
资源添加了查询参数 GET
当我在这里调用我的 API 时,结果是:
curl -X GET "https://localhost:8243/lambda/1/getTest?parameter=myValue" -H "accept: */*" -H "Authorization: Basic YWRtaW46YWRtaW4="
{
"statusCode":200,
"body":"{\"incoming\":{},\"date\":\"2021-06-22T08:09:36.027Z\",\"context\":{\"callbackWaitsForEmptyEventLoop\":true,\"functionVersion\":\"$LATEST\",\"functionName\":\"wso2get\",\"memoryLimitInMB\":\"128\",\"logGroupName\":\"/aws/lambda/wso2get\",\"logStreamName\":\"2021/06/22/[$LATEST]90a7f95746c644a7a5cc61ec8648228e\",\"invokedFunctionArn\":\"arn:aws:lambda:eu-west-1:659641230079:function:wso2get\",\"awsRequestId\":\"4e271442-6209-47d9-ab0c-277c6535b8bd\"}}"
}
如何在 lambda 函数中检索值为 parameter
的 myValue
?
答案 0 :(得分:0)
你必须用这两种参数定义你的 OpenAPI 定义:
我将使用 wso2apim 2.6.0 和 OpenAPI 2.0 定义...
转到 /publisher 并使用“设计新的 REST API”“添加新的 API”
添加名称、竞赛(例如 /mylambda )等。 在“API 定义”中包含一个 URL 模式,如 "/{id}/getTest" 并检查 GET 方法。自动添加名称为“id”的“路径参数”。
然后添加一个名为“parameter”的新参数
保存并在实现中,设置“Endpoints”设置URL为:
"https://localhost:8243/lambda"
仅此而已。
答案 1 :(得分:0)
这是在最新的包 [1] 中修复的。您可以将路径/查询/标头参数、http 方法、路径以及负载发送到 Lambda。确保在资源创建时定义参数名称,如 [2] 中的 8.b.iii。以下是 Lambda 接收到的事件对象的格式。
{
"headers": {},
"pathParameters": {},
"queryStringParameters": {},
"body": {},
"httpMethod": "",
"path": ""
}
请注意,要启用参数映射,您必须将以下配置放入 deployment.toml
文件中。
[apim.lambda_mediator_config]
pass_request_params = true
[1] https://github.com/wso2-support/carbon-apimgt/pull/3599
[2] https://apim.docs.wso2.com/en/latest/design/create-api/create-rest-api/create-a-rest-api/