从 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(14)——Function

如何使用 Spring Cloud Function 公开多个函数端点?

如何在 Google Cloud Function 上的 Spring Cloud 函数中获取 Pub/Sub 事件的元数据