我遇到了一个问题,我认为应该在互联网上发布。我可能不知道内部问题,但我认为我有解决方案。无论如何问题:
我正在AWS上托管ElasticSearch服务,并且试图在本地或通过托管在AWS上的ec2服务访问该服务。
但是当我在本地尝试时,出现此错误:Request Timeout after 30000ms
在ec2上尝试时,出现以下错误:AWS Credentials error: Could not load credentials from any providers
这是我设置凭据并进行查询的方式:
const AWS = require('aws-sdk');
const connectionClass = require('http-aws-es');
const elasticsearch = require('elasticsearch');
try {
var elasticClient = new elasticsearch.Client({
host: "https://some-elastic.us-east-1.es.amazonaws.com/",
log: 'error',
connectionClass: connectionClass,
amazonES: {
region: 'us-east-1',
credentials: new AWS.Credentials('id', 'key')
}
});
elasticClient.indices.delete({
index: 'foo',
}).then(function (resp) {
console.log("Successful query!");
console.log(JSON.stringify(resp, null, 4));
}, function (err) {
console.trace(err.message);
});
} catch (err) {
console.log(err);
} finally {
}
因此,如上所述,我一直收到此错误。我尝试了许多其他变体来通过凭据。
答案 0 :(得分:0)
我对该问题的模糊理解是,在amazonES对象中设置的credentials
被忽略,或者该区域未与凭据一起传递。因此,AWS不知道在哪里搜索凭证。
无论如何,这是解决方案:
AWS.config.update({
secretAccessKey: 'key',
accessKeyId: 'id',
region: 'your region ex. us-east-1'
});
var elasticClient = new elasticsearch.Client({
host: "https://some-elastic.us-east-1.es.amazonaws.com/",
log: 'error',
connectionClass: connectionClass,
amazonES: {
credentials: new AWS.EnvironmentCredentials('AWS'),
}
});
情况有点麻烦。我无法在任何在线位置找到该解决方案,希望它可以帮助将来遇到相同错误的人。