使用带有 Headers 和路径的 NodeJS 从 Lambda 调用 AWS Lambda
Call AWS Lambda from a Lambda using NodeJS with Headers and Path
我想要一个名为 GoalsFeed 的 lambda 使用 AWS.Lambda 调用另一个名为 Goals 的 lambda。这似乎可行,但有两点除外:
我不确定如何将 header 传递到目标服务。
FunctionName 是 "myapp-goals-get"(又名目标),但我想转到该服务的特定路径 - 下面显示的三个路径都是有效的,但我想指定“../owner/123”路径。
下面是我对此的第一个破解,有人可以帮我修改它以将 "tenantid" 作为 header 传递并确保当 "myapp-goals-get" 被调用时,它将自己视为从路径调用 "../owner/123" ?
// fetch back all goals by userid
var lambda = new AWS.Lambda({
region: 'us-east-1'
});
var payload = {};
payload[ "userId" ] = "123";
payload[ "tenantid" ] = "1";
const params = {
FunctionName: 'myapp-goals-get',
InvocationType: "RequestResponse",
Payload: JSON.stringify(payload)
};
lambda.invoke( params, function(error, data) {
console.log( "data: %s", JSON.stringify( data ) );
if( error ) {
context.done( 'error', error );
}
else if( data.Payload )
{
context.succeed( data.Payload )
}
});
处理此 use-case 的正确方法是使用 API-Gateway + Lambda 使用代理集成设置 REST API(将所有 HTTP Headers/body/etc 转发到您的 lambda功能)
然后您可以在同一个请求中链接或再次调用您的 API。
我的解决方案是简单地重置 pathParameters 并将事件传递给子 lambda。
event.pathParameters = { };
event.pathParameters.id = 123;
const tdParms = {
FunctionName : 'mylambda',
Payload: JSON.stringify( event )
};
lambda.invoke( tdParms, function( error, data ) {
...
}
我想要一个名为 GoalsFeed 的 lambda 使用 AWS.Lambda 调用另一个名为 Goals 的 lambda。这似乎可行,但有两点除外:
我不确定如何将 header 传递到目标服务。
FunctionName 是 "myapp-goals-get"(又名目标),但我想转到该服务的特定路径 - 下面显示的三个路径都是有效的,但我想指定“../owner/123”路径。
下面是我对此的第一个破解,有人可以帮我修改它以将 "tenantid" 作为 header 传递并确保当 "myapp-goals-get" 被调用时,它将自己视为从路径调用 "../owner/123" ?
// fetch back all goals by userid
var lambda = new AWS.Lambda({
region: 'us-east-1'
});
var payload = {};
payload[ "userId" ] = "123";
payload[ "tenantid" ] = "1";
const params = {
FunctionName: 'myapp-goals-get',
InvocationType: "RequestResponse",
Payload: JSON.stringify(payload)
};
lambda.invoke( params, function(error, data) {
console.log( "data: %s", JSON.stringify( data ) );
if( error ) {
context.done( 'error', error );
}
else if( data.Payload )
{
context.succeed( data.Payload )
}
});
处理此 use-case 的正确方法是使用 API-Gateway + Lambda 使用代理集成设置 REST API(将所有 HTTP Headers/body/etc 转发到您的 lambda功能)
然后您可以在同一个请求中链接或再次调用您的 API。
我的解决方案是简单地重置 pathParameters 并将事件传递给子 lambda。
event.pathParameters = { };
event.pathParameters.id = 123;
const tdParms = {
FunctionName : 'mylambda',
Payload: JSON.stringify( event )
};
lambda.invoke( tdParms, function( error, data ) {
...
}