![](/img/trans.png)
[英]custom exception message in spring cloud function deployed in aws-lambda
[英]Accessing AWS Lambda Context from Spring Cloud Function
我正在使用 Spring Cloud Function 1.0.0.RELEASE 和相应的 AWS 适配器在 AWS lambda 中运行它。有没有办法从 Spring 应用程序上下文中检索 lambda function 上下文?
我知道如果你自己实现 RequestHandler 接口,那么你会得到 Context object 作为 handleRequest 方法的第二个参数(见下文),但是由于 SpringBootRequestHandler 正在处理这个,我不清楚如何访问 Context object。任何想法?
直接实现 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);
}
}
如果您仅使用spring-cloud-function-adapter-aws
,@ @Autowired
可能不起作用。
但是,您可以使用org.springframework.messaging.Message
包装您的输入。
public class FooHandler implements Function<Message<DynamodbEvent>, String> {
@Override
public String apply(Message<DynamodbEvent> message) {
// Get AWS Lambda Context
Context context = message.getHeaders().get("aws-context", Context.class);
assert context != null;
// Get the original input
DynamodbEvent payload = message.getPayload();
return payload.toString();
}
}
来源:
如果您将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();
}
};
}
来源:这个答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.