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); + } +}