具有子目录的S3的API网关代理

问题描述 投票:6回答:2

我创建了一个API网关方法GET,其集成类型为“AWS Service”,用于“S3”。我定义了一个路径覆盖:{object},它是从method.request.path.item映射的

Integration Request

只要路径只包含桶本身(./bucket/mybucketname),它就可以工作,{item}的值是mybucketname。

但是当我指定例如../bucket/mybucketname/foo/bar/test.txt作为路径时,{item}值应该是mybucketname / foo / bar / test.txt但它是空的。我认为这是因为嵌套路径

当我选择catch-all路径变量{proxy +}时,我无法再选择集成类型“AWS Service”。

任何暗示我做错了什么或我应该做什么,以便通过API网关从S3检索子文件夹中的文件/文件夹?

amazon-web-services amazon-s3 api-gateway
2个回答
3
投票

关键是如何在Path Override中传递{object}变量的值。我想你从请求路径设置了集成请求的url path参数,如下所示:

object = method.request.path.object     

我认为问题是因为对象中有“/”,api路径(资源)也是如此。它导致api网关只能识别根路径中的对象。

我所做的是为请求查询字符串设置集成请求的url path参数,如下所示:

object = method.request.querystring.object

有用

或者您可以尝试使用url encode对对象路径进行编码,将'/'替换为'%2F'。我从未尝试过。


0
投票

@ johnny90,首先在创建资源{proxy +}时配置为lambda代理...创建.update集成类型为“AWS Service”。然后,您可以将任何AWS服务配置到您的API网关。

© www.soinside.com 2019 - 2024. All rights reserved.