AWS凭证错误:无法从任何提供程序加载凭证。 ElasticSearch Service node.js

时间:2020-04-12 23:42:17

标签: node.js amazon-web-services elasticsearch

我遇到了一个问题,我认为应该在互联网上发布。我可能不知道内部问题,但我认为我有解决方案。无论如何问题:

我正在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 {
}

因此,如上所述,我一直收到此错误。我尝试了许多其他变体来通过凭据。

1 个答案:

答案 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'),
        }
    });

情况有点麻烦。我无法在任何在线位置找到该解决方案,希望它可以帮助将来遇到相同错误的人。