diff --git a/java/Parameters/Function/pom.xml b/java/Parameters/Function/pom.xml
new file mode 100644
index 0000000..f8e9704
--- /dev/null
+++ b/java/Parameters/Function/pom.xml
@@ -0,0 +1,92 @@
+
+ 4.0.0
+ demo
+ Functions
+ 1.0
+ jar
+ Sample app demoing parameters utility of Powertools.
+
+ 11
+ 11
+ 2.17.1
+ UTF-8
+
+
+
+
+ software.amazon.lambda
+ powertools-logging
+ 1.11.0
+
+
+ software.amazon.lambda
+ powertools-parameters
+ 1.11.0
+
+
+ com.amazonaws
+ aws-lambda-java-core
+ 1.2.1
+
+
+ com.amazonaws
+ aws-lambda-java-events
+ 3.11.0
+
+
+
+
+ org.mockito
+ mockito-core
+ 4.3.1
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.8.2
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.8.2
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ 2.22.0
+
+
+ org.codehaus.mojo
+ aspectj-maven-plugin
+ 1.14.0
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+ ${maven.compiler.target}
+
+
+ software.amazon.lambda
+ powertools-parameters
+
+
+
+
+
+
+ compile
+
+
+
+
+
+
+
diff --git a/java/Parameters/Function/src/main/java/org/demo/parameters/MyObject.java b/java/Parameters/Function/src/main/java/org/demo/parameters/MyObject.java
new file mode 100644
index 0000000..2cf1452
--- /dev/null
+++ b/java/Parameters/Function/src/main/java/org/demo/parameters/MyObject.java
@@ -0,0 +1,34 @@
+package org.demo.parameters;
+
+public class MyObject {
+
+ private long id;
+ private String code;
+
+ public MyObject() {
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ @Override
+ public String toString() {
+ return "MyObject{" +
+ "id=" + id +
+ ", code='" + code + '\'' +
+ '}';
+ }
+}
diff --git a/java/Parameters/Function/src/main/java/org/demo/parameters/ParametersFunction.java b/java/Parameters/Function/src/main/java/org/demo/parameters/ParametersFunction.java
new file mode 100644
index 0000000..f5d98a4
--- /dev/null
+++ b/java/Parameters/Function/src/main/java/org/demo/parameters/ParametersFunction.java
@@ -0,0 +1,81 @@
+package org.demo.parameters;
+
+import com.amazonaws.services.lambda.runtime.Context;
+import com.amazonaws.services.lambda.runtime.RequestHandler;
+import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
+import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import software.amazon.lambda.powertools.parameters.ParamManager;
+import software.amazon.lambda.powertools.parameters.SSMProvider;
+import software.amazon.lambda.powertools.parameters.SecretsProvider;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static java.time.temporal.ChronoUnit.SECONDS;
+import static software.amazon.lambda.powertools.parameters.transform.Transformer.base64;
+import static software.amazon.lambda.powertools.parameters.transform.Transformer.json;
+
+public class ParametersFunction implements RequestHandler {
+ private final static Logger log = LogManager.getLogger();
+
+ SSMProvider ssmProvider = ParamManager.getSsmProvider();
+ SecretsProvider secretsProvider = ParamManager.getSecretsProvider();
+
+ String simpleValue = ssmProvider.defaultMaxAge(30, SECONDS).get("/powertools-java/sample/simplekey");
+ String listValue = ssmProvider.withMaxAge(60, SECONDS).get("/powertools-java/sample/keylist");
+ MyObject jsonObj = ssmProvider.withTransformation(json).get("/powertools-java/sample/keyjson", MyObject.class);
+ Map allValues = ssmProvider.getMultiple("/powertools-java/sample");
+ String b64value = ssmProvider.withTransformation(base64).get("/powertools-java/sample/keybase64");
+
+ Map secretJson = secretsProvider.withTransformation(json).get("/powertools-java/userpwd", Map.class);
+ MyObject secretJsonObj = secretsProvider.withMaxAge(42, SECONDS).withTransformation(json).get("/powertools-java/secretcode", MyObject.class);
+
+ @Override
+ public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) {
+
+ log.info("\n=============== SSM Parameter Store ===============");
+ log.info("simplevalue={}, listvalue={}, b64value={}\n", simpleValue, listValue, b64value);
+ log.info("jsonobj={}\n", jsonObj);
+
+ log.info("allvalues (multiple):");
+ allValues.forEach((key, value) -> log.info("- {}={}\n", key, value));
+
+ log.info("\n=============== Secrets Manager ===============");
+ log.info("secretjson:");
+ secretJson.forEach((key, value) -> log.info("- {}={}\n", key, value));
+ log.info("secretjsonobj={}\n", secretJsonObj);
+
+ Map headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ headers.put("X-Custom-Header", "application/json");
+
+ APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent()
+ .withHeaders(headers);
+ try {
+ final String pageContents = this.getPageContents("https://checkip.amazonaws.com");
+ String output = String.format("{ \"message\": \"hello world\", \"location\": \"%s\" }", pageContents);
+
+ return response
+ .withStatusCode(200)
+ .withBody(output);
+ } catch (IOException e) {
+ return response
+ .withBody("{}")
+ .withStatusCode(500);
+ }
+ }
+
+ private String getPageContents(String address) throws IOException{
+ URL url = new URL(address);
+ try(BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) {
+ return br.lines().collect(Collectors.joining(System.lineSeparator()));
+ }
+ }
+}
diff --git a/java/Parameters/Function/src/main/resources/log4j2.xml b/java/Parameters/Function/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..033da8a
--- /dev/null
+++ b/java/Parameters/Function/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/java/Parameters/README.md b/java/Parameters/README.md
new file mode 100644
index 0000000..c03f407
--- /dev/null
+++ b/java/Parameters/README.md
@@ -0,0 +1,21 @@
+# Parameters
+
+This project contains an example of Lambda function using the parameters module of Lambda Powertools for Java. For more information on this module, please refer to the [documentation](https://awslabs.github.io/aws-lambda-powertools-java/utilities/parameters/).
+
+## Deploy the sample application
+
+This sample is based on Serverless Application Model (SAM) and you can use the SAM Command Line Interface (SAM CLI) to build it and deploy it to AWS.
+
+To use the SAM CLI, you need the following tools.
+
+* SAM CLI - [Install the SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)
+* Java11 - [Install the Java 11](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html)
+* Maven - [Install Maven](https://maven.apache.org/install.html)
+* Docker - [Install Docker community edition](https://hub.docker.com/search/?type=edition&offering=community)
+
+To build and deploy your application for the first time, run the following in your shell:
+
+```bash
+sam build
+sam deploy --guided
+```
diff --git a/java/Parameters/template.yaml b/java/Parameters/template.yaml
new file mode 100644
index 0000000..d9038d3
--- /dev/null
+++ b/java/Parameters/template.yaml
@@ -0,0 +1,97 @@
+AWSTemplateFormatVersion: '2010-09-09'
+Transform: AWS::Serverless-2016-10-31
+Description: >
+ validation demo
+
+Globals:
+ Function:
+ Timeout: 20
+ Runtime: java11
+ MemorySize: 512
+ Tracing: Active
+
+
+Resources:
+ ParametersFunction:
+ Type: AWS::Serverless::Function
+ Properties:
+ CodeUri: Function
+ Handler: org.demo.parameters.ParametersFunction::handleRequest
+ MemorySize: 512
+ Tracing: Active
+ Policies:
+ - AWSSecretsManagerGetSecretValuePolicy:
+ SecretArn: !Ref UserPwd
+ - AWSSecretsManagerGetSecretValuePolicy:
+ SecretArn: !Ref SecretConfig
+ - Statement:
+ - Sid: SSMGetParameterPolicy
+ Effect: Allow
+ Action:
+ - ssm:GetParameter
+ - ssm:GetParameters
+ - ssm:GetParametersByPath
+ Resource: '*'
+ Events:
+ HelloWorld:
+ Type: Api
+ Properties:
+ Path: /params
+ Method: get
+
+ UserPwd:
+ Type: AWS::SecretsManager::Secret
+ Properties:
+ Name: /powertools-java/userpwd
+ Description: Generated secret for lambda-powertools-java powertools-parameters
+ module
+ GenerateSecretString:
+ SecretStringTemplate: '{"username": "test-user"}'
+ GenerateStringKey: password
+ PasswordLength: 15
+ ExcludeCharacters: '"@/\'
+ SecretConfig:
+ Type: AWS::SecretsManager::Secret
+ Properties:
+ Name: /powertools-java/secretcode
+ Description: Json secret for lambda-powertools-java powertools-parameters module
+ SecretString: '{"id":23443,"code":"hk38543oj24kn796kp67bkb234gkj679l68"}'
+ BasicParameter:
+ Type: AWS::SSM::Parameter
+ Properties:
+ Name: /powertools-java/sample/simplekey
+ Type: String
+ Value: simplevalue
+ Description: Simple SSM Parameter for lambda-powertools-java powertools-parameters
+ module
+ ParameterList:
+ Type: AWS::SSM::Parameter
+ Properties:
+ Name: /powertools-java/sample/keylist
+ Type: StringList
+ Value: value1,value2,value3
+ Description: SSM Parameter List for lambda-powertools-java powertools-parameters
+ module
+ JsonParameter:
+ Type: AWS::SSM::Parameter
+ Properties:
+ Name: /powertools-java/sample/keyjson
+ Type: String
+ Value: '{"id":23443,"code":"hk38543oj24kn796kp67bkb234gkj679l68"}'
+ Description: Json SSM Parameter for lambda-powertools-java powertools-parameters
+ module
+ Base64Parameter:
+ Type: AWS::SSM::Parameter
+ Properties:
+ Name: /powertools-java/sample/keybase64
+ Type: String
+ Value: aGVsbG8gd29ybGQ=
+ Description: Base64 SSM Parameter for lambda-powertools-java powertools-parameters module
+
+Outputs:
+ ParametersApi:
+ Description: "API Gateway endpoint URL for Prod stage for Parameters function"
+ Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/params/"
+ ParametersFunction:
+ Description: "Parameters Lambda Function ARN"
+ Value: !GetAtt ParametersFunction.Arn
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
index a3106d9..1229d00 100644
--- a/manifest.json
+++ b/manifest.json
@@ -27,6 +27,13 @@
"dependencyManager": "maven",
"appTemplate": "Validation",
"javaVersion": "11"
+ },
+ {
+ "directory": "java/Parameters/Function",
+ "displayName": "Demos setup of an parameters Lambda function using Powertools",
+ "dependencyManager": "maven",
+ "appTemplate": "Parameters",
+ "javaVersion": "11"
}
]
}
\ No newline at end of file