Elasticsearch.Net.Aws

Enables request signing necessary for using the AWS Elasticsearch service.


Keywords
elasticsearch, elastic, search, aws, amazon, aws-elasticsearch, c-sharp, dot-net-client, elasticsearch-net, nest
License
Apache-2.0
Install
Install-Package Elasticsearch.Net.Aws -Version 7.2.2

Documentation

Elasticsearch Net for Amazon AWS

Add-on to elasticsearch-net / NEST for using AWS's elasticsearch service.

Install Package

On Nuget:

# For ElasticSearch.Net >= 5.0.0
Install-Package Elasticsearch.Net.Aws
# or for dotnet core
dotnet add package Elasticsearch.Net.Aws

# For ElasticSearch.Net 2.X
Install-Package bcuff.Elasticsearch.Net.Aws-v2
# or for dotnet core
dotnet add package bcuff.Elasticsearch.Net.Aws-v2

# For ElasticSearch.Net 1.X
Install-Package Elasticsearch.Net.Aws-v1
# or for dotnet core
dotnet add package Elasticsearch.Net.Aws-v1

Setup

Elasticsearch.Net Version >= 2.0.2

Use Package Elasticsearch.Net.Aws.

Typical Setup

// for NEST

// This constructor will look up AWS credentials in the
// same way that the AWSSDK does automatically.
var httpConnection = new AwsHttpConnection();

var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var config = new ConnectionSettings(pool, httpConnection);
var client = new ElasticClient(config);

.NET Core Applications using IConfiguration

IConfiguration config = Configuration;
var options = config.GetAWSOptions();
var httpConnection = new AwsHttpConnection(options);

// same as above

Elasticsearch.Net Version 1.7.1

Use Package Elasticsearch.Net.Aws-v1

Source for this version is maintained on the version-1 branch

// for NEST
var client = new ElasticClient(settings, connection: new AwsHttpConnection(settings, new AwsSettings
{
    AccessKey = "My AWS access key",
    SecretKey = "My AWS secret key",
    Region = "us-east-1",
}));

The AwsHttpConnection class is an implemenation of IConnection that will sign the HTTP requests according to the Version 4 Signing Process.

Serilog Sink Setup

In Code

  const string esUrl = "https://aws-es-thinger.us-west-1.es.amazonaws.com";
  Log.Logger = new LoggerConfiguration()
                .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(esUrl))
                {
                    ModifyConnectionSettings = conn =>
                    {
                        var httpConnection = new AwsHttpConnection("us-east-1");
                        var pool = new SingleNodeConnectionPool(new Uri(esUrl));
                        return new ConnectionConfiguration(pool, httpConnection);
                    }
                })
                .CreateLogger();

In Configuration

{
    "Serilog": {
        "Using": ["Serilog", "Serilog.Exceptions", "Serilog.Sinks.Elasticsearch", "Serilog.Enrichers.Environment", "Serilog.Enrichers.Process"],
        "MinimumLevel": "Debug",
        "WriteTo": [{
                "Name": "Elasticsearch",
                "Args": {
                    "nodeUris": "https://******.us-east-1.es.amazonaws.com",
                    "numberOfShards": 5,
                    "numberOfReplicas": 10,
                    "connection": "Elasticsearch.Net.Aws.AwsHttpConnection, Elasticsearch.Net.Aws"
                }
            }
        ],
        "Enrich": ["FromLogContext", "WithMachineName", "WithExceptionDetails"],
    }
}