Arp*_*nav 41 amazon-web-services amazon-iam aws-sdk aws-lambda
在赋予调用函数的所有权限之后.我的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);
};
Run Code Online (Sandbox Code Playgroud)
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);
}
})
};
Run Code Online (Sandbox Code Playgroud)
参考文献来自:此链接
joh*_*hni 65
我将表示执行人在lambda执行第二lambda.
由于执行者被"锁定" VPC- 所有互联网通信都被阻止.
这导致任何http(s)调用超时,因为它们请求数据包永远不会到达目的地.
这就是为什么所有操作都会aws-sdk导致超时.
如果执行不有是在VPC-只是把它出来,一个lambda可以工作也没有VPC.
当调用资源时,需要定位lambda在a VPC中.lambdaVPC
从上面可以看出,位于一个内部的任何资源VPC都无法访问互联网 - 这是不正确的 - 只需要进行少量配置.
VPC.VPC到Internet的虚拟路由器.elastic IP的(这个IP是您的本地IP VPC) - 该组件将管道通信到internet-gateway.创建2个路由表 -一个名为公众和第二私有.
目的地:0.0.0.0/0
目标:的ID
internet-gateway
目的地:0.0.0.0/0
目标:的ID
nat-gateway
一个私人子网是一个子网的路由表-有没有一个路线internet-gateway.
一个公共子网的是,在其路由表中的子网-有存在的路线来的internet-gateway
我们创建了这样的东西:
这就是允许私有子网中的资源调用互联网的原因.您可以在此处找到更多文档.
小智 9
我遇到了同样的问题,即“固定”到VPC的Lambda无法调用其他Lambda。通过重构解决方案的结构,我一直在不使用NAT的情况下解决此问题。
假设我有几个Lambda,A,B,C,D ...,我希望这些Lambda都可以对RDS数据库进行查询访问。为了具有此数据库访问权限,我需要将lambda放在与数据库相同的VPC中。但是我也希望A,B,C,D ...之间的各种lambda相互调用。因此,我遇到了Arpit描述的问题。
我一直在通过将每个Lambda分为两个Lambda来处理此问题:一个专注于流程(即,调用其他Lambda,并被另一个Lambda调用);另一个专注于完成“实际”工作,例如查询数据库。所以我现在有了函数A_flow,B_flow,C_flow,D_flow ...; 和函数A_worker,B_worker,C_worker,D_worker等...各种流lambda不会“固定”到特定的VPC,因此可以调用其他lambda。各种辅助Lambda与数据库位于同一VPC中,并且可以查询数据库。
每个流lambda将与DB交互的工作“委派”给相应的工作程序lambda。它通过对worker lambda进行同步调用来完成此委派。工人Lambda不会调用任何其他Lambda。(就流程流程图而言,工作Lambda是终端节点。)在我自己的系统中,其他流Lambda对流Lambda的调用通常是异步的;但我想如果需要的话,它们可以是同步的。
即使我将这种方法设计为一种变通方法,它也具有将高级功能设计清晰地分为(a)流程和(b)执行更详细的工作,包括与数据库资源交互的漂亮功能。
| 归档时间: |
|
| 查看次数: |
12663 次 |
| 最近记录: |