AWS S3

<dependency>
	<groupId>org.eclipse.store</groupId>
	<artifactId>afs-aws-s3</artifactId>
	<version>2.1.0</version>
</dependency>
<dependency>
	<groupId>software.amazon.awssdk</groupId>
	<artifactId>s3</artifactId>
	<version>2.26.14</version>
</dependency>

General Purpose Buckets

For general purpose buckets you can create a S3Connector handing over a S3Client. Please refer to the official AWS SDK Documentation for details.

S3Client client = S3Client.builder()
	.credentialsProvider(StaticCredentialsProvider.create(
		AwsBasicCredentials.create(ACCESS_KEY, SECRET_ACCESS_KEY)
	))
	.region(Region.EU_NORTH_1)
	.build()
;
BlobStoreFileSystem fileSystem = BlobStoreFileSystem.New(
	S3Connector.Caching(client)
);
EmbeddedStorage.start(fileSystem.ensureDirectoryPath("bucket-name", "folder", "subfolder"));

Configuration

When using external configuration, the properties can be set as follows.

eclipsestore.properties
# optional, enforces checks
storage-filesystem.target=aws.s3

storage-directory=bucket-name/folder/subfolder
storage-filesystem.aws.s3.credentials.type=static
storage-filesystem.aws.s3.credentials.access-key-id=my-access-key-id
storage-filesystem.aws.s3.credentials.secret-access-key=my-secret-access-key
storage-filesystem.aws.s3.region=us-east-1

Directory Buckets

If you want to use directory buckets just create a S3Connector with a different factory method. Additionally you have to specify the zonal endpoint.

S3Client client = S3Client.builder()
	.credentialsProvider(StaticCredentialsProvider.create(
		AwsBasicCredentials.create(ACCESS_KEY, SECRET_ACCESS_KEY)
	))
	.region(Region.EU_NORTH_1)
	.endpointOverride(new URI("https://s3express-eun1-az1.eu-north-1.amazonaws.com"))
	.build()
;
BlobStoreFileSystem fileSystem = BlobStoreFileSystem.New(
	S3Connector.CachingDirectory(client)
);
EmbeddedStorage.start(fileSystem.ensureDirectoryPath("bucket-name", "folder", "subfolder"));

Configuration

When using external configuration, the properties can be set as follows.

eclipsestore.properties
storage-directory=bucket-name/folder/subfolder
storage-filesystem.aws.s3.directory-bucket=true
storage-filesystem.aws.s3.credentials.type=static
storage-filesystem.aws.s3.credentials.access-key-id=my-access-key-id
storage-filesystem.aws.s3.credentials.secret-access-key=my-secret-access-key
storage-filesystem.aws.s3.region=eu-north-1
storage-filesystem.aws.s3.endpoint-override=https://s3express-eun1-az1.eu-north-1.amazonaws.com

Supported properties

Property Description Type

endpoint-override

The endpoint with which the SDK should communicate.

String

cache

Defines if the S3Connector should use caching.

Boolean

directory-bucket

true if a directory bucket is used, false for general purpose buckets. For details see the official AWS documentation [1] [2]

Boolean

region

Configure the region with which the SDK should communicate. If this is not specified, the SDK will attempt to identify the endpoint automatically using the following logic:

  1. Check the 'aws.region' system property for the region.

  2. Check the 'AWS_REGION' environment variable for the region.

  3. Check the {user.home}/.aws/credentials and {user.home}/.aws/config files for the region.

  4. If running in EC2, check the EC2 metadata service for the region.

String

credentials.type

The type of the credentials provider. Supported values are:

  • "environment-variables" Credentials will be loaded from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

  • "system-properties" Credentials will be loaded from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

  • "static" Credentials will be loaded from the credentials.access-key-id and credentials.secret-access-key properties.

  • "default" Credentials provider chain that looks for credentials in this order:

    1. Java System Properties - aws.accessKeyId and aws.secretKey

    2. Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    3. Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    4. Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" environment variable is set and security manager has permission to access the variable,

    5. Instance profile credentials delivered through the Amazon EC2 metadata service

String

credentials.access-key-id

The access key id, used when "credentials.type" is "static".

String

credentials.secret-access-key

The secret access key, used when "credentials.type" is "static".

String

Depending on the amount of data and transactions, charges may apply depending on service usage. Please check with your service provider for details.