S3存储桶对象可以用作HTTP API端点吗?

时间:2018-07-16 15:30:25

标签: rest amazon-web-services amazon-s3 aws-api-gateway

我不需要有关存储桶的信息,我希望能够使用查询字符串搜索存储桶对象(CSV / JSON)并获取结果。例如,将请求发送至:

https://s3.amazonaws.com/my_bucket/my_folder/my_csv.csv/querys3?index=432

我目前正在尝试使用AWS API Gateway进行此操作。我知道创建使用AWS Lambda和get_object_content查询的API网关是可能的,但是我认为如果可以简单地将存储桶用作可搜索HTTP,这将是不必要的步骤端点。此评估正确吗?如果是这样,这是我的问题-

我设置了一种在AWS API Gateway上使用HTTP集成的测试方法,并使用该方法和一个搜索参数作为响应:

Status: 200 
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message> 
<RequestId>#requestid</RequestId><HostId>#hostid=</HostId>
</Error>

不确定我是否收到“访问被拒绝”消息,因为我正在查询无法查询的内容,或者我只是做错了此事。

是否可以将S3存储桶对象用作我可以将查询字符串传递到的端点?

2 个答案:

答案 0 :(得分:1)

  

是否可以将S3存储桶对象用作我可以将查询字符串传递给的端点?

并非如此,至少不是直接如此。

AWS S3实际上是一个简单的键/值存储,其中文件名是键,内容是值(好的,还附加了一些元数据)。因此,AWS S3可能仅返回存储的二进制内容或它的子集(字节从...到),而不提供任何自定义(REST服务)逻辑。

您仍然可以看看AWS Athena https://aws.amazon.com/athena/使数据可搜索 确实,您可以创建一个lambda或其他服务来读取数据并评估读取内容的查询,但这就是AWS Athena的作用

答案 1 :(得分:0)

似乎可以这样。我在类型为AWS服务'S3'的方法'GET'上创建了一个集成请求,默认情况下具有有效的执行角色和路径及其他。我能够从api-gateway控制台获得有效的响应测试。所有这些都是从控制台配置的。 CLI所述的配置

CLI> aws apigateway get-integration --rest-api-id xxxxxxxxx --resource-id xxxxx --http-method ANY
{                                                                         
"type": "AWS",                                                        
"httpMethod": "GET",                                                  
"uri": "arn:aws:apigateway:us-east-1:s3:path/<path>",
"credentials": "arn:aws:iam::xxxxxxxxx:role/asr-s3-ec2-role",      
"passthroughBehavior": "WHEN_NO_MATCH",                               
"timeoutInMillis": 29000,                                             
"cacheNamespace": "<resource-id>",                                           
"cacheKeyParameters": [],                                             
"integrationResponses": {                                             
    "200": {                                                          
        "statusCode": "200",                                          
        "responseTemplates": {                                        
            "application/json": null                                  
        }                                                             
    }                                                                 
}                                                                     
}

角色看起来像

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
         "Service": [
         "apigateway.amazonaws.com"
       ]
     },
    "Action": "sts:AssumeRole"
    }
  ]
}

您将必须为此添加必要的政策。希望对您有所帮助。