从 Spring Cloud Function 访问 AWS Lambda 上下文
Posted
技术标签:
【中文标题】从 Spring Cloud Function 访问 AWS Lambda 上下文【英文标题】:Accessing AWS Lambda Context from Spring Cloud Function 【发布时间】:2019-04-13 07:15:13 【问题描述】:我正在使用 Spring Cloud Function 1.0.0.RELEASE 和相应的 AWS 适配器在 AWS lambda 中运行它。有没有办法从 Spring 应用程序上下文中检索 lambda 函数上下文?
我知道如果你自己实现了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>
【问题讨论】:
【参考方案1】:如果您将 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();
;
来源:this 答案。
【讨论】:
【参考方案2】: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);
【讨论】:
以上是关于从 Spring Cloud Function 访问 AWS Lambda 上下文的主要内容,如果未能解决你的问题,请参考以下文章
@MessagingGateway 如何配置 Spring Cloud Stream MessageChannels?
spring cloud stream 3.1.2 源码搭配rocketmq学习
Spring-Cloud-Function-Spel 漏洞复现
如何使用 Spring Cloud Function 公开多个函数端点?
如何在 Google Cloud Function 上的 Spring Cloud 函数中获取 Pub/Sub 事件的元数据