В AWS Lambda развернут следующий код:
public class MyTrigger implements RequestHandler<Request, Void> {
private final Service service = new Service();
@Override
public Void handleRequest(Request request, Context context) {
service.process(request);
return null;
}
}
и метод .process()
вызывает IllegalStateException
.
Эта лямбда запускается "вручную" со следующим кодом:
public class LambdaUtils {
private static final Logger log = LoggerFactory.getLogger(LambdaUtils.class);
public static Integer invoke(String functionName, String payload) {
log.info("Invoking lambda {} with payload {}", functionName, payload);
final AWSLambdaAsync lambdaClient = AWSLambdaAsyncClientBuilder.standard().withRegion(Regions.EU_WEST_1).build();
final InvokeRequest request = new InvokeRequest();
request.withFunctionName(functionName).withPayload(payload);
final InvokeResult invokeResult = lambdaClient.invoke(request);
final Integer statusCode = invokeResult.getStatusCode();
log.info("Invoked lambda. Got status code {} and payload {}", statusCode, StandardCharsets.UTF_8.decode(invokeResult.getPayload()).toString());
return statusCode;
}
}
Проблема в том, что, хотя в лямбда-выражении возникает исключение, код состояния в любом случае равен 200:
Invoked lambda. Got status code 200 and payload [... stacktrace ...]
.
Я использую следующую зависимость для создания клиента и выполнения вызова:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-lambda</artifactId>
<version>1.11.297</version>
</dependency>