我的目标是在AWS中使用S3来存储csv文件,并使用API Gateway查询这些对象,并理想地从csv文件中选择行和列,并将其返回到我的Web应用程序中。
在AWS中,有一种用于从S3对象中选择内容的方法。它充当csv文件的筛选器,例如仅返回某些列。可以用SQL编写,请参见此处: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html
还有一种方法可以使用API网关作为S3的代理在存储桶中创建API,请参见此处: https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html
是否可以组合使用这些方法,以便我可以将API网关请求直接映射到S3对象查询中的SQL SELECT内容,还是需要在中间方法或其他方法中使用Lambda函数?
答案 0 :(得分:1)
S3代理仅允许您访问已记录的文件。
出于您的目的,您需要在中间有一个实体,该实体将为您执行其他业务逻辑。
我推荐lambda。
所以您这样做:
api-gateway-> lambda-> s3
答案 1 :(得分:1)
要请求特定文件部分,您可以自己执行,也可以使用AWS托管服务S3 Select或Athena之一。两者之间的区别很简单:S3选择一个文件,Athena可以在整个存储桶中执行请求。
根据您的情况,您可能会使用其中一种,而您必须考虑所需的性能和可接受的成本。
无论如何,您不能仅将API网关直接插入该服务之一,就需要一个中间件来处理请求。
我仍然要提到,可以通过绕过API网关直接使用S3 Select或Athena。如果这样做,您必须非常小心,注意与使用的访问密钥相关的权限。您可以在IAM中创建对S3的特定访问权限(非常狭窄),然后使用sdk直接从客户端处理查询。您需要处理更多的安全问题,但避免同时使用API网关和Lambda。
答案 2 :(得分:1)
在无服务器架构中,我能够使用API Gateway和Lambda在30秒内对100GB的数据执行S3 Select查询。如果您仍然对此感兴趣,可以使用以下解决方案。 https://github.com/sandyghai/Query-100GB-Data-With-AWS-S3-Select-Under-30-Seconds