我非常喜歡this blog post中描述的從Java調用Java lambda的方法。但是,如果我有3個環境(int/test/live),並且每個lambda都有一個略微不同的名稱(通過cloudformation創建),我想不出有一個接口的方法,不同名稱的lambda取決於環境。
我使用Spring,所以如果我可以這樣做:在Java中確定運行時的AWS lambda名稱
@Component
interface MyLambdas {
@Value("${name}")
String name;
@LambdaFunction(name = name)
String callMyLambda(String stuff);
}
//and then
service = LambdaInvokerFactory.build(MyLambdas.class, lambda);
但很明顯,我不能這樣做在接口上,這不會是一個bean!有沒有辦法做到這一點?我覺得像我撞了南牆......
現在我打電話拉姆達「老辦法」:顯然有些異常處理在這裏和那裏
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的下一個版本...