我有一个问题,我认为应该发布到互联网上。我可能不知道内部问题,但我想我有一个解决方案。不管怎样,问题是:
我在亚马逊网络服务上托管了一个ElasticSearch服务,我正试图在本地和/或通过我托管在亚马逊网络服务上的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 {
}
所以如上所述,我一直收到这个错误。我尝试了许多其他变体来传递凭据。
发布于 2020-04-13 07:42:17
我对这个问题的模糊理解是,在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'),
}
});
这是一个有点buggy的情况。我在网上找不到这个解决方案,我希望它能帮助将来遇到同样错误的人。
https://stackoverflow.com/questions/61179618
复制相似问题