即使异常被抛出,Lambda也会返回200

问题描述 投票:0回答:1

我在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

使用以下代码“手动”触发此lambda:

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;
    }
}

问题是,即使在lambda内部抛出异常,状态代码仍为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>
java amazon-web-services exception java-8 aws-lambda
1个回答
1
投票

200与实际的lambda结果或lambda本身的实际调用无关。如果你基本上得到的不是200,那就意味着lambda调用无法被接受,这意味着你的lambda根本不会被调用。

来自AWS

API响应中的状态代码不反映函数错误。错误代码保留用于阻止执行函数的错误,例如权限错误,限制错误或函数代码和配置问题。例如,Lambda返回TooManyRequestsException,如果执行该函数会导致您在帐户级别(ConcurrentInvocationLimitExceeded)或函数级别(ReservedFunctionConcurrentInvocationLimitExceeded)超过并发限制。

© www.soinside.com 2019 - 2024. All rights reserved.