A tiny Amazon Signature Version 4 connection class for the official Elasticsearch Node.js client, for compatibility with AWS Elasticsearch and IAM authentication.
For legacy Elasticsearch.js 16.x support, use version 7.x of this library.
npm install --save aws-elasticsearch-connector @elastic/elasticsearch aws-sdk
const { Client } = require('@elastic/elasticsearch');
const { AmazonConnection } = require('aws-elasticsearch-connector');
const client = new Client({
node: 'my-elasticsearch-cluster.us-east-1.es.amazonaws.com',
Connection: AmazonConnection({
credentials: {
accessKeyId: 'foo',
secretAccessKey: 'bar',
sessionToken: 'baz' // optional
}
})
});
const AWS = require('aws-sdk');
const { Client } = require('@elastic/elasticsearch');
const { AmazonConnection } = require('aws-elasticsearch-connector');
// Load AWS profile credentials
AWS.config.update({
profile: 'my-profile'
});
const client = new Client({
node: 'my-elasticsearch-cluster.us-east-1.es.amazonaws.com',
Connection: AmazonConnection()
});
AWS_ACCESS_KEY_ID=foo # alias: AWS_ACCESS_KEY
AWS_SECRET_ACCESS_KEY=bar # alias: AWS_SECRET_KEY
AWS_SESSION_TOKEN=baz
const { Client } = require('@elastic/elasticsearch');
const { AmazonConnection } = require('aws-elasticsearch-connector');
const client = new Client({
node: 'my-elasticsearch-cluster.us-east-1.es.amazonaws.com',
Connection: AmazonConnection(),
});
When reading AWS credentials from an IAM role or an EC2/ECS profile, the credentials
will be retrieved and refreshed automatically. In this case you'll need to use the
bundled AmazonTransport
transport which will call AWS.Config.getCredentials()
before each ElasticSearch request to ensure that the latest credentials are used.
const { Client } = require('@elastic/elasticsearch');
const { AmazonConnection, AmazonTransport } = require('aws-elasticsearch-connector');
const client = new Client({
node: 'my-elasticsearch-cluster.us-east-1.es.amazonaws.com',
Connection: AmazonConnection(),
Transport: AmazonTransport
});
npm test
# Run integration tests against a real endpoint
AWS_PROFILE=your-profile npm run test:integration -- \
--endpoint https://amazon-es-host.us-east-1.es.amazonaws.com