Awesome Open Source
Awesome Open Source

AWS Elasticsearch

Use Elastic's official elasticsearch-js with Amazon Elasticsearch.

npm version


npm i aws-elasticsearch-js


const elasticsearch = require('@elastic/elasticsearch');
const { createConnector } = require('aws-elasticsearch-js');

const region = process.env.AWS_REGION || 'us-east-1';
const domain = '';

const client = new elasticsearch.Client({
  nodes: [ domain ],
  Connection: createConnector({ region })

// use in the normal way
async function example() {
  await client.index({ index: 'test', body: { test: 'hello' } });
  await client.indices.refresh();
  let result = await{ index: 'test' });


The connector will use AWS credentials from the environment.

If you have another method of loading / refreshing credentials, you can pass them using getCreds:

// heads up: this is called on every request
const getCreds = cb => {
  // load creds from somewhere...
  const credentials = { accessKeyId, secretAccessKey };
  // or credentials = { sessionToken }
  const err = null; // if you give an error, the request will abort
  cb(err, credentials);
createConnector({ region, getCreds });


// options and example values
const options = {
  region: 'us-east-1', // AWS region (defaults to process.env.AWS_REGION)
  getCreds: cb => cb(err, credentials) // see above


# make sure aws creds are defined in the environment
AWS_REGION=us-east-1 \
npm test


If you get status code 403:

  • check your code is running with the right role / aws access credentials.
  • make sure your role / user is authorised in the domain's access policy, or choose "allow open access to the domain" if your domain is in VPC.
  • make sure you've allowed your user/role if you're using aws elasticsearch's security and access management.
    • One quick way to do this is go to Kibana > Security > roles > all_access > mapped users > manage mapping > users/backend roles and add the ARNs there.

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Javascript (1,119,969