diff --git a/cdk/README.md b/cdk/README.md
index b24f0e7..3a69afe 100644
--- a/cdk/README.md
+++ b/cdk/README.md
@@ -8,6 +8,7 @@ Currently we support:
- [C#](csharp/README.md)
- [Python](python/README.md)
- [go](go/README.md)
+- [Java](java/README.md)
You can use these projects as a standalone or reuse it within your own CDK projects.
diff --git a/cdk/java/.gitignore b/cdk/java/.gitignore
new file mode 100644
index 0000000..1db21f1
--- /dev/null
+++ b/cdk/java/.gitignore
@@ -0,0 +1,13 @@
+.classpath.txt
+target
+.classpath
+.project
+.idea
+.settings
+.vscode
+*.iml
+
+# CDK asset staging directory
+.cdk.staging
+cdk.out
+
diff --git a/cdk/java/README.md b/cdk/java/README.md
new file mode 100644
index 0000000..1635028
--- /dev/null
+++ b/cdk/java/README.md
@@ -0,0 +1,25 @@
+# How to deploy the AWS Lambda Power Tuning using the CDK for Java
+
+This CDK project deploys *AWS Lambda Power Tuning* using Java.
+
+You can use the project as a standalone or reuse it within your own CDK projects.
+
+
+## CDK Prerequisites
+
+See [here](../README.md).
+
+
+## Language specific prerequisites
+- [Java Development Kit (JDK) 8 (a.k.a. 1.8) or later](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites)
+- [Apache Maven 3.5 or later](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites)
+- [Requirements for CDK with Java](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-java.html)
+
+## Building, testing, and deploying the app
+* `mvn package` compile and run tests
+* `cdk synth` emits the synthesized CloudFormation template
+* `cdk deploy` deploy this app
+
+The `cdk.json` file tells the CDK Toolkit how to execute your app.
+
+It is a [Maven](https://maven.apache.org/) based project, so you can open this project with any Maven compatible Java IDE to build and run tests.
\ No newline at end of file
diff --git a/cdk/java/cdk.json b/cdk/java/cdk.json
new file mode 100644
index 0000000..441b988
--- /dev/null
+++ b/cdk/java/cdk.json
@@ -0,0 +1,60 @@
+{
+ "app": "mvn -e -q compile exec:java",
+ "watch": {
+ "include": [
+ "**"
+ ],
+ "exclude": [
+ "README.md",
+ "cdk*.json",
+ "target",
+ "pom.xml",
+ "src/test"
+ ]
+ },
+ "context": {
+ "@aws-cdk/aws-lambda:recognizeLayerVersion": true,
+ "@aws-cdk/core:checkSecretUsage": true,
+ "@aws-cdk/core:target-partitions": [
+ "aws",
+ "aws-cn"
+ ],
+ "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
+ "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
+ "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
+ "@aws-cdk/aws-iam:minimizePolicies": true,
+ "@aws-cdk/core:validateSnapshotRemovalPolicy": true,
+ "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true,
+ "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
+ "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
+ "@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
+ "@aws-cdk/core:enablePartitionLiterals": true,
+ "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
+ "@aws-cdk/aws-iam:standardizedServicePrincipals": true,
+ "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
+ "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
+ "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
+ "@aws-cdk/aws-route53-patters:useCertificate": true,
+ "@aws-cdk/customresources:installLatestAwsSdkDefault": false,
+ "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true,
+ "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true,
+ "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true,
+ "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true,
+ "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true,
+ "@aws-cdk/aws-redshift:columnId": true,
+ "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true,
+ "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true,
+ "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true,
+ "@aws-cdk/aws-kms:aliasNameRef": true,
+ "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
+ "@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
+ "@aws-cdk/aws-efs:denyAnonymousAccess": true,
+ "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true,
+ "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true,
+ "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true,
+ "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true,
+ "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true,
+ "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true,
+ "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true
+ }
+}
diff --git a/cdk/java/pom.xml b/cdk/java/pom.xml
new file mode 100644
index 0000000..232ec61
--- /dev/null
+++ b/cdk/java/pom.xml
@@ -0,0 +1,60 @@
+
+
+ 4.0.0
+
+ com.myorg
+ java
+ 0.1
+
+
+ UTF-8
+ 2.114.1
+ [10.0.0,11.0.0)
+ 5.7.1
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+ 17
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+ com.myorg.TheLambdaPowerTunerApp
+
+
+
+
+
+
+
+
+ software.amazon.awscdk
+ aws-cdk-lib
+ ${cdk.version}
+
+
+
+ software.constructs
+ constructs
+ ${constructs.version}
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.version}
+ test
+
+
+
diff --git a/cdk/java/src/main/java/com/myorg/TheLambdaPowerTunerApp.java b/cdk/java/src/main/java/com/myorg/TheLambdaPowerTunerApp.java
new file mode 100644
index 0000000..b9143d7
--- /dev/null
+++ b/cdk/java/src/main/java/com/myorg/TheLambdaPowerTunerApp.java
@@ -0,0 +1,39 @@
+package com.myorg;
+
+import software.amazon.awscdk.App;
+import software.amazon.awscdk.StackProps;
+
+public class TheLambdaPowerTunerApp {
+ public static void main(final String[] args) {
+ App app = new App();
+
+ new TheLambdaPowerTunerStack(app, "JavaStack", StackProps.builder()
+ // If you don't specify 'env', this stack will be environment-agnostic.
+ // Account/Region-dependent features and context lookups will not work,
+ // but a single synthesized template can be deployed anywhere.
+
+ // Uncomment the next block to specialize this stack for the AWS Account
+ // and Region that are implied by the current CLI configuration.
+ /*
+ .env(Environment.builder()
+ .account(System.getenv("CDK_DEFAULT_ACCOUNT"))
+ .region(System.getenv("CDK_DEFAULT_REGION"))
+ .build())
+ */
+
+ // Uncomment the next block if you know exactly what Account and Region you
+ // want to deploy the stack to.
+ /*
+ .env(Environment.builder()
+ .account("123456789012")
+ .region("us-east-1")
+ .build())
+ */
+
+ // For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html
+ .build());
+
+ app.synth();
+ }
+}
+
diff --git a/cdk/java/src/main/java/com/myorg/TheLambdaPowerTunerStack.java b/cdk/java/src/main/java/com/myorg/TheLambdaPowerTunerStack.java
new file mode 100644
index 0000000..778a8dd
--- /dev/null
+++ b/cdk/java/src/main/java/com/myorg/TheLambdaPowerTunerStack.java
@@ -0,0 +1,53 @@
+package com.myorg;
+
+import software.constructs.Construct;
+
+import software.amazon.awscdk.Stack;
+import software.amazon.awscdk.StackProps;
+import software.amazon.awscdk.services.sam.CfnApplication;
+import software.amazon.awscdk.services.sam.CfnApplication.ApplicationLocationProperty;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TheLambdaPowerTunerStack extends Stack {
+
+ //Set constants
+ private static final String SAR_APPLICATION_ID = "arn:aws:serverlessrepo:us-east-1:451282441545:applications/aws-lambda-power-tuning";
+ private static final String SAR_SEMANTIC_VERSION = "4.3.4";
+
+ public TheLambdaPowerTunerStack(final Construct scope, final String id) {
+ this(scope, id, null);
+ }
+
+ public TheLambdaPowerTunerStack(final Construct scope, final String id, final StackProps props) {
+ super(scope, id, props);
+
+ //create an empty Map
+ Map parameters = new HashMap<>();
+
+ // parameters.put("lambdaResource", "*")
+ // parameters.put("PowerValues", "128,256,512,1024,1536,3008")
+ // parameters.put("visualizationURL", "https://lambda-power-tuning.shw/")
+ // parameters.put("totalExecutionTimeout", "300")
+ // parameters.put("payloadS3Key", "*")
+ // parameters.put("logGroupRetentionInDays", "7")
+ // parameters.put("stateMachineNamePrefix", "powerTuningStateMachine")
+ // parameters.put("permissionsBoundary", "")
+ // parameters.put("payloadS3Bucket", "")
+ // parameters.put("layerSdkName", "")
+ // parameters.put("securityGroupIds", "")
+ // parameters.put("subnetIds", "")
+ // parameters.put("lambdaResource", "*")
+
+
+ CfnApplication cfnApplication = CfnApplication.Builder.create(this, "SAR")
+ .location(
+ ApplicationLocationProperty.builder()
+ .applicationId(SAR_APPLICATION_ID)
+ .semanticVersion(SAR_SEMANTIC_VERSION)
+ .build()
+ )
+ .parameters(parameters)
+ .build();
+ }
+}
diff --git a/cdk/java/src/test/java/com/myorg/JavaTest.java b/cdk/java/src/test/java/com/myorg/JavaTest.java
new file mode 100644
index 0000000..a197a2e
--- /dev/null
+++ b/cdk/java/src/test/java/com/myorg/JavaTest.java
@@ -0,0 +1,28 @@
+package com.myorg;
+
+import software.amazon.awscdk.App;
+import software.amazon.awscdk.assertions.Template;
+import java.io.IOException;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+
+public class JavaTest {
+
+ @Test
+ public void testStack() throws IOException {
+ App app = new App();
+ TheLambdaPowerTunerStack stack = new TheLambdaPowerTunerStack(app, "test");
+
+ Template template = Template.fromStack(stack);
+ Map child = new HashMap<>();
+ Map root = new HashMap<>();
+
+ root.put("Location", child);
+ child.put("ApplicationId", "arn:aws:serverlessrepo:us-east-1:451282441545:applications/aws-lambda-power-tuning");
+
+ template.hasResourceProperties("AWS::Serverless::Application", root);
+ }
+}