在 AWS API 网关集成中处理路径映射

Manipulating path mapping in AWS API gateway integration

我想修改 API 网关到 S3 映射中的 url 参数 /resource/{VaRiAbLe} 以便它实际指向 /my-bucket/{variable} .也就是说,它接受 mixed-case 输入,并将其映射到 lower-case 名称。映射路径变量对于 S3 集成来说相对简单,但我似乎无法使 lower-case 映射正常工作。

通读 documentation 映射参数,看起来路径参数是简单的字符串值(而不是模板值),因此将映射定义为 method.request.path.variable.toLowerCase() 不会工作。

有人知道如何实现此映射吗?

使用编排调用更新

根据 Jack 提供的信息,我想我应该尝试进行编排调用,因为流量足够低,我确信我无法保持 lambda 热。

作为概念验证,我向我的资源添加了两个方法(位于 /resource/{variable} - GETPOSTGET 方法链接到 POST,实际检索数据。

POST方法配置 这是一种香草 S3 代理方法,您将 {variable} 的 URL 路径参数设置为 method.request.body.variable.

GET方法配置 这是一种 HTTPS 代理方法。 POST 方法需要一个 URL,因此您需要部署 API 才能获得 URL。这里唯一需要的其他配置是 body 映射模板,其内容如下:

{
    "variable" : "$input.params('variable').toLowerCase()",
    "something" : "$input.params('something')"
}

这应该足以让它工作。

这样做的缺点似乎是我要为该资源向我的 API 添加一个额外的方法 (POST),这可能会使 API 的消费者感到困惑。我认为应该可以在 /resource 资源上制作 POST,从 API 设计的角度来看,这至少更有意义。

根据调用此 API 的频率,我要么使用 Lambda 代理,要么将两个 API 网关方法链接在一起。如果 API 被调用的频率足以使 Lambda 函数保持温暖(比如每分钟一次),则使用 Lambda。如果没有,请使用精心策划的 API 调用。

精心策划的 API 通话会很有趣,如果您有任何疑问,我很乐意为您提供帮助。

据我所知,唯一用于获取对象数据的 S3 API 是在其 API 参考中记录的 GET。