Skip to content

Commit b372aa2

Browse files
committed
Fixes for Lambda/k8s-connection
1 parent f055a21 commit b372aa2

3 files changed

Lines changed: 40 additions & 12 deletions

File tree

infrastructure/cdk/src/main/java/com/unicorn/UnicornStoreStack.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,9 @@ public class UnicornStoreStack extends Stack {
3434
whoami
3535
echo '\n'
3636
echo '=== Checking directory ===\n'
37-
sudo -H -i -u ec2-user bash -c "ls -la ~/java-on-aws/infrastructure/scripts/setup/"
3837
sudo -H -i -u ec2-user bash -c "~/java-on-aws/infrastructure/scripts/setup/app.sh"
3938
sudo -H -i -u ec2-user bash -c "~/java-on-aws/infrastructure/scripts/setup/eks.sh"
40-
# sudo -H -i -u ec2-user bash -c "~/java-on-aws/infrastructure/scripts/setup/monitoring.sh"
39+
sudo -H -i -u ec2-user bash -c "~/java-on-aws/infrastructure/scripts/setup/monitoring.sh"
4140
""";
4241

4342
private final String buildspec = """
@@ -54,7 +53,6 @@ public class UnicornStoreStack extends Stack {
5453
- |
5554
# Resolution for when creating the first service in the account
5655
aws organizations enable-all-features
57-
aws sso-admin create-instance --name "grafana-instance" --region eu-west-1
5856
aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com 2>/dev/null || true
5957
aws iam create-service-linked-role --aws-service-name apprunner.amazonaws.com 2>/dev/null || true
6058
aws iam create-service-linked-role --aws-service-name elasticloadbalancing.amazonaws.com 2>/dev/null || true

infrastructure/cdk/src/main/java/com/unicorn/constructs/EksCluster.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.unicorn.constructs;
22

3-
import software.amazon.awscdk.services.ec2.IVpc;
3+
import software.amazon.awscdk.services.ec2.*;
44
import software.amazon.awscdk.services.eks.CfnCluster;
55
import software.amazon.awscdk.services.eks.CfnCluster.LoggingProperty;
66
import software.amazon.awscdk.services.eks.CfnCluster.ClusterLoggingProperty;
@@ -17,10 +17,6 @@
1717
import software.amazon.awscdk.services.eks.CfnAccessEntry.AccessScopeProperty;
1818
import software.amazon.awscdk.services.eks.CfnAccessEntry.AccessPolicyProperty;
1919
import software.amazon.awscdk.services.eks.CfnPodIdentityAssociation;
20-
import software.amazon.awscdk.services.ec2.SubnetType;
21-
import software.amazon.awscdk.services.ec2.SubnetSelection;
22-
import software.amazon.awscdk.services.ec2.ISubnet;
23-
import software.amazon.awscdk.services.ec2.ISecurityGroup;
2420
import software.amazon.awscdk.services.iam.ManagedPolicy;
2521
import software.amazon.awscdk.services.iam.Role;
2622
import software.amazon.awscdk.services.iam.ServicePrincipal;
@@ -188,4 +184,18 @@ public void createPodIdentity(final String principalArn, final String clusterNam
188184
.build();
189185
podIdentityAssociation.getNode().addDependency(cluster);
190186
}
187+
188+
// Get the default cluster security group
189+
public String getClusterSecurityGroupId() {
190+
return cluster.getAttrClusterSecurityGroupId();
191+
}
192+
193+
// Get the default cluster security group as ISecurityGroup
194+
public ISecurityGroup getClusterSecurityGroup() {
195+
return SecurityGroup.fromSecurityGroupId(
196+
this,
197+
"ImportedClusterSecurityGroup",
198+
cluster.getAttrClusterSecurityGroupId()
199+
);
200+
}
191201
}

infrastructure/cdk/src/main/java/com/unicorn/core/InfrastructureLambdaBedrock.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import com.unicorn.constructs.EksCluster;
44
import software.amazon.awscdk.*;
5-
import software.amazon.awscdk.services.ec2.IVpc;
6-
import software.amazon.awscdk.services.ec2.SecurityGroup;
7-
import software.amazon.awscdk.services.ec2.SubnetSelection;
8-
import software.amazon.awscdk.services.ec2.SubnetType;
5+
import software.amazon.awscdk.services.ec2.*;
96
import software.amazon.awscdk.services.iam.*;
107
import software.amazon.awscdk.services.lambda.Code;
118
import software.amazon.awscdk.services.lambda.Function;
@@ -31,10 +28,33 @@ public InfrastructureLambdaBedrock(Construct scope, String id, String region, Bu
3128
// Create a security group for the Lambda function
3229
SecurityGroup lambdaSg = SecurityGroup.Builder.create(this, "LambdaSecurityGroup")
3330
.vpc(vpc)
31+
.securityGroupName("unicornstore-thread-dump-lambda-sg")
3432
.description("Security group for Thread Dump Lambda function")
3533
.allowAllOutbound(true)
3634
.build();
3735

36+
// Allow Lambda to communicate with EKS API server
37+
// The Kubernetes API typically runs on port 443 (HTTPS)
38+
eksCluster.getClusterSecurityGroup().addIngressRule(
39+
Peer.securityGroupId(lambdaSg.getSecurityGroupId()),
40+
Port.tcp(443),
41+
"Allow Lambda access to Kubernetes API"
42+
);
43+
44+
// Allow Lambda to reach EKS cluster
45+
lambdaSg.addEgressRule(
46+
Peer.securityGroupId(eksCluster.getClusterSecurityGroup().getSecurityGroupId()),
47+
Port.tcp(443),
48+
"Allow Lambda to reach Kubernetes API"
49+
);
50+
51+
// Allow EKS cluster to respond back to Lambda
52+
eksCluster.getClusterSecurityGroup().addIngressRule(
53+
Peer.securityGroupId(lambdaSg.getSecurityGroupId()),
54+
Port.tcp(443),
55+
"Allow Lambda access to Kubernetes API"
56+
);
57+
3858
// IAM Role for Bedrock
3959
Role bedrockRole = Role.Builder.create(this, "BedrockAccessRole")
4060
.assumedBy(new ServicePrincipal("bedrock.amazonaws.com"))

0 commit comments

Comments
 (0)