Skip to content

Commit 43013d0

Browse files
fix(ecs): Windows ECS Optimized AMI SSM parameter format is incorrect (#26326)
The format of the Windows ECS optimized ssm parameter used by CDK is incorrect. The correct format can be found [here](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_windows_AMI.html) ``` Current incorrect format: /aws/service/ecs/optimized-ami/windows_server/${this.windowsVersion}/english/full/recommended/image_id Correct format: /aws/service/ami-windows-latest/Windows_Server-${this.windowsVersion}-English-Full-ECS_Optimized ``` Closes #26327. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent 546456a commit 43013d0

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

packages/aws-cdk-lib/aws-ecs/lib/amis.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export enum AmiHardwareType {
3131
* ECS-optimized Windows version list
3232
*/
3333
export enum WindowsOptimizedVersion {
34+
SERVER_2022 = '2022',
3435
SERVER_2019 = '2019',
3536
SERVER_2016 = '2016',
3637
}
@@ -134,13 +135,14 @@ export class EcsOptimizedAmi implements ec2.IMachineImage {
134135
}
135136

136137
// set the SSM parameter name
137-
this.amiParameterName = '/aws/service/ecs/optimized-ami/'
138+
this.amiParameterName = '/aws/service/'
139+
+ (this.windowsVersion ? 'ami-windows-latest/' : 'ecs/optimized-ami/')
138140
+ (this.generation === ec2.AmazonLinuxGeneration.AMAZON_LINUX ? 'amazon-linux/' : '')
139141
+ (this.generation === ec2.AmazonLinuxGeneration.AMAZON_LINUX_2 ? 'amazon-linux-2/' : '')
140-
+ (this.windowsVersion ? `windows_server/${this.windowsVersion}/english/full/` : '')
142+
+ (this.windowsVersion ? `Windows_Server-${this.windowsVersion}-English-Full-ECS_Optimized/` : '')
141143
+ (this.hwType === AmiHardwareType.GPU ? 'gpu/' : '')
142144
+ (this.hwType === AmiHardwareType.ARM ? 'arm64/' : '')
143-
+ 'recommended/image_id';
145+
+ (this.windowsVersion ? 'image_id' : 'recommended/image_id');
144146

145147
this.cachedInContext = props?.cachedInContext ?? false;
146148
}
@@ -247,13 +249,14 @@ export class EcsOptimizedImage implements ec2.IMachineImage {
247249
}
248250

249251
// set the SSM parameter name
250-
this.amiParameterName = '/aws/service/ecs/optimized-ami/'
252+
this.amiParameterName = '/aws/service/'
253+
+ (this.windowsVersion ? 'ami-windows-latest/' : 'ecs/optimized-ami/')
251254
+ (this.generation === ec2.AmazonLinuxGeneration.AMAZON_LINUX ? 'amazon-linux/' : '')
252255
+ (this.generation === ec2.AmazonLinuxGeneration.AMAZON_LINUX_2 ? 'amazon-linux-2/' : '')
253-
+ (this.windowsVersion ? `windows_server/${this.windowsVersion}/english/full/` : '')
256+
+ (this.windowsVersion ? `Windows_Server-${this.windowsVersion}-English-Full-ECS_Optimized/` : '')
254257
+ (this.hwType === AmiHardwareType.GPU ? 'gpu/' : '')
255258
+ (this.hwType === AmiHardwareType.ARM ? 'arm64/' : '')
256-
+ 'recommended/image_id';
259+
+ (this.windowsVersion ? 'image_id' : 'recommended/image_id');
257260

258261
this.cachedInContext = props?.cachedInContext ?? false;
259262
}

packages/aws-cdk-lib/aws-ecs/test/cluster.test.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,7 @@ describe('cluster', () => {
792792
// THEN
793793
Template.fromStack(stack).hasResourceProperties('AWS::AutoScaling::LaunchConfiguration', {
794794
ImageId: {
795-
Ref: 'SsmParameterValueawsserviceecsoptimizedamiwindowsserver2019englishfullrecommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter',
795+
Ref: 'SsmParameterValueawsserviceamiwindowslatestWindowsServer2019EnglishFullECSOptimizedimageidC96584B6F00A464EAD1953AFF4B05118Parameter',
796796
},
797797
InstanceType: 't2.micro',
798798
IamInstanceProfile: {
@@ -901,9 +901,9 @@ describe('cluster', () => {
901901
const assembly = app.synth();
902902
const template = assembly.getStackByName(stack.stackName).template;
903903
expect(template.Parameters).toEqual({
904-
SsmParameterValueawsserviceecsoptimizedamiwindowsserver2019englishfullrecommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter: {
904+
SsmParameterValueawsserviceamiwindowslatestWindowsServer2019EnglishFullECSOptimizedimageidC96584B6F00A464EAD1953AFF4B05118Parameter: {
905905
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>',
906-
Default: '/aws/service/ecs/optimized-ami/windows_server/2019/english/full/recommended/image_id',
906+
Default: '/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized/image_id',
907907
},
908908
});
909909

@@ -1135,9 +1135,9 @@ describe('cluster', () => {
11351135
const assembly = app.synth();
11361136
const template = assembly.getStackByName(stack.stackName).template;
11371137
expect(template.Parameters).toEqual({
1138-
SsmParameterValueawsserviceecsoptimizedamiwindowsserver2019englishfullrecommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter: {
1138+
SsmParameterValueawsserviceamiwindowslatestWindowsServer2019EnglishFullECSOptimizedimageidC96584B6F00A464EAD1953AFF4B05118Parameter: {
11391139
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>',
1140-
Default: '/aws/service/ecs/optimized-ami/windows_server/2019/english/full/recommended/image_id',
1140+
Default: '/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized/image_id',
11411141
},
11421142
});
11431143

0 commit comments

Comments
 (0)