赋予调用函数的所有权限。我的Lambda函数无法调用另一个函数。我每次因30 seconds timeout
问题而超时。看起来lambda无法获得另一个lambda函数
我的lambda属于同一地区,同一政策,同一安全组。两个lambda中的VPC也相同。现在唯一不同的是lambda函数
以下是角色权利
1)创建了AWSLambdaExecute
和AWSLambdaBasicExecutionRole
2)创建一个要调用的lambda函数 的 Lambda_TEST
exports.handler = function(event, context) {
console.log('Lambda TEST Received event:', JSON.stringify(event, null, 2));
context.succeed(event);
};
3)这是另一个调用它的函数。
var AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
var lambda = new AWS.Lambda();
exports.handler = function(event, context) {
var params = {
FunctionName: 'Lambda_TEST', // the lambda function we are going to invoke
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: '{ "name" : "Arpit" }'
};
lambda.invoke(params, function(err, data) {
if (err) {
context.fail(err);
} else {
context.succeed('Lambda_TEST said '+ data.Payload);
}
})
};
参考文献来自:This link
答案 0 :(得分:56)
我将通过 executor 表示执行第二个lambda
的{{1}}。
由于执行者被“锁定”在lambda
后面 - 所有互联网通讯都被阻止。
这导致任何VPC
次呼叫超时,因为它们请求数据包永远不会到达目的地。
这就是http(s)
所做的所有操作都会导致超时的原因。
如果执行者 不在aws-sdk
中 - 只需将其删除,VPC
也可以正常工作没有lambda
。
当VPC
调用lambda
内的资源时,需要在VPC
中找到lambda
。
从上面的说法可以看出,位于VPC
内的任何资源都无法访问互联网 - 这是不正确的 - 只需要进行少量配置。
VPC
。VPC
连接到互联网的虚拟路由器。VPC
(此IP是您elastic IP
的本地IP) - 此组件将通信传输到VPC
。创建2 路由表 - 一个名为 public ,第二个私有。
目的地:0.0.0.0/0
目标:
的IDinternet-gateway
目的地:0.0.0.0/0
目标:
的IDinternet-gateway
私有子网是其路由表中的子网 - 没有路由到nat-gateway
。
public 子网是其路由表中的子网 - 存在到internet-gateway
的路由
我们创造了这样的东西:
这允许私有子网中的资源调用互联网。 您可以找到更多文档here。
答案 1 :(得分:4)
我遇到了同样的问题,其中被“固定”到VPC的Lambdas无法调用其他Lambda。我一直在处理这个问题,不使用NAT,重构我的解决方案的结构。
假设我有几个lambdas,A,B,C,D,......我希望这些Lambdas每个都有对RDS数据库的查询访问权限。为了拥有这个数据库访问权限,我需要将lambdas放在与数据库相同的VPC中。但是我也喜欢A,B,C,D ......中的各种各样的lambdas互相调用。所以我遇到了Arpit描述的问题。
我一直在处理这个问题,将每个Lambda分成两个Lambda:一个专注于进程流(即调用其他lambda并被另一个lambda调用);另一个侧重于做“真正的”工作,比如查询数据库。所以我现在有函数A_flow,B_flow,C_flow,D_flow,...;和函数A_worker,B_worker,C_worker,D_worker,......各种流lambda不会“固定”到特定的VPC,因此可以调用其他lambdas。各种工作伙伴Lambdas与数据库位于同一个VPC中,可以查询数据库。
每个流lambda“委托”与DB交互的工作到相应的worker lambda。它通过执行worker lambda的同步调用来执行此委派。工人lambdas不会调用任何其他lambda。 (就流程图而言,worker lambdas是终端节点。)在我自己的系统中,其他流lambdas对流Lambdas的调用通常是异步的;但我想如果需要它们可以同步。
尽管我将此方法设计为一种解决方法,但它具有将高级功能设计干净地分离为(a)流程流程和(b)执行更详细工作(包括与DB资源交互)的良好功能。 p>