From bb9ab8b98b9d8ae3761daf752fc79b810cdb2363 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 18 Sep 2024 09:15:10 +0200 Subject: [PATCH 1/2] add VPC endpoint for CodeGuru profiler --- .../main/java/com/unicorn/core/InfrastructureStack.java | 7 +++++++ 1 file changed, 7 insertions(+) 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(); + } } From e3c570c891ca19e47069f46ca11ad79d803b17f2 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 18 Sep 2024 09:15:30 +0200 Subject: [PATCH 2/2] enable CodeGuru profiler (hard-coded us-west-2 for testing) --- .../java/com/unicorn/UnicornStoreStack.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) 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(); }