Releases: awspring/spring-cloud-aws
3.0.0-M1
Spring Cloud AWS 3.0 is a rewrite of the project using AWS SDK v2 for Java. Since this has required a major refactoring, we took it as an opportunity to revisit all the assumptions and integrations modules. As a result, we've produced a library that is lightweight, flexible, causes less headache, provides simple to use abstractions and also works much better with Kotlin.
Only a subset of integrations have been migrated in M1:
- S3
- SES
- SNS
- Secrets Manager
- Parameter Store
We strongly recommend checking out completely rewritten reference documentation for a deep dive into each integration including code samples:
📗 https://docs.awspring.io/spring-cloud-aws/docs/3.0.0-M1/reference/html/index.html
Core
Dropped support for XML configuration and @EnableXXX
annotations. Spring Cloud AWS can be used either with Spring Boot auto-configurations, or beans have to be created manually.
New properties prefix
All Spring Cloud AWS related properties have moved from cloud.aws
to spring.cloud.aws
prefix.
Endpoint configuration
Endpoint used by all integrations can be configured through a property:
spring.cloud.aws.endpoint=http://localhost:4566
Endpoint used by an individual integration can be also defined per integration:
spring.cloud.aws.s3.endpoint=http://localhost:4566
This is especially useful when Localstack is used instead of real AWS.
Credentials and region configuration
Credentials and region are resolved through the new interfaces from AWS SDK v2 for Java: software.amazon.awssdk.auth.credentials.AwsCredentialsProvider
and software.amazon.awssdk.regions.providers.AwsRegionProvider
.
It is possible to configure both through properties. In special cases, users can provide custom implementations of these interfaces to opt-out from ones that are auto-configured. Check the reference documentation for more details.
Nullability annotations
Every class field, method parameter and return value is annotated with @NonNull
or @Nullable
annotation, making it easier to use with null safe languages like Kotlin.
AWS Client Builder Configurers
AwsClientBuilderConfigurer
simplifies applying same configuration for endpoint, region and credentials to user defined AWS clients beans:
import io.awspring.cloud.autoconfigure.core.AwsClientBuilderConfigurer;
...
@Bean
TextractClient textractClient(AwsClientBuilderConfigurer configurer) {
return configurer.configure(TextractClient.builder()).build();
}
AWS Client Customizers
AwsClientCustomizer
simplifies customizing AWS clients created by integrations without overwriting complete beans:
import io.awspring.cloud.autoconfigure.core.AwsClientCustomizer;
...
@Component
class S3AwsClientClientConfigurer implements AwsClientCustomizer<S3ClientBuilder> {
@Override
public ClientOverrideConfiguration overrideConfiguration() {
...
}
@Override
public SdkHttpClient httpClient() {
...
}
}
Note that AwsClientCustomizer
is a parameterized type, and the type determines to which client customization gets applied.
S3
- all S3 related classes have moved to
io.awspring.cloud.s3
package. SimpleStorageResource
has been renamed toS3Resource
- S3 client can be configured with
spring.cloud.aws.s3
properties - dropped support for
ResourcePatternResolver
.
Cross-Region S3 client
S3Client
implementation provided by Spring Cloud AWS can access buckets in any region. When accessed bucket is in other region than the one provided for S3 auto-configuration, the CrossRegionS3Clients
handles redirects sent by S3 transparently.
Output Streams
S3 integration comes with three implementations of the OutputStream
used under the hood by S3Resource
for writing data to S3.
InMemoryBufferingS3OutputStream
(default) - buffers content of the uploaded file in memory and uploads to S3 using multipart uploadDiskBufferingS3OutputStream
- saves uploaded file to temporary folder on disk and uploads to S3 in single chunkTransferManagerS3OutputStream
- uses experimental Transfer Manager to upload files to S3. Requires adding a dependency tosoftware.amazon.awssdk:s3-transfer-manager
To use different output stream than one provided by auto-configuration, define a bean of type S3OutputStreamProvider
- either with custom implementation or one of: DiskBufferingS3OutputStreamProvider
, TransferManagerS3OutputStreamProvider
, InMemoryBufferingS3OutputStreamProvider
.
S3Template
S3Template
is a new class that simplifies performing common operations on S3 buckets and S3 objects. It also supports reading and persisting Java objects to S3. Spring Cloud AWS provides Jackson based Jackson2JsonS3ObjectConverter
which serialized persisted objects into JSON files. Custom object converted can be provided by defining a bean of type S3ObjectConverter
.
Object Metadata Support
Both S3Resource
and S3Template
support setting object metadata through a builder-like object ObjectMetadata
.
Content-Type Resolution
If uploaded file to S3 does not have contentType
metadata property set, both S3Resource
and S3Template
will resolve content type through S3ObjectContentTypeResolver
. The default implementation resolves content type by file extension. The framework provides a comprehensive support for 817 file extensions.
SES
SES integration does not bring any new features in comparison to what's offered in version 2.4.1.
SES integration can be configured using properties with spring.cloud.aws.ses
prefix.
SNS
On top of what's been offered in 2.4.1, SNS integration provides a simple interfaces for sending notifications with custom payload and headers using SnsOperations#sendNotification
method and SnsNotification
object.
Because SNS Message Manager has not been migrated to AWS SDK v2, we had to drop support for message signature validation. We hope AWS finishes migration before Spring Cloud AWS reaches 3.0 GA.
SNS integration can be configured using properties with spring.cloud.aws.sns
prefix.
Secrets Manager
- dropped support for loading properties from Secrets Manager using Spring Cloud Bootstrap - only loading through
spring.config.import=aws-secretsmanager
is now possible - added support for loading both secrets containing JSON and plain text
- simplified using custom
SecretsManagerClient
Secrets Manager integration can be configured using properties with spring.cloud.aws.secretsmanager
prefix.
Parameter Store
- dropped support for loading properties from Parameter Store using Spring Cloud Bootstrap - only loading through
spring.config.import=aws-parameterstore
is now possible - simplified using custom
SsmClient
Parameter Store integration can be configured using properties with spring.cloud.aws.parameterstore
prefix.
Reference Documentation
Reference documentation has been rewritten with simplicity and "straight to the point" attitude.
📗 https://docs.awspring.io/spring-cloud-aws/docs/3.0.0-M1/reference/html/index.html
Feedback
We are aware that this release breaks existing code but this was the only sensible way we could evolve the framework and meet the demand in constrained time we have. We are very open for your feedback and appreciate any shoutout on social media and Github ⭐️.
This release would not happen without our wonderful community. Big thanks for your bug reports, ideas and pull requests!
New Contributors
- @mcruzdev made their first contribution in #76
- @zeldigas made their first contribution in #310
- @anthonyfoulfoin made their first contribution in #338
- @willome made their first contribution in #353
- @anugrahsinghal made their first contribution in #360
- @krimsz made their first contribution in #361
- @sgarfinkel made their first contribution in #400
Full Changelog: v2.4.1...v3.0.0-M1
2.3.5
This release backports a fix from 2.4.1 to 2.3.x for Spring Boot 2.4 & 2.5 compatibility
- Relax prefix validation rules in Parameter Store and Secrets Manager #304 @MatejNedic
📗 https://docs.awspring.io/spring-cloud-aws/docs/2.3.5/reference/html/index.html
2.4.1
- Relax prefix validation rules in Parameter Store and Secrets Manager #303 @MatejNedic
- Configure signing region when endpoint is overwritten. #272 @maciejwalkowiak
- Mention Spring Integration AWS and Spring Cloud Stream AWS Kinesis Binder projects in docs #288 @maciejwalkowiak
- Adds array properties support to Parameter Store. #248 @rmpestano
- Upgrade AWS SDK to 1.12.195 #304 @maciejwalkowiak
Big thanks to all contributors!
📗 https://docs.awspring.io/spring-cloud-aws/docs/2.4.1/reference/html/index.html
2.4.0
This version brings compatibility with Spring Boot 2.6 and few enhancements:
SQS
Add @SqsTest
annotation to simplify SQS integration testing (#235) @maciejwalkowiak
Complete example on how to test SQS listener with @SqsTest
, Localstack and Testcontainers.
SNS
Verify SNS messages in HTTP subscription mode (#240) @MatejNedic @WtfJoke @maciejwalkowiak
Core
Upgrade to Spring Cloud Build commons to 3.1.0 (#211) @spencergibb
Big thanks to all contributors!
📗 https://docs.awspring.io/spring-cloud-aws/docs/2.4.0/reference/html/index.html
2.3.4
This version brings several bug fixes and small improvements:
Parameter Store & Secrets Manager
- Fix logging for Parameter Store and Secrets Manager integrations (#229) @maciejwalkowiak
- Allow empty prefix in Secrets Manager and Parameter Store integrationns (#233, #216) @MatejNedic @menneske2
- Fix property loading order for Parameter Store and Secrets Manager when used with Spring Cloud Bootstrap (#225) @maciejwalkowiak
SQS
- Autoconfigure
QueueMessagingTemplate
(#230) @maciejwalkowiak - Fix handling errors when processing SQS FIFO queue (#192) @fernandomoraes
- Ensure that
SqsMessageDeletionPolicy
isNO_REDRIVE
if one provided by parameter isnull
. (#231) @maciejwalkowiak
Core
Big thanks to all contributors!
📗 https://docs.awspring.io/spring-cloud-aws/docs/2.3.4/reference/html/index.html
2.3.3
This version solves bumps a spring-messaging
dependency to 5.3.13. Previous Spring Cloud AWS versions relied on spring-messaging
that suffered from a security vulnerability (#206). If you relied on Spring Cloud AWS to determine spring-messaging
version, please update to Spring Cloud AWS 2.3.3.
Changes:
- Fix: context order when loading properties (Parameter Store and Secrets Manager) - @WtfJoke
- Docs: Mention no Aurora support in RDS docs (RDS) - @aravindparappil46
- Dependency Upgrade: Upgrade Maven Wrapper - @tinexw
- Enhancement: Log exception on message processing failure (SQS) - @ebussieres
- Dependency Upgrade: Upgrade Spring Cloud Build to 3.0.5 - @maciejwalkowiak
- Dependency Upgrade: Upgrade AWS SDK to 1.12.129 - @maciejwalkowiak
Big thanks to contributors and @MatejNedic & @eddumelendez for reviews and support!
📗 https://docs.awspring.io/spring-cloud-aws/docs/2.3.3/reference/html/index.html
2.3.2
- Fix: Prevent registering beans more than once in Parameter Store and Secrets Manager integration #142 (Parameter Store & Secrets Manager) - @MatejNedic
- Fix: Prefix not being validated for other slashes #147 (Parameters Store & Secrets Manager) - @MatejNedic
- Fix: Execute all messages received from SQS #138 (SQS) - @LeonieAdis
- Feat: Add SNS FIFO Topic support #130 (SNS) - @codingtim
Thanks to @neiljbrown @shawnjohnson @SergeiKhmelevSPA @joaomlneto for improving the reference documentation!
📗 http://docs.awspring.io/spring-cloud-aws/docs/2.3.2/reference/html/index.html
2.3.1
Bugfix release:
- Fixed Parameter Store integration startup errors (#101) - @MatejNedic
2.3.0
On the top of changes in 2.3 RC2, in Spring Cloud AWS 2.3 we added:
SQS
FIFO queue support introduced in Spring Cloud AWS 2.3 RC2 is not compatible with the AmazonSQSBufferedAsyncClient
used by default in SQS integration. When FIFO queues are used, we recommend creating custom SQS client bean, otherwise a warning message will be logged. Related issues:
2.3.0-RC2
Spring Cloud AWS 2.3 RC2 Release Notes
Spring Cloud AWS 2.3 is compatible with Spring Boot 2.4 and Spring Cloud 2020.0. It's a first release in the new community driven organisation awspring
- which means that module group ids and package names have changed from org.springframework.cloud.aws
to io.awspring.cloud
.
Find most important changes organised by Spring Cloud AWS module:
Core
Configurable ClientConfiguration
ClientConfiguration
used when initializing AWS clients, can be now defined by creating a bean with name "com.amazonaws.ClientConfiguration.BEAN_NAME".
It’s also possible to provide ClientConfiguration for particular integration by defining a bean of type ClientConfiguration
and a name specific to the integration, for example for SQS client, the bean name must be sqsClientConfiguration
.
Speed-up Startup Time
In order to speed up startup times applications that do not use EC2 instance data, ContextInstanceDataAutoConfiguration
is disabled by default. To enable it, set cloud.aws.instance.data.enabled
to true
.
AWS SDK Version Upgrade
AWS SDK has been upgraded to 1.11.951
Configurable endpoint for each integration
For each integrated AWS service you can configure Spring Cloud AWS to use a custom endpoint using configuration properties. For example:
cloud.aws.s3.endpoint=http://localhost:4566
cloud.aws.sqs.endpoint=http://localhost:4566
cloud.aws.rds.endpoint=http://localhost:4566
Using custom endpoint can be especially useful when using Localstack in integration tests.
Deprecate XML configuration
XML Configuration is now deprecated and is going to be removed in the major version upgrade.
Configurable region for each integration
In addition to global region configuration, each integration can have a different region set statically. Read More
Deprecate @EnableXXX
annotations
@EnableXXX
annotations have been deprecated. We recommend using Spring Boot auto-configurations.
Simplify disabling integrations
Each service can be now enabled/disabled with enabled
property.
Simplify SDK configuration
DefaultAWSCredentialsProvider
and DefaultAWSRegionProviderChain
are used now by default. cloud.aws.credentials.use-default-aws-credentials-chain
and cloud.aws.region.use-default-aws-region-chain
properties were dropped.
CloudFormation
To simplify project setup for applications that do not use CloudFormation support, CloudFormation related auto-configurations have been disabled by default. To enable CloudFormation support in Spring Cloud AWS you must add following dependency that will trigger ContextStackAutoConfiguration
:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-cloudformation</artifactId>
</dependency>
SES
SES support has been extracted from context
module to separate spring-cloud-aws-ses
module. There is also a dedicated starter spring-cloud-aws-ses-starter
.
Cognito
Spring Cloud AWS comes with basic support for AWS Cognito, simplifying configuring OAuth2. Read More
Parameter Store
- Support loading properties through
spring.config.import
introduced in Spring Cloud 2020.0 Read More - Dropped the dependency to
javax.validation:validation-api
Secrets Manager
- Support loading properties through
spring.config.import
introduced in Spring Cloud 2020.0 Read More - Removed the dependency to auto-configure module #526
- Dropped the dependency to
javax.validation:validation-api
- Allow Secrets Manager prefix without "/" in the front #736
SQS
SimpleMessageListenerContainer#isQueueRunning
method is now visible to extending classes. #350- Added support for SQS custom data types #410
- Added support for native SQS messages in
SqsListener
argument #295 - Added global configuration for message deletion policy #188
- Fixed queue listener graceful shutdown by increasing queue stop time to 20 seconds.
queueStopTimeout
can be configurable via SimpleMessageListenerContainerFactory #504 #507 - Added support for primitives and no specific data type in SQS message attributes. #221 #374
- Added support for resolving
SqsMessageHeaders
inSqsListener
. AddedApproximateFirstReceiveTimestamp
,ApproximateReceiveCount
andSentTimestamp
headers #296 - SQS listeners by default instead of creating custom
ObjectMapper
instance, use one present in the application context #533, #522, #540 - Add support for SQS FIFO queues #40
S3
SimpleStorageResource
sets content-type
property on the S3 object metadata #262
SNS
@NotificationMessageMapping
handles properly special characters #645- Support String Array SNS messageAttributeDataType #368
RDS
Make RDS instance name configuration more flexible. For example, for instance name test
, instead of setting cloud.aws.rds.test.username=user
property you must now set:
cloud.aws.rds.instances[0].db-instance-identifier=test
cloud.aws.rds.instances[0].username=user
CloudWatch
Removed spring-cloud-aws-actuator
module. Instead we recommend using the dependency to micrometer-registry-cloudwatch
directly. #571