Я использую Spring Cloud Function 1.0.0.RELEASE и соответствующий адаптер AWS для запуска в AWS lambda. Есть ли способ получить контекст лямбда-функции из контекста приложения Spring?
Я знаю, что если вы реализуете интерфейс RequestHandler самостоятельно, тогда вы получите объект Context в качестве второго параметра метода handleRequest (см. Ниже), но поскольку SpringBootRequestHandler обрабатывает это, мне не ясно, как получить доступ к объекту Context. Любые идеи?
Пример реализации RequestHandler напрямую
public class LambdaRequestHandler implements RequestHandler<String, String> {
public String handleRequest(String input, Context context) {
context.getLogger().log("Input: " + input);
return "Hello World - " + input;
}
}
Откладывание реализации RequestHandler до SpringBootRequestHandler
public class SomeFunctionHandler
extends SpringBootRequestHandler<SomeRequest, SomeResponse> {
}





SomeFunctionHandler расширяет SpringBootRequestHandler, поэтому он может переопределить метод handleRequest для получения доступа к объекту AWS lambda Context.
public class SomeFunctionHandler extends SpringBootRequestHandler<SomeRequest, SomeResponse> {
private static final Logger logger = LoggerFactory.getLogger(SomeFunctionHandler.class);
@Override
public Object handleRequest(SomeRequest event, Context context) {
logger.info("ARN = " + context.getInvokedFunctionArn());
return super.handleRequest(event, context);
}
}
В случае, если вы выставляете Function как bean-компонент, вы можете просто Autowire объект Context.
Пример:
@Autowired
private Context context;
@Bean
public Function<String, String> uppercase() {
logger.info("ARN = " + context.getInvokedFunctionArn());
return value -> {
if (value.equals("exception")) {
throw new RuntimeException("Intentional exception which should result in HTTP 417");
}
else {
return value.toUpperCase();
}
};
}
Источник: ответ это.