Лямбда возвращается 200, хотя было выброшено исключение - PullRequest
0 голосов
/ 11 апреля 2019

В 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>

1 Ответ

1 голос
/ 11 апреля 2019

200 не имеет ничего общего с фактическим лямбда-результатом или фактическим вызовом самой лямбды. Если вы получите в основном что-либо, кроме 200, это будет означать, что лямбда-вызов не может быть принят, что означает, что ваша лямбда не будет вызываться вообще.

С AWS :

Код состояния в ответе API не отражает функциональные ошибки. Коды ошибок зарезервированы для ошибок, препятствующих выполнению вашей функции, таких как ошибки прав доступа, ошибки ограничения или проблемы с кодом и конфигурацией вашей функции. Например, Lambda возвращает TooManyRequestsException, если выполнение функции приведет к превышению предела параллелизма либо на уровне учетной записи (ConcurrentInvocationLimitExceeded), либо на уровне функции (ReservedFunctionConcurrentInvocationLimitExceeded).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...