我可以使用 lambda 调用将路径参数传递给另一个 lambda 函数吗?

Can I pass path parameters using lambda invoke to another lambda function?

我正在尝试使用 lambda 调用调用另一个 lambda 函数并从中获取响应。问题是其他 lambda 函数需要将 id 作为路径参数(或查询字符串)发送。但是我在 lambda 中没有看到为此调用的选项。如果我在有效载荷中传递 id,另一个函数将在事件主体中接收它,而不是作为路径参数。有现成的解决方案吗?

这是 lambda 函数中的一个函数,它调用另一个接收数据作为查询字符串参数的 lambda 函数

function getWisIqLink(data) {
  const payload = {
    queryStringParameters: {
      userId: data.userId,
      eventId: data.eventId,
    }
  };
  const param = {
    FunctionName: 'consult-rest-api-dev-WisiqClassGet',
    InvocationType: "RequestResponse",
    Payload: JSON.stringify(payload)
  }

  return new Promise((resolve, reject) => {
  // console.log(`Starting promiseInvoke InvokeAsync with ES6 promise wrapper - ${functionName}`);
   lambda.invoke(param,(err, data) => {
      if (err) {
        reject(err);
      } else {
        resolve(JSON.parse(data));
      }
    }
  );
});
}

这是一个 lambda 函数,它接收数据作为查询字符串(不是接收数据作为路径参数的函数)

module.exports.get = async function (event, context, callback) {

  const data = {
    userId: event.queryStringParameters.userId,
    eventId: event.queryStringParameters.eventId,

  };

您可以将 Lambda 作为 ApiGatewayRequest 调用。 ApiGatewayRequest 有 body 和 header。您可以在header 中传递参数。以下是代码。

 public ApiGatewayProxyResponse invokeLambda(LambdaService lambda, Object data, Map<String, String> headers) 
{
     ApiGatewayRequest request = new ApiGatewayRequest();
     request.setBody(data);
     request.setHeaders(headers);
     ApiGatewayProxyResponse response = lambda.execute(request);
     return response.getBody();
}

API 网关代理集成对 Lambda 函数的输入如下。

{
"resource": "Resource path",
"path": "Path parameter",
"httpMethod": "Incoming request's method name"
"headers": {Incoming request headers}
"queryStringParameters": {query string parameters }
"pathParameters":  {path parameters}
"stageVariables": {Applicable stage variables}
"requestContext": {Request context, including authorizer-returned key-value pairs}
"body": "A JSON string of the request payload."
"isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"}

此架构在 here 中定义。

您的要求是将路径参数从一个 lambda 函数(比方说 Lambda-A)传递到另一个 lambda 函数(比方说 Lambda-B)。这意味着您的 Lambda-A 函数必须充当 API 网关,将上述格式的请求发送到 Lambda-B。

因此,您的 Lambda-A 函数应该创建 "payload" 对象(请参阅您所附的代码示例),如下所示。在您的 Lambda-B 中,您可以使用 "event.pathParameters" 访问路径参数。

const payload = {
  pathParameters: data.consulteeId
}