从非AWS node.js应用程序连接到AWS Elasticsearch

mar*_*mas 4 heroku amazon-web-services node.js elasticsearch amazon-iam

我正在努力解决我正在研究的项目的基础设施问题.我正在开发的服务托管在一个没有稳定IP的瞬态容器化平台上 - 只有一个域名(api.example.com).我正在使用Elasticsearch进行搜索,因此请求会转到/ my-search-resource之类的内容,然后使用ES查找要返回的结果.它是在节点中编写的,并使用支持的elasticsearch驱动程序连接到ES.

我遇到的问题是尝试使用AWS Elasticsearch域.这个项目是自助式的,所以我正在利用AWS的免费套餐,即使其他服务托管/部署在另一个平台上(想想:heroku,GCP等 - 集装箱化和瞬态资源).

由于我不能将特定IP列入白名单,因此我不确定应该如何使服务能够访问该服务.我需要签署发送到域的每个请求吗?这并不理想,因为它需要使用该功能对ES驱动程序库进行猴子修补.理想情况下,我只想使用username&pw连接到域,但我知道IAM并不是真正面向来自外部服务的东西.有任何想法吗?这甚至可能吗?

Jos*_*ars 11

在我当前的项目中,我们使用普通的elasticsearchNPM包连接到AWS Elastic ,然后http-aws-es在连接时用于创建特定的AWS连接头.

例如,我们有这样的事情:

const es = require( 'elasticsearch' );
const httpAwsEs = require( 'http-aws-es' );

const esClient = es.Client( { 
  hosts: 'somehostonaws',
  connectionClass: httpAwsEs,
  awsConfig: {
    region: 'some-aws-region',
    accessKey: 'some-aws-access-key',
    secretKey: 'some-aws-secret-key'
  }
} );
Run Code Online (Sandbox Code Playgroud)

这不需要整个AWS SDK,但它允许您连接到AWS后面的Elastic.这是您问题的解决方案吗?