将查询字符串参数从 WSO2 api 网关传递到 AWS lambda

时间:2021-06-22 08:12:05

标签: aws-lambda wso2 wso2-am

我需要传递调用 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)
            
        }),
    };
};

然后我:

  • 在 wso2 发布者门户中创建了一个新的 API
  • 添加了一个 lambda 类型的端点
  • 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 函数中检索值为 parametermyValue

2 个答案:

答案 0 :(得分:0)

你必须用这两种参数定义你的 OpenAPI 定义:

  • 路径参数
  • 查询参数

我将使用 wso2apim 2.6.0 和 OpenAPI 2.0 定义...

转到 /publisher 并使用“设计新的 REST API”“添加新的 API”

添加名称、竞赛(例如 /mylambda )等。 在“API 定义”中包含一个 URL 模式,如 "/{id}/getTest" 并检查 GET 方法。自动添加名称为“id”的“路径参数”。

Set a path parameter

然后添加一个名为“parameter”的新参数

Set the query 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/