在Java中确定运行时的AWS lambda名称

在Java中确定运行时的AWS lambda名称,java,amazon-web-services,annotations,aws-lambda,Java,Amazon Web Services,Annotations,Aws Lambda,我非常喜欢中描述的从Java调用AWS lambdas的方法。 但是,如果我有3个环境(int/test/live),并且每个环境上的lambda都有一个稍微不同的名称(通过cloudformation创建),我想不出一种方法来拥有一个接口,并根据环境使用不同的名称调用lambda。 我正在使用Spring,因此如果我可以做如下操作: @Component interface MyLambdas { @Value("${name}") String name; @Lam

我非常喜欢中描述的从Java调用AWS lambdas的方法。
但是,如果我有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!有什么办法可以做到这一点吗?我觉得我撞到了砖墙


现在我称兰姆达为“老办法”:

显然,这里和那里有一些异常处理。这不是一个很好的解决方案,但是



对于任何关注这一点的人,我已经提交了一个问题和解决方案。希望类似于我的解决方案的东西能够应用到SDK的下一个版本中…

有些人可能会发现它很有用,现在这个功能包含在1.10.51中,使用了

我通过使用“lambdFunctionNameResolver”覆盖函数名来解决它

以下是创建lambda客户端的方法:

MyLambdaService lambdaService = LambdaInvokerFactory.builder().lambdaClient(AWSLambdaClientBuilder.defaultClient())
                    .lambdaFunctionNameResolver((method, annotation, config) -> "ENV_SPECIFIC_FUNCTION_NAME").build(MyLambdaService.class);

我的方法调用“generalConfigHelper.getString(“function_name”)”根据env(dev/qa/prod)计算出正确的函数名

aws官方发行:

//my lambda interface
public interface MyLambdaService {
    @LambdaFunction
    ApiGatewayProxyResponse execute(ApiGatewayRequest bit);
}
MyLambdaService lambdaService = LambdaInvokerFactory.builder().lambdaClient(AWSLambdaClientBuilder.defaultClient())
                    .lambdaFunctionNameResolver((method, annotation, config) -> "ENV_SPECIFIC_FUNCTION_NAME").build(MyLambdaService.class);
MyLambdaService lambdaService = LambdaInvokerFactory.builder().lambdaClient(AWSLambdaClientBuilder.defaultClient())
                .lambdaFunctionNameResolver((method, annotation, config) -> generalConfigHelper.getString("function_name")).build(MyLambdaService.class);