如何使用 npm elasticsearch 和 http-aws-es 连接到 AWS ElasticSearch?
How to connect to AWS ElasticSearch using npm elasticsearch and http-aws-es?
我正在使用 npm elasticsearch 包来搜索我的 AWS ES 域。当我使用 Postman 使用我的 AWS IAM 凭证发出 POST 请求时,一切似乎都运行良好。
我想在我的代码中做同样的事情 (node.js)。我在这里提到了这个答案:
代码如下:
const elasticsearch = require('elasticsearch');
const awsHttpClient = require('http-aws-es');
const AWS = require('aws-sdk');
const client = new elasticsearch.Client({
host: 'my-aws-es-endpoint',
connectionClass: awsHttpClient,
amazonES: {
region: 'us-east-1',
credentials: new AWS.Credentials('my-access-key','my-secret-key')
}
});
但是当我 运行 client.search() 时,它失败并出现错误:
Elasticsearch ERROR: 2018-10-31T15:12:22Z
Error: Request error, retrying
POST https://my-endpoint.us-east-1.es.amazonaws.com/my-index/student/_search => Data must be a string or a buffer
它还给我一个警告
Elasticsearch WARNING: 2018-10-31T15:12:22Z
Unable to revive connection: https://my-endpoint.us-east-1.es.amazonaws.com/
当我只使用 aws-sdk 时,它工作正常(可能是因为我在那里签署了请求?)
有人可以指出我在这里做错了什么吗?
我可以通过指定区域来解决这个问题。 elasticsearch 客户端存在问题,它无法选择我们在
中指定的区域
amazonES: {
region: 'us-east-1',
credentials: new AWS.Credentials('my-access-key','my-secret-key')
}
}
我在上面的代码
前使用AWS.config.region指定区域解决了
AWS.config.region = 'us-east-1';
我正在使用 npm elasticsearch 包来搜索我的 AWS ES 域。当我使用 Postman 使用我的 AWS IAM 凭证发出 POST 请求时,一切似乎都运行良好。
我想在我的代码中做同样的事情 (node.js)。我在这里提到了这个答案:
代码如下:
const elasticsearch = require('elasticsearch');
const awsHttpClient = require('http-aws-es');
const AWS = require('aws-sdk');
const client = new elasticsearch.Client({
host: 'my-aws-es-endpoint',
connectionClass: awsHttpClient,
amazonES: {
region: 'us-east-1',
credentials: new AWS.Credentials('my-access-key','my-secret-key')
}
});
但是当我 运行 client.search() 时,它失败并出现错误:
Elasticsearch ERROR: 2018-10-31T15:12:22Z
Error: Request error, retrying
POST https://my-endpoint.us-east-1.es.amazonaws.com/my-index/student/_search => Data must be a string or a buffer
它还给我一个警告
Elasticsearch WARNING: 2018-10-31T15:12:22Z
Unable to revive connection: https://my-endpoint.us-east-1.es.amazonaws.com/
当我只使用 aws-sdk 时,它工作正常(可能是因为我在那里签署了请求?)
有人可以指出我在这里做错了什么吗?
我可以通过指定区域来解决这个问题。 elasticsearch 客户端存在问题,它无法选择我们在
中指定的区域amazonES: {
region: 'us-east-1',
credentials: new AWS.Credentials('my-access-key','my-secret-key')
}
}
我在上面的代码
前使用AWS.config.region指定区域解决了AWS.config.region = 'us-east-1';