如何通过NodeJS调用elasticsearch api?

如何通过NodeJS调用elasticsearch api?,第1张

如何通过NodeJS调用elasticsearch api?

您看到此错误的原因

User: anonymous is not authorized to perform:es:ESHttpPost
是因为您在发出数据请求时没有让ElasticSearch知道您是谁-这就是为什么它说“匿名”的原因。

身份验证有两种方式,最简单的方法是使用elasticsearch库。使用此库,您将为IAM角色/用户提供一组凭据(访问密钥,秘密密钥)。它将使用它来创建签名的请求。签名的请求将使AWS知道是谁在实际发出请求,因此不会以匿名方式接收,而是您自己。

使它起作用的另一种方法是将访问策略调整为基于IP:

{    "Version": "2012-10-17",    "Statement": [        { "Effect": "Allow", "Principal": {     "AWS": "*" }, "Action": "es:*", "Condition": {     "IpAddress": {         "aws:SourceIp": [  "AAA.BBB.CCC.DDD"         ]     } }, "Resource": "YOUR_ELASTICSEARCH_CLUSTER_ARN"        }    ]}

对于您在此处提供的ip(范围)的任何人,此特定策略将是开放的。但是,这将使您免于必须签署请求的麻烦。

elasticsearch-js
是一个有助于设置AWS
ES的库

一个有效的示例如下:

const AWS = require('aws-sdk')const elasticsearch = require('elasticsearch')const awsHttpClient = require('http-aws-es')let client = elasticsearch.Client({    host: '<YOUR_ES_CLUSTER_ID>.<YOUR_ES_REGION>.es.amazonaws.com',    connectionClass: awsHttpClient,    amazonES: {        region: '<YOUR_ES_REGION>',        credentials: new AWS.Credentials('<YOUR_ACCESS_KEY>', '<YOUR_SECRET_KEY>')    }});client.search({    index: 'twitter',    type: 'tweets',    body: {        query: { match: {     body: 'elasticsearch' }        }    }}).then(res => console.log(res));


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4988384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存