为何AWS OpenSearch Serverless调用_reindex API返回404错误?
AWS OpenSearch Serverless调用_reindex API返回404错误排查
问题场景
我拥有一个AWS OpenSearch Serverless集合,其中包含名为index1的索引且存有需重建的数据,通过OpenSearch Dashboard的Dev Tools操作该集合。按照官方文档步骤,先创建第二个索引再调用_reindex API重建数据:
PUT index2 POST _reindex { "source": { "index": "index1" }, "dest": { "index": "index2" } }
创建index2的操作完全成功,但调用_reindex API时失败并返回404错误:
Request failed to get to the server (status code: 404)
执行创建操作后调用GET _mappings,能看到index1的映射(与现有数据对应)以及代表index2无映射的空对象。已确认域存在(其他操作均正常),且两个索引都存在,但不清楚404对应的未找到项是什么。
排查及解决方案
1. 检查数据访问权限配置
AWS OpenSearch Serverless的权限模型与托管式OpenSearch不同,需确保操作角色拥有aoss:Reindex权限,同时覆盖源索引、目标索引的读写权限。需在数据访问策略中添加如下规则:
{ "Rules": [ { "Resource": ["index/你的集合ID/index1", "index/你的集合ID/index2"], "Permission": ["aoss:ReadDocument", "aoss:WriteDocument"], "ResourceType": "index" }, { "Resource": ["index/你的集合ID/_reindex"], "Permission": ["aoss:Reindex"], "ResourceType": "index" } ], "Principal": ["arn:aws:iam::你的账号ID:user/你的操作用户"], "Description": "允许index1与index2之间的重索引操作" }
2. 确认请求路径包含集合ID
在OpenSearch Serverless中调用API时,必须在请求路径或参数中指定集合的唯一ID(非集合名称)。正确的_reindex请求格式应为:
POST /_reindex?collection=你的集合ID { "source": { "index": "index1" }, "dest": { "index": "index2" } }
若Dashboard绑定了多个集合,需确认当前操作上下文是否指向目标集合。
3. 验证索引名称的准确性
确认index1和index2的名称完全匹配(OpenSearch索引名称区分大小写),避免因拼写、大小写差异导致的索引定位失败。
4. 检查服务版本兼容性
确认你的OpenSearch Serverless版本不低于支持_reindex API的最低版本(官方文档2.11版本已支持),低版本可能存在API兼容性问题。
内容的提问来源于stack exchange,提问作者Bernardo SOUSA
相关产品推荐
相关产品推荐

