我非常喜欢这篇博客文章中介绍的从Java调用AWS Lambdas的方法。
然而,如果我有3个环境(int/test/live),并且在每个环境中Lambda的名称略有不同(通过CloudFormation创建),我无法想到一种方法来拥有一个接口,并根据环境调用不同名称的Lambda。
我正在使用Spring,因此如果我能做到像这样:
但很明显我不能在接口上这样做,否则它不会是一个bean!有没有任何办法可以做到这一点?我感觉自己撞到了一堵墙...
现在我称呼lambda为“旧方法”:
显然需要进行一些异常处理。但这并不是一个很好的解决方案...
对于任何关注此事的人,我已在aws-sdk github上提交了一个问题和解决方案。希望类似于我的解决方案能够出现在SDK的下一个版本中...
然而,如果我有3个环境(int/test/live),并且在每个环境中Lambda的名称略有不同(通过CloudFormation创建),我无法想到一种方法来拥有一个接口,并根据环境调用不同名称的Lambda。
我正在使用Spring,因此如果我能做到像这样:
@Component
interface MyLambdas {
@Value("${name}")
String name;
@LambdaFunction(name = name)
String callMyLambda(String stuff);
}
//and then
service = LambdaInvokerFactory.build(MyLambdas.class, lambda);
但很明显我不能在接口上这样做,否则它不会是一个bean!有没有任何办法可以做到这一点?我感觉自己撞到了一堵墙...
现在我称呼lambda为“旧方法”:
String readLambdaName = "My_Lambda";
ObjectMapper objectMapper = new ObjectMapper();
AWSLambdaClient lambda = new AWSLambdaClient();
lambda.configureRegion(Regions.EU_WEST_1);
String json = objectMapper.writeValueAsString(request);
InvokeRequest req = new InvokeRequest()
.withFunctionName(readLambdaName)
.withPayload(json);
InvokeResult res = lambda.invoke(req);
int result = objectMapper.readTree(res.getPayload().array()).asInt();
显然需要进行一些异常处理。但这并不是一个很好的解决方案...
对于任何关注此事的人,我已在aws-sdk github上提交了一个问题和解决方案。希望类似于我的解决方案能够出现在SDK的下一个版本中...