我不需要有关存储桶的信息,我希望能够使用查询字符串搜索存储桶对象(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存储桶对象用作我可以将查询字符串传递到的端点?
答案 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"
}
]
}
您将必须为此添加必要的政策。希望对您有所帮助。