我在创建一个 Java Lambda 函数时遇到了一个奇怪的问题,该函数的主要功能是 JWT token 验证。我现在正在使用 terraform 创建 lambda 并将我的 Jar 文件上传到 s3。下面是 token 验证 block
public boolean validate(String token) throws Exception {
try {
Jws<Claims> claims = Jwts.parser().setSigningKey("mysigningkey").parseClaimsJws(token);
if (claims.getBody().getExpiration().before(new Date())) {
throw new Exception("Token expired");
}
return true;
} catch (JwtException | IllegalArgumentException e) {
throw new InvalidJwtAuthenticationException("Some exception");
}
}
该行导致了问题
Jws<Claims> claims = Jwts.parser().setSigningKey("mysigningkey").parseClaimsJws(token);
我已将异常和错误放入catch block 中,但它没有打印任何消息。但是这一行执行失败。我尝试使用相同的 Jar 文件在 AWS 控制台中手动创建该函数,并且相同的代码运行良好。
对这种行为有什么想法吗?或者有什么调试策略吗?云 watch 日志上只是打印了执行不成功,没有其他具体的错误信息。
以下消息将写入 Cloudwatch 日志:
REPORT RequestId: ####### Duration: 1835.00 ms Billed Duration: 1900 ms Memory Size: 512 MB Max Memory Used: 93 MB Init Duration: 349.72 ms
超时设置为 3 秒
最佳答案
这是由于超时问题造成的。创建时 Lambda 上的默认超时为 3 秒,因为 token 验证需要更多时间 Lambda 退出达到时间限制。将超时时间增加到 15 秒,效果很好。但我没有在日志中看到任何错误消息,这暗示我这是因为超时
关于java - Lambda 函数退出失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61110074/