aws api gateway 创建一个REST API作为Amazon S3代理

你可能想把样本API导入为Amazon S3的代理,如样本API作为Amazon S3代理的OpenAPI定义所示。关于如何使用OpenAPI定义导入API的说明,请参阅使用OpenAPI配置REST API。

创建API资源来代表Amazon S3资源

我们将使用API的根(/)资源作为认证调用者的Amazon S3桶的容器。我们还将创建一个文件夹和项目资源,分别代表一个特定的Amazon S3桶和一个特定的Amazon S3对象。文件夹名称和对象密钥将由调用者以路径参数的形式指定,作为请求URL的一部分。
创建一个暴露Amazon S3服务特性的API资源
1.在API网关控制台,创建一个名为MyS3的API。这个API的根资源(/)代表Amazon S3服务。
2.在API的根资源下,创建一个名为Folder的子资源,并将所需的资源路径设置为/{folder}。
3.对于API的Folder资源,创建一个Item子资源。将所需的资源路径设置为/{item}。 在这里插入图片描述

暴露一个API方法来列出调用者的Amazon S3桶。

获取调用者的Amazon S3桶的列表包括调用Amazon S3上的GET服务动作。在API的根资源上,(/),创建GET方法。配置GET方法,使其与Amazon S3集成。
创建并初始化API的GET/方法
1.从资源面板右上角的行动下拉菜单中选择在根节点(/)上创建方法。
2.从HTTP动词的下拉列表中选择GET,并选择复选标记图标,开始创建方法。
在这里插入图片描述
3.在/-GET-设置窗格中,为集成类型选择AWS服务。
4.从列表中,为AWS区域选择一个区域(例如,us-west-2)。
5.从AWS服务中,选择S3。
6.对于AWS Subdomain,留空。
7.在HTTP方法中,选择GET。
8.对于行动类型,选择使用路径覆盖。使用路径覆盖,API Gateway将客户端请求转发给Amazon S3,作为相应的Amazon S3 REST API路径式请求,其中Amazon S3资源由s3-host-name/bucket/key模式的资源路径表示。API Gateway设置s3-host-name,并将客户端指定的bucket和key从客户端传递到Amazon S3。
9.(可选)在路径覆盖类型/。
10.复制先前创建的IAM角色的ARN(来自IAM控制台),并将其粘贴到Execution角色中。
11.将其他设置保留为默认值。
12.选择 "保存 “来完成此方法的设置。
这种设置将前台的GET https://your-api-host/stage/请求与后台的GET https://your-s3-host/整合起来。
控制谁可以调用我们的API的这个方法,我们打开了方法授权标志,并将其设置为AWS_IAM。
启用IAM来控制对GET /方法的访问
1.从方法执行中,选择方法请求。
2.选择授权旁边的铅笔图标
3.从下拉列表中选择AWS_IAM。
4.选择复选标记图标以保存设置。
在这里插入图片描述
为了让我们的API正确地将成功的响应和异常返回给调用者,让我们在Method Response中声明200、400和500响应。我们使用200响应的默认映射,这样,没有在这里声明的状态代码的后端响应就会作为200响应返回给调用者。
GET /方法声明响应类型
1.从方法执行窗格中,选择方法响应框。API网关默认声明的是200响应。
2.选择添加响应,在输入文本框中输入400,然后选择复选标记,完成声明。
3.重复上面的步骤,声明500响应类型。最后的设置显示如下。
在这里插入图片描述
因为来自Amazon S3的成功集成响应将水桶列表作为XML有效载荷返回,而来自API Gateway的默认方法响应将返回JSON有效载荷,我们必须将后端Content-Type头的参数值映射到前端的对应值。否则,当响应体实际上是一个XML字符串时,客户端将收到application/json作为内容类型。下面的程序显示了如何设置。此外,我们还想向客户端显示其他头参数,如Date和Content-Length。
为GET /方法设置响应头映射
1.在API网关控制台,选择方法响应。添加200响应类型的Content-Type标头。
在这里插入图片描述
2.在 "集成响应 “中,对于 “Content-Type”,键入集成.响应.header.Content-Type的方法响应。
在这里插入图片描述
通过上述头的映射,API Gateway将把后台的Date头翻译成客户端的Timestamp头。
3.还是在集成响应中,选择添加集成响应,在HTTP状态regex文本框中为剩余的方法响应状态输入一个适当的正则表达式。重复以上步骤,直到覆盖所有的方法响应状态。
在这里插入图片描述
作为一个良好的做法,让我们测试一下我们到目前为止配置的API。
测试API根资源上的GET方法
1.回到 “方法执行”,从客户框中选择 “测试”。
2.在GET / - 方法测试窗格中选择测试。一个例子的结果显示如下。
在这里插入图片描述

暴露API方法来访问Amazon S3桶

为了与Amazon S3桶一起工作,我们在/{folder}资源上公开了GET、PUT和DELETE方法,以列出桶中的对象,创建一个新的桶,并删除现有的桶。这些说明与《暴露API方法以列出调用者的Amazon S3桶》中所描述的类似。在下面的讨论中,我们概述了一般的任务并强调了相关的差异。
在文件夹资源上公开GET、PUT和DELETE方法
1.在资源树的/{folder}节点上,逐一创建DELETE、GET和PUT方法。
2.设置每个创建的方法与相应的Amazon S3端点的初始整合。下面的屏幕截图说明了PUT /{folder}方法的设置。对于DELETE /{folder}和GET /{folder}方法,用DELETE和GET分别替换HTTP方法中的PUT值。
在这里插入图片描述
注意,我们在Amazon S3端点的URL中使用了{bucket}路径参数来指定桶。我们将需要把方法请求的{文件夹}路径参数映射到集成请求的{bucket}路径参数。
3.把{folder}映射到{bucket}。
a.选择方法执行,然后选择集成请求。
b.展开URL路径参数,选择添加路径
c.在名称栏中输入bucket,在映射自栏中输入method.request.path.folder。选择复选标记图标来保存映射。
在这里插入图片描述
4.在方法请求中,将Content-Type添加到HTTP请求头信息部分。
在这里插入图片描述

这主要是在测试中需要的,当使用API网关控制台时,你必须为XML有效载荷指定application/xml。
5.在Integration Request中,按照Expose an API method to list the caller’s S3 buckets中的说明,设置Content-Type header与method.request.header.Content-Type的映射。
6.要测试PUT方法,在方法执行的客户端框中选择测试,并输入以下内容作为测试的输入。
a.在文件夹中,输入一个桶的名称。
b.在Content-Type头中,键入application/xml。
c.在请求正文中,提供水桶区域作为位置约束,在一个XML片段中声明为请求有效载荷。比如说。
在这里插入图片描述
7.重复前面的步骤,在API的/{folder}资源上创建并配置GET和DELETE方法。
上面的例子说明了如何在指定区域创建一个新的bucket,查看bucket中的对象列表,以及删除bucket。其他Amazon S3 bucket操作允许您处理桶的元数据或属性。例如,你可以设置你的API来调用Amazon S3的PUT /?notification操作来设置桶上的通知,调用PUT /?acl来设置桶上的访问控制列表,等等。API的设置是类似的,只是你必须在Amazon S3的端点URL上附加适当的查询参数。在运行时,你必须向方法请求提供适当的XML有效载荷。对于支持Amazon S3桶上的其他GET和DELETE操作,也可以这么说。更多关于Amazon S3对桶的可能操作的信息,请看Amazon S3对桶的操作。

暴露API方法来访问桶中的Amazon S3对象

Amazon S3支持GET、DELETE、HEAD、OPTIONS、POST和PUT操作来访问和管理特定桶中的对象。关于支持的操作的完整列表,请参阅Amazon S3对对象的操作。

在本教程中,我们通过PUT /{folder}/{item}、GET /{folder}/{item}、HEAD /{folder}/{item}和DELETE /{folder}/{item}的API方法分别公开了PUT对象操作、GET对象操作、HEAD对象操作和DELETE对象操作。

在/{folder}/{item}上的PUT、GET和DELETE方法的API设置与/{folder}上的类似,如访问Amazon S3桶的Expose API方法所规定。一个主要的区别是,与对象相关的请求路径有一个额外的路径参数{item},这个路径参数必须被映射到{object}的集成请求路径参数。
在这里插入图片描述
对于GET和DELETE方法也是如此。

作为说明,下面的屏幕截图显示了使用API Gateway控制台对{folder}/{item}资源测试GET方法时的输出。该请求正确地将纯文本(“Welcome to README.txt”)作为指定文件(README.txt)的内容返回给定的Amazon S3桶(apig-demo)中。
在这里插入图片描述
要下载或上传二进制文件,在API Gateway中被认为是utf-8编码的JSON内容以外的任何东西,需要额外的API设置。这一点概述如下。
要从S3下载或上传二进制文件
1.将受影响文件的媒体类型注册到API的binaryMediaTypes。你可以在控制台中这样做。
a.选择API的设置。
b.在二进制媒体类型下,选择添加二进制媒体类型。
c.输入所需的媒体类型,例如,图像/PNG。
d.选择 "保存更改 "来保存设置。
2.在方法请求中添加Content-Type(用于上传)和/或Accept(用于下载)头,要求客户端指定所需的二进制媒体类型,并将它们映射到集成请求中。
3.在集成请求(用于上传)和集成响应(用于下载)中,将内容处理设置为穿透。确保没有为受影响的内容类型定义映射模板。欲了解更多信息,请参阅集成穿透行为和选择VTL映射模板。
有效载荷大小限制为10MB。参见配置和运行REST API的API网关配额。
确保Amazon S3上的文件有正确的内容类型作为文件的元数据添加。对于可流媒体内容,Content-Disposition:inline可能也需要被添加到元数据中。
关于API Gateway中的二进制支持的更多信息,请参阅API Gateway中的内容类型转换。
以上就是创建一个REST API作为Amazon S3代理的一些问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值