调用AWS Lambda终端节点

时间:2018-11-25 19:30:27

标签: rest amazon-web-services aws-lambda

我实现了AWS lambda方法,以了解如何使用它。 我现在所拥有的:

  • AWS lambda本身
  • API网关
  • Amazon CloudWatch Logs

在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 出了什么问题?你能帮我理解我错过的事情吗?

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“框架”。