Skip to content

Latest commit

 

History

History
137 lines (118 loc) · 6.16 KB

File metadata and controls

137 lines (118 loc) · 6.16 KB
title Homepage
description AWS Lambda Powertools Java

import Note from "../src/components/Note"

Powertools is a suite of utilities for AWS Lambda Functions that makes tracing with AWS X-Ray, structured logging and creating custom metrics asynchronously easier.

Looking for a quick run through of the core utilities?

Check out this detailed blog post with a practical example.

Install

Powertools dependencies are available in Maven Central. You can use your favourite dependency management tool to install it

<dependencies>
    ...
    <dependency>
        <groupId>software.amazon.lambda</groupId>
        <artifactId>powertools-tracing</artifactId>
        <version>1.1.0</version>
    </dependency>
    <dependency>
        <groupId>software.amazon.lambda</groupId>
        <artifactId>powertools-logging</artifactId>
        <version>1.1.0</version>
    </dependency>
    <dependency>
        <groupId>software.amazon.lambda</groupId>
        <artifactId>powertools-metrics</artifactId>
        <version>1.1.0</version>
    </dependency>
    ...
</dependencies>

And configure the aspectj-maven-plugin to compile-time weave (CTW) the aws-lambda-powertools-java aspects into your project:

<build>
    <plugins>
        ...
        <plugin>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>aspectj-maven-plugin</artifactId>
             <version>1.11</version>
             <configuration>
                 <source>1.8</source>
                 <target>1.8</target>
                 <complianceLevel>1.8</complianceLevel>
                 <aspectLibraries>
                     <aspectLibrary>
                         <groupId>software.amazon.lambda</groupId>
                         <artifactId>powertools-tracing</artifactId>
                     </aspectLibrary>
                     <aspectLibrary>
                         <groupId>software.amazon.lambda</groupId>
                         <artifactId>powertools-logging</artifactId>
                     </aspectLibrary>
                     <aspectLibrary>
                         <groupId>software.amazon.lambda</groupId>
                         <artifactId>powertools-metrics</artifactId>
                     </aspectLibrary>
                 </aspectLibraries>
             </configuration>
             <executions>
                 <execution>
                     <goals>
                         <goal>compile</goal>
                     </goals>
                 </execution>
             </executions>
        </plugin>
        ...
    </plugins>
</build>

Note: If you are working with lambda function on runtime post java8, please refer issue for workaround

plugins{
    id 'java'
    id 'aspectj.AspectjGradlePlugin' version '0.0.6'
}
repositories {
    jcenter()
}
dependencies {
    implementation 'software.amazon.lambda:powertools-tracing:1.1.0'
    aspectpath 'software.amazon.lambda:powertools-tracing:1.1.0'
    implementation 'software.amazon.lambda:powertools-logging:1.1.0'
    aspectpath 'software.amazon.lambda:powertools-logging:1.1.0'
    implementation 'software.amazon.lambda:powertools-metrics:1.1.0'
    aspectpath 'software.amazon.lambda:powertools-metrics:1.1.0'
}

Note:

Please add aspectjVersion = '1.9.6' to the gradle.properties file. The aspectj plugin works at the moment with gradle 5.x only if you are using java 8 as runtime. Please refer to open issue for more details.

Quick hello world examples using SAM CLI You can use SAM to quickly setup a serverless project including AWS Lambda Powertools Java.

sam init --location gh:aws-samples/cookiecutter-aws-sam-powertools-java

For more information about the project and available options refer to this repository

Environment variables

Environment variables used across suite of utilities.

Environment variable | Description | Utility ------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------- POWERTOOLS_SERVICE_NAME | Sets service name used for tracing namespace, metrics dimension and structured logging | All POWERTOOLS_METRICS_NAMESPACE | Sets namespace used for metrics | Metrics POWERTOOLS_LOGGER_SAMPLE_RATE | Debug log sampling | Logging LOG_LEVEL | Sets logging level | Logging

Tenets

  • AWS Lambda only – We optimise for AWS Lambda function environments and supported runtimes only. Utilities might work with web frameworks and non-Lambda environments, though they are not officially supported.
  • Eases the adoption of best practices – The main priority of the utilities is to facilitate best practices adoption, as defined in the AWS Well-Architected Serverless Lens; all other functionality is optional.
  • Keep it lean – Additional dependencies are carefully considered for security and ease of maintenance, and prevent negatively impacting startup time.
  • We strive for backwards compatibility – New features and changes should keep backwards compatibility. If a breaking change cannot be avoided, the deprecation and migration process should be clearly defined.
  • We work backwards from the community – We aim to strike a balance of what would work best for 80% of customers. Emerging practices are considered and discussed via Requests for Comment (RFCs)
  • Idiomatic – Utilities follow programming language idioms and language-specific best practices.

* Core utilities are Tracer, Logger and Metrics. Optional utilities may vary across languages.