@@ -8,6 +8,25 @@ import {
88} from 'aws-cdk-lib/aws-eks' ;
99import { ManagedPolicy } from 'aws-cdk-lib/aws-iam' ;
1010import { 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
1231export 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