Skip to content

Releases: aws-powertools/powertools-lambda-java

v2.0.0

12 Jun 09:02
Compare
Choose a tag to compare

Powertools for AWS Lambda (Java) 2.0.0 🎉

We are super happy to announce our new major version – v2.0.0 🎉🎉!

We've made Java ecosystem integration the focus of this release, with a complete redesign of the Logging utility to support popular Java logging paradigms and improved modularity across all utilities to reduce deployment package size.

🌟 We couldn't have done this without you 🌟

Thanks to everyone in the community for their patience and assistance as we've been working on this release. Your feedback has been invaluable in shaping this major update.

A special thanks to @jeromevdl and @scottgerring for their amazing contributions to this milestone.

We care deeply about minimizing breaking changes

Over the past few months, we carefully selected each breaking change to make, and crafted an extensive upgrade guide to ease your transition to v2. Please let us know whether we can make your upgrade process easier.

What's New in v2 ✨

Java Version Support 🚀

  • Minimum required Java version is now Java 11 (Java 8 support has been removed)

Redesigned Logging Utility 📝

  • Complete redesign to support popular Java logging paradigms
  • Now supports slf4j as logging interface with choice of log4j2 or logback implementations
  • Replaced LambdaJsonLayout with standard JsonTemplateLayout
  • Uses native slf4j primitives for better integration with Java ecosystem

The new logging utility introduces advanced structured argument serialization features, allowing for more expressive and detailed logging. You can now easily add structured context to your log messages:

// Before v2
private static final Logger LOGGER = LogManager.getLogger(PaymentFunction.class);
LoggingUtils.appendKey("cardNumber", card.getId());

// After v2
private static final Logger LOGGER = LoggerFactory.getLogger(PaymentFunction.class);
MDC.put("cardNumber", card.getId());

// Add structured data directly in log messages
LOGGER.info("Collecting payment", StructuredArguments.entry("orderId", order.getId()));
// { "message": "Collecting payment", ..., "orderId": 123}

// Add multiple structured fields at once
Map<String, String> customKeys = new HashMap<>();
customKeys.put("paymentId", payment.getId());
customKeys.put("amount", payment.getAmount());
LOGGER.info("Payment successful", StructuredArguments.entries(customKeys));
// { "message": "Payment successful", ..., "paymentId": 123, "amount": 12.99}

Updated Metrics Utility 📊

  • Redesigned to be more modular and support multiple metrics providers
  • @Metrics annotation renamed to @FlushMetrics
  • MetricsLogger.metricsLogger() renamed to MetricsFactory.getMetricsInstance()
  • put methods replaced with add methods (e.g., putMetric()addMetric())

This update also brings feature parity with other Powertools for AWS Lambda runtimes, ensuring a consistent experience across Python, TypeScript, .NET, and Java implementations.

// Before v2
@Metrics(namespace = "ExampleApplication", service = "booking")
metricsLogger.putMetric("SuccessfulBooking", 1, Unit.COUNT);

// After v2
@FlushMetrics(namespace = "ExampleApplication", service = "booking")
metrics.addMetric("SuccessfulBooking", 1, MetricUnit.COUNT);

Tracing Updates 🔍

  • Removed deprecated captureResponse and captureError parameters from @Tracing annotation
  • Replaced with new captureMode parameter
// Before v2
@Tracing(captureError = false, captureResponse = false)

// After v2
@Tracing(captureMode = CaptureMode.DISABLED)

Parallel Batch Processing ⚡

  • New support for processing batch items in parallel using processBatchInParallel()
  • Available for SQS, Kinesis, and DynamoDB Streams (not supported for SQS FIFO queues)
  • Automatically propagates logging context to each worker thread
  • Improves throughput for IO-bound workloads
// Before v2 - Sequential processing
return handler.processBatch(sqsEvent, context);

// After v2 - Parallel processing
return handler.processBatchInParallel(sqsEvent, context);

The batch processing utility now intelligently handles logging context propagation across worker threads, ensuring that your structured logging context is maintained in parallel execution environments. This makes it easier to trace and debug parallel batch operations while maintaining the same logging experience as sequential processing.

Modularized Utilities 📦

  • Idempotency: Split into sub-modules by provider to improve modularity
  • Parameters: Split into sub-modules by provider to reduce deployment package size
  • SQS: Removed powertools-sqs module in favor of the more generic powertools-batch utility

Custom Resources Updates 🔄

  • Removed deprecated Response.failed() and Response.success() methods
  • Now require physical resource ID parameter
// Before v2
return Response.success();
return Response.failed();

// After v2
return Response.success(physicalResourceId);
return Response.failed(physicalResourceId);

Validation Improvements ✅

The Validation utility now better integrates with other utilities from the library, providing a more cohesive experience when combining multiple Powertools features in your applications.

  • Returns 4xx error codes instead of 5xx when used with API Gateway, aligning with HTTP standards
  • Validating batch event sources now adds failed events as partial batch failures instead of failing the whole batch, improving resilience

Dependencies 📚

  • AspectJ runtime no longer included by default – must be added as a dependency
  • Renamed powertools-core to powertools-common

Backwards incompatible changes

Area Change Code Change Required
Logging The logging module was re-designed from scratch to support popular Java logging paradigms Yes
Metrics Changed public interface to remove direct coupling with aws-embedded-metrics-java Yes
Tracing Removed deprecated captureResponse and captureError options on @Tracing annotation Yes
Idempotency The powertools-idempotency module was split by provider Yes
Parameters The powertools-parameters module was split by provider Yes
Batch Processing Removed deprecated powertools-sqs module in favor of the more generic Batch Processing utility Yes
Custom Resources Removed deprecated Response.failed() and Response.success() methods Yes
Dependencies AspectJ runtime not included by default anymore Yes
Language support Removed support for Java 8. The minimum required Java version is Java 11 N/A

Migration Guide

For detailed migration instructions, please refer to our upgrade guide.

We've made minimal breaking changes to make your transition to v2 as smooth as possible. The upgrade guide provides step-by-step instructions for each utility.


Thank you for using Powertools for AWS Lambda (Java)! We're committed to helping you build better serverless applications with less code. ❤️

Changes

Read more

v2.0.0-RC1

11 Jun 15:02
Compare
Choose a tag to compare
chore(ci): bump version to 2.0.0-RC1

v1.20.2

20 May 08:40
Compare
Choose a tag to compare
chore(ci): bump version to 1.20.2

v1.20.1

08 Apr 15:04
8dcdddf
Compare
Choose a tag to compare

v1.20.1 Release Notes

Summary

This minor release contains a bug fix that caused unwanted warnings when using Powertools Logging in combination with utilities depending on the AWS SDK.

⭐️ Thanks to @ntestor for his first contribution to Powertools for AWS Lambda in Java!

Bug fix: Append correct Powertools version to AWS SDK HTTP User-Agent header (#1813)

When consumed as a JAR, Powertools could not parse the version.properties file which is loaded at runtime to append the running version of Powertools to the User-Agent header sent by AWS SDK HTTP calls. This caused a warning logged by Powertools Logging when used in combination with utilities depending on the AWS SDK such as Powertools Parameters.

Thanks to @epomatti for reporting this.

Changes

  • docs: fix 2 typos (#1739) by @ntestor
  • docs: Correct XML formatting for Maven configuration in Large Messages utility docs (#1796) by @jreijn
  • fix: Load version.properties file as resource stream to fix loading when packaged as jar (#1813) by @phipag

This release was made possible by the following contributors:

@jreijn, @ntestor and @phipag

v1.20.0

25 Mar 10:25
1557a63
Compare
Choose a tag to compare

Summary

This release improves the CloudFormation Custom Resource module by allowing you to set a reason field on the Response object. This is useful to report details about the resource for debugging purposes.

Response response = Response.builder()
                            .reason("<Some Text>")
                            .build();

⭐️ Thanks to @moizsh for his first contribution to Powertools for AWS Lambda in Java!

Changes

  • feat(cfn-custom-resource): Add optional 'reason' field for detailed failure reporting (#1758) by @moizsh

This release was made possible by the following contributors:

@moizsh and @phipag

v1.19.0

07 Mar 15:12
d5e1cc6
Compare
Choose a tag to compare

Summary

This release includes important improvements regarding the project’s security management. We addressed several CVEs and implemented OpenSSF Scorecard reporting.

Additionally, we fixed bugs in the Parameters module and improved our documentation and examples.

Thanks to @chrisclayson and @jasoniharris for reporting and fixing those bugs.

Security Posture

We introduced the Open Source Security Foundation (OSSF) Scorecard project to generate security health metrics, proactive security alerts, and attest we've been following OSSF Best Practices.

Thanks to this new reporting mechanism visible to the open-source community, we addressed multiple CVEs across the project, in particular log4j and jackson-databind related findings.

Changes

  • chore(deps): Update deps for jackson (#1793) by @sthulb
  • build(deps): bump log4j.version from 2.22.1 to 2.24.3 (#1777) by @dependabot
  • chore(deps): update JSII to 1.108 (#1791) by @sthulb
  • build(deps): bump jinja2 from 3.1.5 to 3.1.6 in /docs (#1789) by @dependabot
  • chore: Update netty version (#1768) by @sthulb
  • chore: Set versions of transitive dependencies (#1767) by @sthulb
  • chore: update Jackson in examples (#1766) by @sthulb
  • build(deps): bump org.apache.maven.plugins:maven-jar-plugin from 3.4.1 to 3.4.2 (#1731) by @dependabot
  • build(deps): bump aws.xray.recorder.version from 2.15.3 to 2.18.1 (#1726) by @dependabot
  • build(deps): bump aws.sdk.version from 2.26.29 to 2.27.12 (#1724) by @dependabot
  • fix: Allow empty responses as well as null response in AppConfig (#1673) by @chrisclayson
  • build(deps): bump aws.sdk.version from 2.27.2 to 2.27.7 (#1715) by @dependabot
  • build(deps): bump aws.sdk.version from 2.26.29 to 2.27.2 (#1714) by @dependabot
  • build(deps): bump aws.sdk.version from 2.25.26 to 2.26.29 (#1713) by @dependabot
  • build(deps): bump aws.sdk.version from 2.26.25 to 2.26.29 (#1712) by @dependabot
  • chore: deprecate java1.8 al1 (#1706) by @jeromevdl
  • chore: java 1.8 AL1 is deprecated, fix E2E tests (#1692) by @jeromevdl
  • build(deps): bump aws.sdk.version from 2.26.21 to 2.26.25 (#1703) by @dependabot
  • build(deps): bump aws.sdk.version from 2.26.3 to 2.26.21 (#1697) by @dependabot
  • build(deps): bump jackson.version from 2.17.0 to 2.17.2 (#1696) by @dependabot
  • build(deps): bump org.apache.commons:commons-lang3 from 3.13.0 to 3.14.0 (#1694) by @dependabot
  • build(deps): bump commons-io:commons-io from 2.15.1 to 2.16.1 (#1691) by @dependabot
  • docs: improve tracing doc for sdk instrumentation (#1687) by @jeromevdl
  • docs: fix tracing links for xray (#1686) by @jeromevdl
  • build(deps): bump org.apache.maven.plugins:maven-failsafe-plugin from 3.2.5 to 3.3.0 (#1679) by @dependabot
  • build(deps): bump aws.sdk.version from 2.25.69 to 2.26.3 (#1658) by @dependabot
  • build(deps): bump com.github.spotbugs:spotbugs-maven-plugin from 4.7.3.6 to 4.8.5.0 (#1657) by @dependabot
  • build(deps): bump org.apache.maven.plugins:maven-checkstyle-plugin from 3.3.0 to 3.4.0 (#1653) by @dependabot
  • build(deps): bump aws.sdk.version from 2.25.50 to 2.25.69 (#1652) by @dependabot
  • build(deps): bump org.apache.maven.plugins:maven-source-plugin from 3.3.0 to 3.3.1 (#1646) by @dependabot
  • build(deps): bump org.assertj:assertj-core from 3.25.3 to 3.26.0 (#1644) by @dependabot
  • build(deps): bump aws.xray.recorder.version from 2.15.1 to 2.15.3 (#1643) by @dependabot
  • build(deps): bump aws.sdk.version from 2.25.35 to 2.25.50 (#1642) by @dependabot
  • build(deps): bump com.amazonaws:aws-lambda-java-events from 3.11.2 to 3.11.4 (#1597) by @dependabot
  • build(deps): bump aws.sdk.version from 2.24.10 to 2.25.6 (#1603) by @dependabot
  • build(deps): bump org.apache.maven.plugins:maven-surefire-plugin from 3.1.2 to 3.2.5 (#1596) by @dependabot
  • build(deps): bump org.codehaus.mojo:exec-maven-plugin from 3.1.0 to 3.2.0 (#1585) by @dependabot
  • build(deps-dev): bump software.amazon.awscdk:aws-cdk-lib from 2.100.0 to 2.130.0 (#1586) by @dependabot
  • build(deps): bump io.burt:jmespath-jackson from 0.5.1 to 0.6.0 (#1587) by @dependabot
  • build(deps): bump aws.sdk.version from 2.21.0 to 2.24.10 (#1581) by @dependabot
  • build(deps): bump commons-io:commons-io from 2.13.0 to 2.15.1 (#1584) by @dependabot
  • build(deps): bump aws.xray.recorder.version from 2.14.0 to 2.15.1 (#1583) by @dependabot
  • build(deps): bump org.apache.maven.plugins:maven-shade-plugin from 3.5.0 to 3.5.2 (#1582) by @dependabot
  • build(deps-dev): bump org.yaml:snakeyaml from 2.1 to 2.2 (#1400) by @dependabot
  • build(deps): bump log4j.version from 2.20.0 to 2.22.1 (#1547) by @dependabot
  • build(deps): bump org.apache.maven.plugins:maven-artifact-plugin from 3.4.1 to 3.5.0 (#1485) by @dependabot
  • build(deps): bump com.amazonaws:aws-lambda-java-serialization from 1.1.2 to 1.1.5 (#1573) by @dependabot
  • build(deps): bump org.jacoco:jacoco-maven-plugin from 0.8.10 to 0.8.11 (#1509) by @dependabot
  • build(deps): bump...
Read more

v1.18.0

16 Nov 13:41
877ab51
Compare
Choose a tag to compare

Added

Maintenance

  • fix: json schema 403 error (#1457) by @jeromevdl
  • fix: array jmespath fail in idempotency module (#1420) by @jeromevdl
  • chore: java21 support in our build (#1488) by @jeromevdl
  • chore: Addition of Warn Message If Invalid Annotation Key While Tracing #1511 (#1512) by @jdoherty
  • fix: null namespace should fallback to default namespace (#1506) by @jeromevdl
  • fix: get trace id from system property when env var is not set (#1503) by @mriccia
  • chore: artifacts size on good branches (#1493) by @jeromevdl
  • fix: enforce jackson databind version (#1472) by @jeromevdl
  • chore: add missing projects and improve workflow (#1487) by @jeromevdl
  • chore: Reporting size of the jars in GitHub comments (#1196) by @jeromevdl
  • Deps: Bump third party dependencies to the latest versions.

Documentation

This release was made possible by the following contributors:

@AlexeySoshin, @am29d, @dependabot, @dependabot[bot], @jasoniharris, @jdoherty, @jeromevdl, @mriccia, @scottgerring, @skal111 and @walmsles

v1.17.0

21 Aug 11:07
018e319
Compare
Choose a tag to compare

Added

Maintenance

  • fix: use default credentials provider for all provided SDK clients in (#1303) by @roamingthings
  • Chore: Make request for Logger explicitly for current class in (#1307) by @jreijn
  • Chore: checkstyle formater & linter in (#1316) by @jeromevdl
  • Chore: Add powertools specific user-agent-suffix to the AWS SDK v2 clients by @eldimi in (#1306)
  • Chore: Add 'v2' branch to build workflows to prepare for v2 work in (#1341) by @scottgerring
  • Deps: Bump third party dependencies to the latest versions.

Documentation

This release was made possible by the following contributors:

@eldimi, @jreijn, @roamingthings, @AlexeySoshin, @jeromevdl, @mriccia, and @scottgerring

v1.16.1

19 Jul 11:48
b191d72
Compare
Choose a tag to compare

Maintenance

  • Fix: idempotency timeout bug (#1285) by @scottgerring
  • Fix: ParamManager cannot provide default SSM & Secrets providers (#1282) by @jeromevdl
  • Fix: Handle batch failures in FIFO queues correctly (#1183) by @scottgerring
  • Deps: Bump third party dependencies to the latest versions.

This release was made possible by the following contributors:

@dependabot, @dependabot[bot], @eldimi, @jeromevdl, @mriccia, @msailes and @scottgerring

v1.16.0

29 Jun 11:20
01f7ea0
Compare
Choose a tag to compare

Added

Maintenance

  • Fix: missing idempotency key should not persist any data (#1201) by @jeromevdl
  • Fix:Removing env var credentials provider as default. (#1161) by @msailes
  • Chore: Swap implementation of aspectj-maven-plugin to support Java 17 (#1172) by @mriccia
  • Test: end-to-end tests for core modules and idempotency (#970) by @jeromevdl
  • Chore: cleanup spotbugs maven profiles (#1236) by @jeromevdl
  • Chore: removing logback from all components (#1227) by @jeromevdl
  • Chore: Roll SLF4J log4j bindings to v2 (#1190) by @scottgerring
  • Deps: Bump third party dependencies to the latest versions.

This release was made possible by the following contributors:

@dependabot, @dependabot[bot], @hjgraca, @jeromevdl, @kozub, @lgouger, @mriccia, @msailes, @rubenfonseca, @scottgerring and @sthulb