【问题标题】:Start AWS java Lambda function from another Lambda function asynchronously从另一个 Lambda 函数异步启动 AWS java Lambda 函数
【发布时间】:2018-01-28 16:51:44
【问题描述】:

我的目标是从另一个 Lambda 函数中启动一个 Lambda 函数。具体来说,我希望第二个函数开始,让第一个函数独立于第二个函数完成。第一个函数不需要返回任何响应。

我花了很多时间查看示例以及 AWS 文档。

我能够成功启动第二个功能,但无法使其独立于第一个功能运行。第一个函数总是等待第二个函数完成后再完成。

我使用这个代码:

AWSLambdaAsync lambda = AWSLambdaAsyncClientBuilder.standard().withRegion(Regions.EU_WEST_1).build();
    InvokeRequest req = new InvokeRequest().withFunctionName(functionName).withPayload(jsonStuff);
    // req.setInvocationType(InvocationType.Event);

    Future<InvokeResult> future_res = lambda.invokeAsync(req);

这不会启动第二个函数(无论是否设置调用类型)。

如果我包含此代码:

try {
        InvokeResult thisResult = future_res.get();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ExecutionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

然后第二个函数被触发,但第一个函数在继续之前等待第二个函数完成。

如何启动第二个功能而无需等待它完成。目前它会将第一个功能完成所需的时间延长 2 秒(第一个功能,没有启动第二个功能,需要 4 秒才能完成)。

【问题讨论】:

标签: java amazon-web-services asynchronous lambda


【解决方案1】:

您可以将消息发布到 Amazon SNS。当您去配置主题时,选择 AWS Lambda 并放入要触发的 lambda 的 ARN。

甚至还有Amazon How To for triggering Lambda from SNS

这就是我个人会做的事情:这里有更多的基础设施,但它甚至进一步区分了 Lambda A 和 Lambda B 的关注点(因为如果从现在起 6 个月后,您意识到 Lambda B 必须是传统的微服务?简单:只需重新配置 SNS 主题即可。Lambda A 不必知道)。

【讨论】:

  • 非常感谢。我试过了,但无法让它工作。我认为我的问题是我在调用发布时传递的消息的 json 格式(jsonStuff):snsClient.publish("arn:aws:sns:eu-west-1:xxxx...xxxx", jsonStuff); - 关于我在哪里可以看到示例(在 java 中)的任何提示?谢谢
  • 设法弄明白了。需要创建一个接收 SNS 事件作为输入类型的 lambda 函数。然后将 json 输入消息作为字符串传递(使用 Gson)进行转换。
猜你喜欢
  • 2020-03-04
  • 2017-07-12
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2018-01-13
  • 2021-09-23
相关资源
最近更新 更多