首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从其他lambda调用lambda

从其他lambda调用lambda
EN

Stack Overflow用户
提问于 2021-04-02 19:42:25
回答 2查看 196关注 0票数 0

在我们的系统中,我们有一个Lambdas流,根据它们得到的结果调用其他Lambdas。此流程可能会在未来重构以使用AWS步骤功能,但可能会在接下来的一两个月内保持不变。

最近引入了一个新的lambda,我们遇到了一个问题:

如果我们在本地测试Lambda函数1,它会正确地调用AWS上的函数2。

但是,在部署lambda并运行相同的测试后,函数不会被调用(在监控图表中没有调用)

下面是函数1的代码示例:

代码语言:javascript
复制
'use strict';
const AWS = require("aws-sdk");
const lambda = new AWS.Lambda({ region: "eu-west-1" });

const myHandler = async (event, _, callback) =>  {
  console.log(event)

  return doSomething()
            .then(something)
            .then(somethingElse)
            .catch(handleError)

 
function doSomething() {
     return fetch('someurl.com');
}


function something(r) {
   if(r.status === 204) {
      let lambdaRes = callLambda( "LambdaB",  { foo: bar } );
      console.log(lambdaRes)
   }
   return r
}


somethingElse(r) {
   if(r.status === 500) {
       throw new Error(`bar`);
   }
   return r.json()
}

async function callLambda(fnName, payload ) {
    let params = {
      FunctionName: fnName,
      InvocationType: 'Event',
      Payload: JSON.stringify(payload)
    }
    return await lambda.invoke(params);
}

function handleError(e) {
    if(e.message === 'bar') {
       let lambdaRes = callLambda( "LambdaC",  { bar: 'foo' } );
       console.log(lambdaRes)
    }
    return callback(null, { message: `Completed with error`});
}


exports.handler = myHandler;

我们试图检查问题是否由授权引起,并通过向function 1提供所有可能的授权进行测试,但没有结果。

有什么建议吗?

更新:

这两个函数使用相同的

VPC: vpc-hashnumberVpc,

子网:子网-hashnumber3 1、子网-hashnumber3 2、子网-hashnumber3 3

安全组: sg-hashnumberSg

EN

回答 2

Stack Overflow用户

发布于 2021-04-02 21:18:21

当第一个Lambda函数调用lambda.invoke()时,它无法以某种方式连接到VPC内的另一个Lambda函数。此时,没有其他Lambda函数的运行实例,只有它的定义存在。正在发生的事情是lambda.invoke()调用公共互联网上的AWS API,请求AWS创建第二个函数的新调用。

在VPC内运行的Lambda函数不会获得分配给它们的公有IP地址,即使它们在公有子网中也是如此。让VPC内的Lambda函数访问互联网的唯一方法是将Lambda函数放置在具有到NAT Gateway的路由的私有子网中。

或者,您也可以配置AWS Lambda VPC Endpoint,使您的VPC内的资源能够访问AWS Lambda API,而无需通过互联网。

因此,为了让在VPC内运行的Lambda函数进行AWS API调用以调用其他Lambda函数,您可以选择将NAT网关添加到VPC,或将AWS Lambda VPC端点添加到VPC。

票数 1
EN

Stack Overflow用户

发布于 2021-04-02 19:58:18

因此,如果函数1能够在本地调用函数2,我认为问题出在网络/AWS设置上,以下是您可以做的几件事:

  1. 在每个级别设置日志/打印语句,这样您就可以确定返回错误的行。
  2. 函数是否超时?如果是,请检查超时时间和为函数分配的安全内存,如果函数是内存密集型的,则无法完成。
  3. 最后,请检查您的network/Subnets,如果您已将配置为在多个子网上运行,请选择其中一个并尝试,查看 VPC ,可能该lambda未连接到任何vpc,或者检查连接的vpc是否能够连接到另一个vpc,同时查看

<代码>G215

我的大多数lambda问题都通过这个解决了,一切都很好。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66918792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档