我想从另一个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的任何其他方式,我将不胜感激
答案 0 :(得分:0)
我们永远不应该直接将lambda链接在一起,AWS步骤功能是正确的方法。您可以浏览AWS documentation。这是一个结构良好的文档,提供我的AWS,所以无需担心。
注意:当我们需要在异步工作时获取响应时,AWS步骤功能不好,所以我们需要在代码中一次又一次地轮询该函数,以了解它是处于运行状态还是处于完成状态的状态
答案 1 :(得分:0)
如果您确定需要超过5分钟,我的解决方案就是处理CSV文件。
1)转到S3 Bucket为lambda创建通知触发器。
2)通过使用lambda事件,您可以阅读有关s3对象元数据的信息,并使用批处理客户端在AWS Batch中提交作业。
3)您需要为lambda创建具有适当批处理权限的IAM角色。
AWS Batch只是一个运行应用程序或服务的dockerized环境。
AWS Batch要求您在AWS ECR存储库或Docker Cloud中创建docker文件和存储映像。您将批量添加现货实例。
答案 2 :(得分:0)
尝试使用AWS Step Functions调用Lambda函数。每个Step函数实际上都是Lambda函数,并且该lambda函数可以调用其他AWS服务。因此,您可以构建一个工作流,其中每个步骤都可以调用不同的服务。有关详细信息,请参阅此针对每个步骤使用Java V2的AWS教程: