Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest S3 bucket对象可以用作HTTP API端点吗?_Rest_Amazon Web Services_Amazon S3_Aws Api Gateway - Fatal编程技术网

Rest S3 bucket对象可以用作HTTP API端点吗?

Rest S3 bucket对象可以用作HTTP API端点吗?,rest,amazon-web-services,amazon-s3,aws-api-gateway,Rest,Amazon Web Services,Amazon S3,Aws Api Gateway,我不需要关于bucket的信息,我希望能够使用查询字符串搜索bucket对象(CSV/JSON)并返回结果。例如,将请求发送到: 我目前正试图通过AWS API网关解决这个问题。我知道可以创建一个使用AWS Lambda和get_object_content查询的API网关,但如果可以简单地将bucket用作可搜索的HTTP端点,那么这将是一个不必要的步骤。这个评估正确吗?如果是,我的问题是- 我在AWS API Gateway上设置了一个使用HTTP集成的测试方法,并使用该方法和一个搜索参数

我不需要关于bucket的信息,我希望能够使用查询字符串搜索bucket对象(CSV/JSON)并返回结果。例如,将请求发送到:

我目前正试图通过AWS API网关解决这个问题。我知道可以创建一个使用AWS Lambda和get_object_content查询的API网关,但如果可以简单地将bucket用作可搜索的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 bucket对象用作我可以向其传递查询字符串的端点

这似乎是可能的。我在AWS服务“S3”类型的方法“GET”上创建了一个集成请求,默认情况下使用了有效的执行角色&path&others。我能够从api网关控制台获得有效的响应测试。所有这些都是从控制台配置的。配置如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                                  
        }                                                             
    }                                                                 
}                                                                     
}
您必须在此附加必要的保险单。希望能有帮助

是否可以将S3 bucket对象用作我可以向其传递查询字符串的端点

不是真的,至少不是直接的

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

你还可以看看雅典娜 使数据可搜索
实际上,您可以创建一个lambda或其他服务来读取数据并对读取的内容评估查询,但AWS Athena就是这么做的

您将此角色应用到S3 bucket或API网关吗?非常感谢。API网关集成。请参见上面描述中的
凭证
。PS:这仅获取对象(在我的示例中为GET)。这并没有运行任何查询。我本质上是在问,哪种集成类型是访问此功能最直接的方式-看看S3 Select,它允许您对S3进行SQL风格的查询@约翰汉利:这就是我目前的做法(通过Lambda)。这是最佳实践吗?答案取决于您的目标和数据集。如果查询在Lambda最大执行时间(300秒)之前完成,则可以从Lambda运行查询。我更喜欢使用Athena查询S3数据。如果我需要反复处理大量数据,那么我会使用红移。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
         "Service": [
         "apigateway.amazonaws.com"
       ]
     },
    "Action": "sts:AssumeRole"
    }
  ]
}