Amazon web services 带子目录的S3 API网关代理
我为“S3”创建了一个集成类型为“AWS服务”的API网关方法GET。 我定义了一个路径覆盖:{object},它从method.request.Path.item映射而来 只要路径只包含bucket本身(./bucket/mybucketname),它就会工作,{item}的值就是mybucketname 但是当我指定例如../bucket/mybucketname/foo/bar/test.txt作为路径时,{item}值应该是mybucketname/foo/bar/test.txt,但它是空的。我想这是因为嵌套路径 当我选择catch all path variables{proxy+}时,我无法再选择集成类型“AWS Service”Amazon web services 带子目录的S3 API网关代理,amazon-web-services,amazon-s3,api-gateway,Amazon Web Services,Amazon S3,Api Gateway,我为“S3”创建了一个集成类型为“AWS服务”的API网关方法GET。 我定义了一个路径覆盖:{object},它从method.request.Path.item映射而来 只要路径只包含bucket本身(./bucket/mybucketname),它就会工作,{item}的值就是mybucketname 但是当我指定例如../bucket/mybucketname/foo/bar/test.txt作为路径时,{item}值应该是mybucketname/foo/bar/test.txt,但
有没有提示我做错了什么,或者我应该做什么,以便通过API网关从S3检索子文件夹中的文件/文件夹?@johnny90,首先在创建资源{proxy+}时配置为lambda proxy…。创建后..将集成类型更新为“AWS服务”。然后您可以将任何AWS服务配置到API网关。关键是如何在路径覆盖中传递{object}变量的值。 我认为您可以从请求路径为集成请求设置url路径参数,如下所示:
object = method.request.path.object
我相信问题是因为对象中有“/”,api路径(资源)也是如此。
这导致api网关只能识别根路径中的对象
我要做的是为来自RequestQueryString的集成请求设置url路径参数,如下所示:
object = method.request.querystring.object
它起作用了
或者您可以尝试使用url编码对对象路径进行编码,将“/”替换为“%2F”。但我从未试过 路径覆盖:bucket_name/{folder}模式根据级别,它是第一个{folder} 您可以像这样访问s3嵌套路径。 这是最后一个{object},前面提到的所有路径映射。 此链接将非常有用 这可以通过使用 以下是我实现@Johnny90目标的步骤:
/bucket
资源,然后从操作下拉菜单中选择创建资源。然后,在“新建子资源”窗格中执行以下操作
a。勾选“配置为代理资源”
b。使用默认的代理
作为资源名称
c。对资源路径使用{proxy+}
d。选择创建资源bucket/{proxy}
f。粘贴具有足够权限的IAM角色
g。单击保存{proxy}
变量
proxy
,在“映射自”列中键入method.request.path.proxy
内容类型
作为名称
b。单击添加响应模型。为内容类型键入application/json
,然后从Models下拉菜单中选择Empty
integration.response.header.Content Type
你解决了吗?如果你能把答案贴出来就好了。我也面临同样的问题。URL编码您的ObjectID以用“%2F”替换“/”是有效的too@KevinHooke难道你不记得你是怎么做到的吗?@Samuurai我想这是用URLEncoder.encode()/decode()做的这个应该是公认的答案!在访问S3子目录时,使用代理资源可以避免URL编码问题。在创建资源{proxy+}后,我无法将集成类型设置为“AWS服务”。从调用的URL调用文件时,它不起作用。确切的错误消息是:由于配置错误,执行失败:无法对正文进行base64解码。