Skip to content

Commit f7d6bb2

Browse files
Merge pull request #1779 from aws-observability/addReleaseVersionNodeGroups
Update Ec2 Cluster stack to fetch NodeGroup releaseVersion
2 parents cff47e7 + 7ff62c8 commit f7d6bb2

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

cdk_infra/lib/stacks/eks/ec2-cluster-stack.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,25 @@ import {
88
} from 'aws-cdk-lib/aws-eks';
99
import { ManagedPolicy } from 'aws-cdk-lib/aws-iam';
1010
import { GetLayer } from '../../utils/eks/kubectlLayer';
11+
import { StringParameter } from 'aws-cdk-lib/aws-ssm';
12+
13+
function getReleaseVersion(amiType: string, clusterVersion: string, scope: Construct): string {
14+
let parameterName: string;
15+
16+
// https://docs.aws.amazon.com/eks/latest/userguide/retrieve-ami-id.html
17+
if (amiType === NodegroupAmiType.AL2_X86_64) {
18+
parameterName = `/aws/service/eks/optimized-ami/${clusterVersion}/amazon-linux-2/recommended/release_version`;
19+
} else if (amiType === NodegroupAmiType.AL2_ARM_64) {
20+
parameterName = `/aws/service/eks/optimized-ami/${clusterVersion}/amazon-linux-2-arm64/recommended/release_version`;
21+
} else {
22+
throw new Error(`Unsupported amiType: ${amiType}`);
23+
}
24+
25+
// Fetch and return the release version from the SSM parameter
26+
return StringParameter.fromStringParameterAttributes(scope, `NodeGroupReleaseVersion-${clusterVersion}-${amiType}`, {
27+
parameterName,
28+
}).stringValue;
29+
}
1130

1231
export class EC2Stack extends Stack {
1332
cluster: eks.Cluster;
@@ -22,6 +41,7 @@ export class EC2Stack extends Stack {
2241
eks.ClusterLoggingTypes.CONTROLLER_MANAGER,
2342
eks.ClusterLoggingTypes.SCHEDULER
2443
];
44+
2545
this.cluster = new eks.Cluster(this, props.name, {
2646
clusterName: props.name,
2747
vpc: props.vpc,
@@ -31,14 +51,17 @@ export class EC2Stack extends Stack {
3151
clusterLogging: logging,
3252
kubectlLayer: GetLayer(this, props.version)
3353
});
54+
3455
const lt = new ec2.LaunchTemplate(this, `${props.name}-launch-template`, {
3556
requireImdsv2: true,
3657
httpEndpoint: true,
3758
httpPutResponseHopLimit: 2,
3859
httpTokens: ec2.LaunchTemplateHttpTokens.REQUIRED
3960
});
61+
4062
const clusterNodeGroup = new Nodegroup(this, `${props.name}-managed-ng`, {
4163
amiType: props.amiType,
64+
releaseVersion: getReleaseVersion(props.amiType, props.version.version, this),
4265
instanceTypes: props.instanceTypes,
4366
cluster: this.cluster,
4467
minSize: 2,
@@ -48,6 +71,7 @@ export class EC2Stack extends Stack {
4871
version: lt.latestVersionNumber
4972
}
5073
});
74+
5175
clusterNodeGroup.role.addManagedPolicy(
5276
ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore')
5377
);

0 commit comments

Comments
 (0)