Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest 调用AWS Lambda端点_Rest_Amazon Web Services_Aws Lambda - Fatal编程技术网

Rest 调用AWS Lambda端点

Rest 调用AWS Lambda端点,rest,amazon-web-services,aws-lambda,Rest,Amazon Web Services,Aws Lambda,我实现了AWS lambda方法来学习如何使用它。 我现在所拥有的: AWS lambda本身 API网关 Amazon CloudWatch日志 在API网关配置中,我看到了下一个选项: 终点: API密钥:QW123E45RTY6 授权:无 在这个lambda背后,我有Java代码,实现com.amazonaws.services.lambda.runtime.RequestStreamHandler和它背后的REST控制器,类似于: @Path("/tester") public

我实现了AWS lambda方法来学习如何使用它。 我现在所拥有的:

  • AWS lambda本身
  • API网关
  • Amazon CloudWatch日志
在API网关配置中,我看到了下一个选项:

  • 终点:
  • API密钥:QW123E45RTY6
  • 授权:无
在这个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网关中看到的内容:

  • 网址:
  • 方法:邮寄
  • 标题:
    • 密钥:x-api-Key
    • 值:QW123E45RTY6
结果:未找到404,请参阅AWS CloudWatch中的相应日志

{
    "message": "Missing Authentication Token"
}
选项2-调用我的方法:

  • 网址:
  • 方法:邮寄
  • 标题:
    • 密钥:x-api-Key
    • 值:QW123E45RTY6
结果:403禁止,AWS CloudWatch中没有日志

{
    "message": "Missing Authentication Token"
}
我完全理解为什么选项1不起作用,但是选项2出了什么问题?您能帮我理解我错过了什么吗?

当您尝试调用不存在的URL时,会出现此消息(大多数情况下)

请确保您正在呼叫
http://api-gateway-name/stage-name/resource-name


另外,请确保您已经部署了API。

我的问题的答案是简单而明显的(愚蠢的我)。API网关中的端点配置必须与Java代码中的
@Path
配置相匹配

因此,如果我在网关中定义
dummy/test store
,应该使用
@Path(“/dummy/test store”)
而不是
@Path(“/tester”)


解决了这一限制,并通过手动实现处理程序使基于Lambda的API变得轻量级,而无需常规REST API框架的开销。甚至在上发布了我的WIP“框架”。

谢谢你的提示,URL错误是对的,但在我深入到AWS客户端代码之前,我不明白为什么它是错误的。我将把我的发现作为一个单独的答案粘贴在这里。