当前位置: 首页 > 知识库问答 >
问题:

从VPC内部的另一个Lambda函数调用Lambda函数

宋宏毅
2023-03-14

在过去的几个小时里,我一直在调试、配置和命名它,我似乎不明白为什么会发生这种情况。

我正在尝试调用一个 lambda 函数,该函数只是从 ec2 中检索基本信息。当我在aws控制台中测试此lambda函数时,它似乎工作正常。但是,使用以下代码在另一个lambda中调用它;

    BasicAWSCredentials awsCreds = new BasicAWSCredentials("key1" , "key2");
    AWSLambdaClientBuilder builder = AWSLambdaClientBuilder.standard()
            .withRegion("eu-west-1")
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds));
    AWSLambda client = builder.build();

    InvokeRequest req = new InvokeRequest()
            .withFunctionName("GetWhateverIneed");
    InvokeResult result = client.invoke(req);

它只是超时了。没有任何反应…两个Lambda都连接到VPC和所有子网

我认为是我的新VPC导致了这个问题。我的VPC包括:

1个VPC。
-2x个子网(1x专用,ipv4 10.0.0.0/17;1x公用,ipv4.10.0.128.0/17)
-1x IGW连接到专用子网
-1x NAT网关连接到公共子网。
-2xendpoint(一个用于Ec2,一个用于SecretsManager)

我还配置了两个路由表,一个用于“公共”子网:“路由”-

一个用于“专用”子网:“路由”-

这是我第一次使用VPC,所以我可能错过了一些东西。

共有1个答案

吕飞翼
2023-03-14

如果您的 Lambda 函数已连接到 VPC,则它需要能够通过您的 VPC 与 AWS API 进行通信。Lambda 不会通过网络与其他 Lambda 通信,它们会通过 AWS API 或 API 网关发起请求,从而将请求传递给 Lambda 函数。

如果您需要VPC连接的Lambda来启动另一个Lambda,则需要能够通过互联网访问AWS API或API网关。或者,您可以通过向API网关服务添加VPCendpoint,将其全部保留在专用网络上。

在我之前的文章《https://stackoverflow.com/a/43969112/6427978》中描述了我在类似情况下遵循的模式

 类似资料:
  • 我需要制作两个lambda函数,一个用参数调用另一个,被调用的函数将参数打印出来。我很难让它工作:第一个函数: 请告知我应该在被调用函数中输入什么代码才能接收参数“hello Jenny”?非常感谢。

  • 问题内容: 我有以下函数,可用于从我的代码中调用Lambda函数。 但是,当我尝试在Lambda函数中使用它时,出现以下错误: 如何从Lambda函数中调用Lambda函数? 我的功能: 问题答案: 使用每个Lambda中都提供的,从另一个Lambda函数中调用Lambda函数非常简单。 我建议首先从 简单的 事情开始。 这是lambda内调用的“ Hello World”: 使用包含一个参数的调

  • 甚至,API网关资源策略是这样写的: 和VPCendpoint策略进行完全访问。

  • 问题内容: 我有2个Lambda函数-一个产生报价,另一个将报价变成订单。我希望Order lambda函数调用Quote函数来重新生成报价,而不是仅仅从不受信任的客户端接收报价。 我看过我能想到的任何地方-但看不到如何链接或调用函数…肯定存在! 问题答案: 我找到了使用的方法。 您可以在以下位置找到该文档:http : //docs.aws.amazon.com/AWSJavaScriptSDK

  • 我所做的: 我在这些帐户之间创建了VPC对等连接 还连接到每个VPC的Internet网关 路由表也已配置(允许来自两侧的流量) 案例1: “ErrorMessage”:“调用Invoke操作时发生错误(AccessDeniedException):User:arn:aws:sts::Account-a:Assumed-Role/Role-for-VPC-peering-test/lambda1_

  • 我在VPC中使用AWS Chalice托管了一个Lambda函数,因为我希望它访问一个无服务器的Aurora DB实例。现在,我还希望这个函数将send_message()转换为SQS。