我可以使用 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
}
我正在尝试使用 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
}