Skip to content
This repository has been archived by the owner on Mar 6, 2020. It is now read-only.

Commit

Permalink
Merge pull request #36 from agorapulse/feature/endpoint-configuration
Browse files Browse the repository at this point in the history
endpoint configuration
  • Loading branch information
musketyr committed Sep 19, 2019
2 parents 15a6c93 + 49d0a33 commit d30320c
Show file tree
Hide file tree
Showing 32 changed files with 303 additions and 97 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
language: groovy
jdk:
- oraclejdk8
- openjdk8
script:
- "./gradlew check jacocoFullReport coveralls"
before_cache:
Expand Down
13 changes: 13 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,19 @@ subprojects { Project subproject ->
entry 'aws-java-sdk-sts'
entry 'jmespath'
}

dependencySet(group: 'software.amazon.sdk', version: project.awsSdk2Version) {
entry 'core'
entry 'dynamodb'
entry 'kms'
entry 'kinesis'
entry 's3'
entry 'ses'
entry 'sns'
entry 'sqs'
entry 'sts'
}

dependency group: 'com.amazonaws', name: 'amazon-dax-client', version: '1.0.202017.0'
dependency group: 'com.amazonaws', name: 'amazon-kinesis-client', version: '1.9.3'
dependency group: 'com.amazonaws', name: 'aws-lambda-java-events', version: '2.2.5'
Expand Down
11 changes: 6 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
version = 1.1.4
micronautVersion = 1.1.4
version = 1.2.2
micronautVersion = 1.2.2
gruVersion = 0.8.1
druVersion = 0.6.0
groovyVersion = 2.5.7
groovyVersion = 2.5.8
spockVersion = 1.3-groovy-2.5
awsSdkVersion = 1.11.595
testcontainersVersion = 1.11.4
awsSdkVersion = 1.11.633
awsSdk2Version = 2.9.1
testcontainersVersion = 1.12.1

# this should be aligned to Micronaut version
# required for AWS CBOR marshalling
Expand Down
Empty file modified gradlew.bat
100644 → 100755
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.agorapulse.micronaut.aws

import javax.annotation.Nullable

/**
* Default region and endpoint configuration.
*/
class DefaultRegionAndEndpointConfiguration implements RegionAndEndpointConfiguration {

@Nullable String region
@Nullable String endpoint

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.agorapulse.micronaut.aws;

import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.regions.AwsRegionProvider;

import java.util.Optional;

public interface RegionAndEndpointConfiguration {

String getRegion();

String getEndpoint();

default <C, B extends AwsClientBuilder<B, C>> B configure(B builder, AwsRegionProvider awsRegionProvider) {
String region = Optional.ofNullable(getRegion()).orElseGet(awsRegionProvider::getRegion);
if (getEndpoint() != null) {
builder.setEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(getEndpoint(), region));
} else {
builder.setRegion(region);
}
return builder;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.agorapulse.micronaut.aws.cloudwatch

import com.agorapulse.micronaut.aws.DefaultRegionAndEndpointConfiguration
import com.amazonaws.services.cloudwatch.AmazonCloudWatch
import groovy.transform.CompileStatic
import io.micronaut.context.annotation.ConfigurationProperties
import io.micronaut.context.annotation.Requires

import javax.inject.Named

/**
* Default simple storage service configuration.
*/
@Named('default')
@CompileStatic
@ConfigurationProperties('aws.cloudwatch')
@Requires(classes = AmazonCloudWatch)
class CloudWatchConfiguration extends DefaultRegionAndEndpointConfiguration {

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@
import io.micronaut.context.annotation.Bean;
import io.micronaut.context.annotation.Factory;
import io.micronaut.context.annotation.Requires;
import io.micronaut.context.annotation.Value;

import javax.inject.Singleton;
import java.util.Optional;

/**
* Factory for providing CloudWatch.
Expand All @@ -28,11 +26,10 @@ AmazonCloudWatch cloudWatch(
AWSClientConfiguration clientConfiguration,
AWSCredentialsProvider credentialsProvider,
AwsRegionProvider awsRegionProvider,
@Value("${aws.cloudwatch.region}") Optional<String> region
CloudWatchConfiguration configuration
) {
return AmazonCloudWatchClientBuilder.standard()
return configuration.configure(AmazonCloudWatchClientBuilder.standard(), awsRegionProvider)
.withCredentials(credentialsProvider)
.withRegion(region.orElseGet(awsRegionProvider::getRegion))
.withClientConfiguration(clientConfiguration.getClientConfiguration())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.agorapulse.micronaut.aws.dynamodb

import com.agorapulse.micronaut.aws.DefaultRegionAndEndpointConfiguration
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDB
import groovy.transform.CompileStatic
import io.micronaut.context.annotation.ConfigurationProperties
import io.micronaut.context.annotation.Requires

import javax.inject.Named

/**
* Default simple storage service configuration.
*/
@Named('default')
@CompileStatic
@ConfigurationProperties('aws.dynamodb')
@Requires(classes = DynamoDB)
class DynamoDBConfiguration extends DefaultRegionAndEndpointConfiguration {

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,8 @@
import io.micronaut.context.annotation.Bean;
import io.micronaut.context.annotation.Factory;
import io.micronaut.context.annotation.Requires;
import io.micronaut.context.annotation.Value;

import javax.inject.Singleton;
import java.util.Optional;

/**
* Factory class which provides the {@link AmazonDynamoDB} and {@link IDynamoDBMapper} into the application context.
Expand All @@ -30,11 +28,10 @@ AmazonDynamoDB amazonDynamoDB(
AWSClientConfiguration clientConfiguration,
AWSCredentialsProvider credentialsProvider,
AwsRegionProvider awsRegionProvider,
@Value("${aws.dynamodb.region}") Optional<String> region
DynamoDBConfiguration configuration
) {
return AmazonDynamoDBClientBuilder.standard()
return configuration.configure(AmazonDynamoDBClientBuilder.standard(), awsRegionProvider)
.withCredentials(credentialsProvider)
.withRegion(region.orElseGet(awsRegionProvider::getRegion))
.withClientConfiguration(clientConfiguration.getClientConfiguration())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.agorapulse.micronaut.aws.kinesis

import com.amazonaws.services.kinesis.AmazonKinesis
import groovy.transform.CompileStatic
import io.micronaut.context.annotation.ConfigurationProperties
import io.micronaut.context.annotation.Requires

import javax.inject.Named

/**
* Default Kinesis configuration, published with <code>default</code> named qualifier.
*/
@Named('default')
@CompileStatic
@ConfigurationProperties('aws.kinesis')
@Requires(classes = AmazonKinesis)
class DefaultKinesisConfiguration extends KinesisConfiguration {

}
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
package com.agorapulse.micronaut.aws.kinesis

import com.amazonaws.services.kinesis.AmazonKinesis
import com.agorapulse.micronaut.aws.DefaultRegionAndEndpointConfiguration
import groovy.transform.CompileStatic
import io.micronaut.context.annotation.ConfigurationProperties
import io.micronaut.context.annotation.Requires

import javax.inject.Named
import javax.validation.constraints.NotEmpty

/**
* Default Kinesis configuration, published with <code>default</code> named qualifier.
*/
@Named('default')
@CompileStatic
@ConfigurationProperties('aws.kinesis')
@Requires(classes = AmazonKinesis)
class KinesisConfiguration {
@SuppressWarnings('AbstractClassWithoutAbstractMethod')
abstract class KinesisConfiguration extends DefaultRegionAndEndpointConfiguration {

@NotEmpty String stream = ''

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,37 @@
import com.amazonaws.services.kinesis.AmazonKinesisClientBuilder;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.micronaut.configuration.aws.AWSClientConfiguration;
import io.micronaut.context.annotation.*;
import io.micronaut.context.annotation.EachBean;
import io.micronaut.context.annotation.Factory;
import io.micronaut.context.annotation.Requires;

import javax.inject.Singleton;
import java.util.Optional;

@Factory
@Requires(classes = AmazonKinesis.class)
public class KinesisFactory {

@Bean
@Singleton
@EachBean(KinesisConfiguration.class)
AmazonKinesis kinesis(
AWSClientConfiguration clientConfiguration,
AWSCredentialsProvider credentialsProvider,
AwsRegionProvider awsRegionProvider,
@Value("${aws.kinesis.region}") Optional<String> region
KinesisConfiguration configuration
) {
return AmazonKinesisClientBuilder.standard()
return configuration.configure(AmazonKinesisClientBuilder.standard(), awsRegionProvider)
.withCredentials(credentialsProvider)
.withRegion(region.orElseGet(awsRegionProvider::getRegion))
.withClientConfiguration(clientConfiguration.getClientConfiguration())
.build();
}

@Singleton
@EachBean(KinesisConfiguration.class)
KinesisService simpleQueueService(AmazonKinesis kinesis, KinesisConfiguration configuration, ObjectMapper mapper) {
KinesisService simpleQueueService(
AmazonKinesis kinesis,
KinesisConfiguration configuration,
ObjectMapper mapper
) {
return new DefaultKinesisService(kinesis, configuration, mapper);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.agorapulse.micronaut.aws.kinesis.worker

import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibConfiguration
import groovy.transform.CompileStatic
import io.micronaut.context.annotation.ConfigurationProperties
import io.micronaut.context.annotation.Requires
import io.micronaut.context.annotation.Value

import javax.inject.Named

/**
* Default configuration for Kinesis listener.
*/
@CompileStatic
@Named('default')
@ConfigurationProperties('aws.kinesis.listener')
@Requires(classes = KinesisClientLibConfiguration)
@SuppressWarnings('NoWildcardImports')
class DefaultKinesisClientConfiguration extends KinesisClientConfiguration {

DefaultKinesisClientConfiguration(
@Value('${aws.kinesis.application.name:}') String applicationName,
@Value('${aws.kinesis.worker.id:}') String workerId
) {
super(applicationName, workerId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@ import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibC
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.SimpleRecordsFetcherFactory
import com.amazonaws.services.kinesis.metrics.interfaces.MetricsLevel
import groovy.transform.CompileStatic
import io.micronaut.context.annotation.ConfigurationProperties
import io.micronaut.context.annotation.Requires
import io.micronaut.context.annotation.Value

import javax.inject.Named
import javax.validation.constraints.Min
import javax.validation.constraints.NotEmpty

Expand All @@ -21,11 +17,8 @@ import static com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisCli
* Default configuration for Kinesis listener.
*/
@CompileStatic
@Named('default')
@ConfigurationProperties('aws.kinesis.listener')
@Requires(classes = KinesisClientLibConfiguration)
@SuppressWarnings('NoWildcardImports')
class KinesisClientConfiguration {
@SuppressWarnings(['NoWildcardImports', 'AbstractClassWithoutAbstractMethod'])
abstract class KinesisClientConfiguration {

@NotEmpty
String applicationName
Expand Down Expand Up @@ -77,10 +70,7 @@ class KinesisClientConfiguration {
long listShardsBackoffTimeInMillis = DEFAULT_LIST_SHARDS_BACKOFF_TIME_IN_MILLIS
int maxListShardsRetryAttempts = DEFAULT_MAX_LIST_SHARDS_RETRY_ATTEMPTS

KinesisClientConfiguration(
@Value('${aws.kinesis.application.name:}') String applicationName,
@Value('${aws.kinesis.worker.id:}') String workerId
) {
protected KinesisClientConfiguration(String applicationName, String workerId) {
this.applicationName = applicationName
if (workerId) {
this.workerId = workerId
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@
import io.micronaut.context.annotation.Requires;
import io.micronaut.context.annotation.Value;

import javax.inject.Singleton;
import java.util.Optional;

@Factory
@Requires(classes = KinesisClientLibConfiguration.class)
public class KinesisClientConfigurationFactory {

@Singleton
@Requires(property = "aws.kinesis")
@EachBean(KinesisClientConfiguration.class)
KinesisClientLibConfiguration kinesisClientLibConfiguration(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.agorapulse.micronaut.aws.s3

import com.amazonaws.services.s3.AmazonS3
import groovy.transform.CompileStatic
import io.micronaut.context.annotation.ConfigurationProperties
import io.micronaut.context.annotation.Requires

import javax.inject.Named

/**
* Default simple storage service configuration.
*/
@Named('default')
@CompileStatic
@ConfigurationProperties('aws.s3')
@Requires(classes = AmazonS3)
class DefaultSimpleStorageServiceConfiguration extends SimpleStorageServiceConfiguration {

}
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
package com.agorapulse.micronaut.aws.s3

import com.amazonaws.services.s3.AmazonS3
import com.agorapulse.micronaut.aws.DefaultRegionAndEndpointConfiguration
import groovy.transform.CompileStatic
import io.micronaut.context.annotation.ConfigurationProperties
import io.micronaut.context.annotation.Requires

import javax.inject.Named
import javax.validation.constraints.NotEmpty

/**
* Default simple storage service configuration.
*/
@Named('default')
@CompileStatic
@ConfigurationProperties('aws.s3')
@Requires(classes = AmazonS3)
class SimpleStorageServiceConfiguration {
@SuppressWarnings('AbstractClassWithoutAbstractMethod')
abstract class SimpleStorageServiceConfiguration extends DefaultRegionAndEndpointConfiguration {

@NotEmpty String bucket = ''

Expand Down
Loading

0 comments on commit d30320c

Please sign in to comment.