aws-athena-query-federation: [BUG] Elasticsearch Connector does not work with VPC

Describe the bug When using the connector with cluster inside of a vpc, the connector does not work.

Any request made to elasticsearch itself will fail to sign with a message like:

java.lang.RuntimeException: com.amazonaws.services.lambda.invoke.LambdaFunctionException: Error processing request to list indices: Unable to calculate a request signature: null

Full stack trace of which:

Error processing request to list indices: Unable to calculate a request signature: null: java.lang.RuntimeException
java.lang.RuntimeException: Error processing request to list indices: Unable to calculate a request signature: null
	at com.amazonaws.connectors.athena.elasticsearch.ElasticsearchMetadataHandler.doListTables(ElasticsearchMetadataHandler.java:211)
	at com.amazonaws.athena.connector.lambda.handlers.MetadataHandler.doHandleRequest(MetadataHandler.java:243)
	at com.amazonaws.athena.connector.lambda.handlers.CompositeHandler.handleRequest(CompositeHandler.java:132)
	at com.amazonaws.athena.connector.lambda.handlers.CompositeHandler.handleRequest(CompositeHandler.java:100)
Caused by: java.lang.RuntimeException: Unable to calculate a request signature: null
	at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:812)
	at org.elasticsearch.client.RestClient.performRequest(RestClient.java:225)
	at org.elasticsearch.client.RestClient.performRequest(RestClient.java:212)
	at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1433)
	at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1403)
	at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1373)
	at org.elasticsearch.client.IndicesClient.getAlias(IndicesClient.java:986)
	at com.amazonaws.connectors.athena.elasticsearch.AwsRestHighLevelClient.getAliases(AwsRestHighLevelClient.java:82)
	at com.amazonaws.connectors.athena.elasticsearch.ElasticsearchMetadataHandler.doListTables(ElasticsearchMetadataHandler.java:196)
	... 3 more
Caused by: com.amazonaws.SdkClientException: Unable to calculate a request signature: null
	at com.amazonaws.auth.AbstractAWSSigner.sign(AbstractAWSSigner.java:109)
	at com.amazonaws.auth.AWS4Signer.newSigningKey(AWS4Signer.java:641)
	at com.amazonaws.auth.AWS4Signer.deriveSigningKey(AWS4Signer.java:404)
	at com.amazonaws.auth.AWS4Signer.sign(AWS4Signer.java:253)
	at com.amazonaws.connectors.athena.elasticsearch.AWSRequestSigningApacheInterceptor.process(AWSRequestSigningApacheInterceptor.java:128)
	at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:133)
	at org.apache.http.impl.nio.client.MainClientExec.prepareRequest(MainClientExec.java:520)
	at org.apache.http.impl.nio.client.MainClientExec.prepare(MainClientExec.java:146)
	at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.start(DefaultClientExchangeHandlerImpl.java:128)
	at org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:141)
	at org.elasticsearch.client.RestClient.performRequest(RestClient.java:221)
	... 10 more
Caused by: java.lang.NullPointerException
	at com.amazonaws.auth.AbstractAWSSigner.sign(AbstractAWSSigner.java:104)
	... 20 more

The reason being is because a cluster within a vpc does not have an endpoint, but endpoints. My pull request shows what I mean:

https://github.com/awslabs/aws-athena-query-federation/pull/339

I’m not sure what other problems are caused by having a domain within the VPC. Getting this project to run is not trivial. The setup, install, and publish instructions are invalid for my dev environment (Mac) and even for a fresh AmazonLinux2 EC2. The ./tools/prepare_dev_env.sh script throws several errors (on linux. i know it’s not compatible with mac), and running mvn clean install in the elasticsearch project throws this error (on mac and linux):

[ERROR] Failed to execute goal on project athena-elasticsearch: Could not resolve dependencies for project com.amazonaws:athena-elasticsearch:jar:1.0: Failed to collect dependencies at com.amazonaws:aws-athena-federation-sdk:jar:2020.51.1: Failed to read artifact descriptor for com.amazonaws:aws-athena-federation-sdk:jar:2020.51.1: Could not find artifact com.amazonaws:aws-athena-query-federation:pom:1.0 in central (https://repo.maven.apache.org/maven2) -> [Help 1]

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 17 (7 by maintainers)

Most upvoted comments

The Elasticsearch connector in its present form does not support a VPC configuration, and will need to be enhanced to support the latter. We will prioritize this enhancement in the near future.

The issue should have been resolved in Release v2023.13.1 of Athena Query Federation with pull request #1157. Please deploy a new version of the connector, thank you.