首页 > 解决方案 > AWS 凭证错误:无法从任何提供商加载凭证。弹性搜索服务 node.js

问题描述

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

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

因此,如前所述,我不断收到此错误。我尝试了许多其他变体来传递凭据。

标签: node.jsamazon-web-serviceselasticsearch

解决方案


我对这个问题的模糊理解是,credentials在 amazonES 对象中设置的内容被忽略,或者该区域没有与凭据一起传递。因此 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'),
        }
    });

这是一个有点错误的情况。我在网上的任何地方都找不到这个解决方案,我希望它能帮助将来遇到同样错误的人。


推荐阅读