我已经设置了我的AWS Elasticsearch实例,以便任何人都可以执行任何操作(创建,删除,搜索等)。
这些是我的权限(用我的Elasticsearch ARN替换$ myARN):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "$myARN"
}
]
}
当我PUT
新索引时:
PUT http://my-elasticsearch-domain.us-west-2.es.amazonaws.com/index-name
或我DELETE
索引:
DELETE http://my-elasticsearch-domain.us-west-2.es.amazonaws.com/index-name
我明白了:
{
"acknowledged": true
}
这意味着我可以创建和删除索引但是当我尝试POST
重新索引时,我得到了:
{
"Message": "Your request: '/_reindex' is not allowed."
}
我是否必须签署此请求?为什么我必须签署此请求但不创建或删除索引?
答案 0 :(得分:5)
原因很简单,因为Amazon Elasticsearch Service是一种受限制的环境,您无法访问由Elasticsearch的准系统安装提供的所有服务和端点。
您可以查看您在Amazon Elasticsearch Service上允许使用的list of endpoints,_reindex
不属于该列表。
<强>更新强>
但是,还有另一种方法可以达到你想要的效果。通过利用Logstash,您可以从ES中获取数据,应用您希望的任何转换并将其下载回ES。
input {
elasticsearch {
hosts => ["my-elasticsearch-domain.us-west-2.es.amazonaws.com:80"]
index => "index-name"
docinfo => true
}
}
filter {
mutate {
remove_field => [ "@version", "@timestamp" ]
}
# add other transformations here
}
output {
elasticsearch {
hosts => ["my-elasticsearch-domain.us-west-2.es.amazonaws.com:80"]
manage_template => false
index => "%{[@metadata][_index]}"
document_type => "%{[@metadata][_type]}"
document_id => "%{[@metadata][_id]}"
}
}
答案 1 :(得分:1)
在以前的版本1.5和2.3中将不提供Reindex功能。因此,如果您使用版本1.5或2.3,最好转到最新的ES版本,这样您将获得更好的索引性能和以前版本不支持的其他功能。
另请查看以下链接,了解更多不同版本的AWS Elasticsearch支持的API。如果您查看5.1部分,可以在那里列出“_reindex”。
答案 2 :(得分:0)
我可以使用以下工具来做到这一点
安装后,可以在命令行上运行它:
elasticdump \
--input=http://es.com:9200/api/search \
--input-index=my_index \
--output=http://es.com:9200/api/search \
--output-index=my_index \
--type=mapping
注意:我确实必须使用--awsChain
选项来找到我的凭据。