node.js - 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 {
}
因此,如前所述,我不断收到此错误。我尝试了许多其他变体来传递凭据。
解决方案
我对这个问题的模糊理解是,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'),
}
});
这是一个有点错误的情况。我在网上的任何地方都找不到这个解决方案,我希望它能帮助将来遇到同样错误的人。
推荐阅读
- reactjs - redux reducer 中的重定向路由器
- php - 500 内部服务器错误 - 表单验证(Laravel)
- python - SymPy 给出错误的特征值?
- python - conda 没有显示更新的包
- maven - 如何在 Maven 版本中跳过模块:准备
- java - Apache Nutch 跳过 URL 和截断
- c# - 异步套接字在 Unity-iOS 上间歇性挂起
- c# - 如何解决对 XMLHttpRequest 的访问已被 CORS 策略阻止?
- jquery - jQuery 加载新视图,然后加载部分视图
- excel - excel公式如果数字然后vlookup以获取行中关联的文本