diff --git a/labs/unicorn-store/infrastructure/cdk/src/main/java/com/unicorn/UnicornStoreStack.java b/labs/unicorn-store/infrastructure/cdk/src/main/java/com/unicorn/UnicornStoreStack.java index 889f170b0..112f4b5ee 100644 --- a/labs/unicorn-store/infrastructure/cdk/src/main/java/com/unicorn/UnicornStoreStack.java +++ b/labs/unicorn-store/infrastructure/cdk/src/main/java/com/unicorn/UnicornStoreStack.java @@ -10,9 +10,11 @@ import software.amazon.awscdk.services.apigateway.RestApi; import software.amazon.awscdk.services.lambda.Code; import software.amazon.awscdk.services.lambda.Function; +import software.amazon.awscdk.services.lambda.LayerVersion; import software.amazon.awscdk.services.lambda.Runtime; import software.constructs.Construct; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -64,12 +66,17 @@ private Function createUnicornLambdaFunction() { .handler("com.amazonaws.serverless.proxy.spring.SpringDelegatingLambdaContainerHandler") .vpc(infrastructureStack.getVpc()) .securityGroups(List.of(infrastructureStack.getApplicationSecurityGroup())) + .profiling(true) + .layers(Collections.singletonList(LayerVersion.fromLayerVersionArn(this, "codeguru-profiler", "arn:aws:lambda:us-west-2:157417159150:layer:AWSCodeGuruProfilerJavaAgentLayer:10"))) .environment(Map.of( - "MAIN_CLASS", "com.unicorn.store.StoreApplication", - "SPRING_DATASOURCE_PASSWORD", infrastructureStack.getDatabaseSecretString(), - "SPRING_DATASOURCE_URL", infrastructureStack.getDatabaseJDBCConnectionString(), - "SPRING_DATASOURCE_HIKARI_maximumPoolSize", "1", - "AWS_SERVERLESS_JAVA_CONTAINER_INIT_GRACE_TIME", "500" + "MAIN_CLASS", "com.unicorn.store.StoreApplication", + "SPRING_DATASOURCE_PASSWORD", infrastructureStack.getDatabaseSecretString(), + "SPRING_DATASOURCE_URL", infrastructureStack.getDatabaseJDBCConnectionString(), + "SPRING_DATASOURCE_HIKARI_maximumPoolSize", "1", + "AWS_SERVERLESS_JAVA_CONTAINER_INIT_GRACE_TIME", "500", + "JAVA_TOOL_OPTIONS", "-javaagent:/opt/codeguru-profiler-java-agent-standalone.jar", + "AWS_CODEGURU_PROFILER_HEAP_SUMMARY_ENABLED", "true" + )) .build(); } diff --git a/labs/unicorn-store/infrastructure/cdk/src/main/java/com/unicorn/core/InfrastructureStack.java b/labs/unicorn-store/infrastructure/cdk/src/main/java/com/unicorn/core/InfrastructureStack.java index 0845d5dfb..bad15c996 100644 --- a/labs/unicorn-store/infrastructure/cdk/src/main/java/com/unicorn/core/InfrastructureStack.java +++ b/labs/unicorn-store/infrastructure/cdk/src/main/java/com/unicorn/core/InfrastructureStack.java @@ -35,6 +35,7 @@ public InfrastructureStack(final Construct scope, final String id, final StackPr .build()); createEventBridgeVpcEndpoint(); createDynamoDBVpcEndpoint(); + createCodeGuruProfilerVpcEndpoint(); new DatabaseSetupConstruct(this, "UnicornDatabaseConstruct"); } @@ -136,4 +137,10 @@ private IGatewayVpcEndpoint createDynamoDBVpcEndpoint() { .build(); } + private IInterfaceVpcEndpoint createCodeGuruProfilerVpcEndpoint() { + return InterfaceVpcEndpoint.Builder.create(this, "CodeGuruProfilerVpcEndpoint") + .service(InterfaceVpcEndpointAwsService.CODEGURU_PROFILER) + .vpc(this.getVpc()) + .build(); + } }