我实现了AWS lambda方法,以了解如何使用它。 我现在所拥有的:
在API网关配置中,我看到下一个选项:
在此lambda后面,我有Java代码,实现了 com.amazonaws.services.lambda.runtime.RequestStreamHandler 和其后的REST控制器,如下所示:
@Path("/tester")
public class TestResource {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private TestRepository testRepository;
public void setTestRepository(TestRepository testRepository) {
this.testRepository = testRepository;
}
@POST
@Path("/{identifier}")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.WILDCARD)
public Response store(@PathParam("identifier") String identifier, @QueryParam("hashcode") String hashcode) {
try {
this.testRepository.store(identifier, hashcode);
} catch (RuntimeException ex) {
LOG.error("Failed to store pair {}, {}", identifier, hashcode, ex);
throw new InternalServerErrorException(ex);
}
return Response.noContent().build();
}
}
现在,我尝试通过邮递员调用此服务:
选项1 -调用我在API网关中看到的内容:
结果:找不到404,请在AWS CloudWatch中查看相应的日志。
选项2 -调用我的方法:
结果:403禁止,AWS CloudWatch中没有日志。
{
"message": "Missing Authentication Token"
}
我完全理解为什么选项1 不起作用,但是选项2 出了什么问题?你能帮我理解我错过的事情吗?
答案 0 :(得分:2)
(大多数情况下)当您尝试调用不存在的URL时,会出现此消息。
请确保您正在拨打http://api-gateway-name/stage-name/resource-name
此外,请确保您已经部署了API。
答案 1 :(得分:1)
我的问题的答案很简单(显而易见,对不起)。 API网关中的端点配置必须与Java代码中的@Path("/tester")
配置相匹配。
因此,如果我在网关中定义Lambda
,则应使用{{1}}而不是{{1}}。
解决了此限制,并通过手动实现处理程序使基于{{1}}的API轻巧,而没有常规REST API框架的开销。甚至在GitHub上发布了我的WIP“框架”。