【发布时间】:2018-02-21 07:32:02
【问题描述】:
我想从另一个 lambda 调用 JAVA 中的 aws lambda。我通过以下结果 "https://stackoverflow.com/questions/36483042/how-to-call-an-aws-java-lambda-function-from-another-aws-java-lambda-function-wh"
我实现了如下代码。
首先我创建一个 AWS lambda java 项目。我的代码如下所示
import com.amazonaws.services.lambda.AWSLambdaAsyncClientBuilder;
import com.amazonaws.services.lambda.invoke.LambdaInvokerFactory;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
FineGrainedService fg = LambdaInvokerFactory.builder()
.lambdaClient(
AWSLambdaAsyncClientBuilder.standard()
.build()
)
.build(FineGrainedService.class);
context.getLogger().log("Response back from FG" + fg.getClass());
String fgRespone = fg.callFineGrained("Call from Gateway");
context.getLogger().log("fgRespone: " + fgRespone);
// TODO: implement your handler
return "Hello from Gateway Lambda!";
}
}
根据上面的链接创建了一个界面
import com.amazonaws.services.lambda.invoke.LambdaFunction;
public interface FineGrainedService {
@LambdaFunction(functionName="SimpleFineGrained")
String callFineGrained(String input);
}
再次创建另一个 lambda 来调用上面的 lambda
import com.amazonaws.services.lambda.AWSLambdaAsyncClientBuilder;
import com.amazonaws.services.lambda.invoke.LambdaInvokerFactory;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler2 implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
FineGrainedService fg = LambdaInvokerFactory.builder()
.lambdaClient(
AWSLambdaAsyncClientBuilder.standard().build()
)
.build(FineGrainedService.class);
context.getLogger().log("Response back from FG" + fg.getClass());
String fgRespone = fg.callFineGrained("Call from Gateway");
context.getLogger().log("fgRespone: " + fgRespone);
// TODO: implement your handler
return "Hello from Gateway Lambda!";
}
}
在 pom.xml 中添加了 maven 依赖
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-lambda</artifactId>
</dependency>
为我当前的角色添加了 lambda 调用权限。 然后我将代码上传到 AWS。但是,当我对此进行测试时,出现如下错误。请您帮我解决这个问题吗?
如果有人能帮助获得这个将不胜感激...或任何其他方式使用 JAVA 从另一个 lambda 调用 lambda
【问题讨论】:
-
我不确定您的确切要求。但 AWS Step 函数是实施该解决方案的最佳方式。其他方式是我们可以将数据从 lambda 发送到 SNS 并触发另一个 lambda。
-
@Mohan Shanmugam。感谢您的重播。您能解释一下如何对这个 lambda 使用阶跃函数吗?我试图得到这个。但我无法使用 step 功能实现这一点,因为我是 aws 的新手。你能帮忙实现这一点吗?
-
我的确切要求是使用无服务器架构处理大型 csv。我得到了一个使用 stepfunction 处理大型 CSV 的链接。它在 node.js 中。我无法将事物转换为 java。我怎么能做到这一点?点击这里处理大csvlink请帮帮我
-
你的大 csv 文件在哪里?你在S3吗?确认本地完成CSV文件处理需要多少时间?
-
是的..我将我的 csv 保存在 s3 中。我正在为我的第一个 lambda 添加一个触发器。当然,我会在我的本地 java 广告中处理,让您知道完成 CSV 处理所用的图块。
标签: java amazon-web-services lambda aws-lambda