一、背景
在不给Access key,Secret Key的前提下,用户上传文件到s3
二、创建API
1、打开API Gateway,点击创建API,选择REST API
REST API和HTTP API区别:(来自AWS官网) REST API 和 HTTP API 都是 RESTful API 产品。REST API 支持的功能比 HTTP API 多,而 HTTP API 在设计时功能就极少,因此能够以更低的价格提供。如果您需要如 API 密钥、每客户端节流、请求验证、AWS WAF 集成或私有 API 端点等功能,请选择 REST API。如果您不需要 REST API 中包含的功能,请选择 HTTP API。
2、 设置API名称,选择终端节点类型
终端节点类型:(来自AWS官网) 区域性(REGIONAL):适用于同一区域中的客户端。当在 EC2 实例上运行的客户端调用同一区域中的 API,或 API 用于为具有高需求的少数客户端提供服务时,区域 API 可以降低连接开销。 还有边缘优化(EDGE):最适合地理位置分散的客户端。API 请求将路由到最近的 CloudFront 接入点 (POP)。这是 API Gateway REST API 的默认终端节点类型。 私有(PRIVATE):是一个只能使用接口 VPC 终端节点从 Amazon Virtual Private Cloud (VPC) 访问的 API 终端节点,该接口是您在 VPC 中创建的终端节点网络接口 (ENI)
三、配置API
1、进入刚创建好的API,点击资源页,创建资源及方法
1.1创建资源, / 代表根目录,右击选择创建资源
1.2创建方法,上传文件到s3,所以选择PUT方法
1.3点击刚创建的方法,进入集成请求
1.3配置: 集成类型:AWS 服务 AWS区域:(选择相应的区域) AWS服务:S3 AWS子域:(不用填) HTTP方法:PUT 操作类型:路径覆盖 路径覆盖(可选):{bucket}/{object} 执行角色:(填写有执行API角色的ARN)
路径覆盖也可以把路径某部分hard code
在下方URL路径参数中填写路径参数映射关系
2、配置设置
翻到最下面,修改二进制媒体类型为 */*
Content-Encoding可以根据需要修改
默认上传文件大小不超过10M
三、部署API
API配置完成后,右击根目录,部署API, 选择部署阶段,点击部署
注意:每次对API进行更改后要重新部署一下
四、测试API
测试通过两种方式:①Postman ②python代码
获取URL链接
1、Postman
进入Postman,添加PUT请求,复制URL链接,在其后添加上传到S3的路径,点击send,即可在下方看到请求结果
2、python代码
import requests def call_api(_url, _headers, _files): res = requests.put(_url, data=_files, headers=_headers) return res def unload_s3(local_file_name,S3_file_name): # api gateway call url url_ip = "" # generate the url url = url_ip + S3_file_name # the file on your computer uploadFile = open(local_file_name, "rb") # call the api2s3 method res = call_api(url, headers, uploadFile) # print the result if res.ok: return ("Upload completed successfully!") else: return ("Upload failed!") if __name__ == '__main__': # local file name local_file_name = '' # S3 file_name to upload S3_file_name = '' unload_s3(local_file_name,S3_file_name)