Skip to content

Commit

Permalink
fix(eks): ssm path for amazon linux 2 gpu ami is invalid (#7672)
Browse files Browse the repository at this point in the history
According to the [document](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html), the path should be /**aws/service/eks/optimized-ami/1.15/amazon-linux-2/recommended/image_id**

Also fixes #6891
  • Loading branch information
pahud committed May 1, 2020
1 parent 55c4d0b commit 5861d18
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 5 deletions.
8 changes: 4 additions & 4 deletions packages/@aws-cdk/aws-eks/lib/cluster.ts
Original file line number Diff line number Diff line change
Expand Up @@ -959,14 +959,14 @@ export class EksOptimizedImage implements ec2.IMachineImage {
/**
* Constructs a new instance of the EcsOptimizedAmi class.
*/
public constructor(props: EksOptimizedImageProps) {
this.nodeType = props && props.nodeType;
this.kubernetesVersion = props && props.kubernetesVersion || LATEST_KUBERNETES_VERSION;
public constructor(props: EksOptimizedImageProps = {}) {
this.nodeType = props.nodeType ?? NodeType.STANDARD;
this.kubernetesVersion = props.kubernetesVersion ?? LATEST_KUBERNETES_VERSION;

// set the SSM parameter name
this.amiParameterName = `/aws/service/eks/optimized-ami/${this.kubernetesVersion}/`
+ ( this.nodeType === NodeType.STANDARD ? 'amazon-linux-2/' : '' )
+ ( this.nodeType === NodeType.GPU ? 'amazon-linux2-gpu/' : '' )
+ ( this.nodeType === NodeType.GPU ? 'amazon-linux-2-gpu/' : '' )
+ 'recommended/image_id';
}

Expand Down
45 changes: 44 additions & 1 deletion packages/@aws-cdk/aws-eks/test/test.cluster.ts
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,49 @@ export = {
test.done();
},

'EksOptimizedImage() with no nodeType always uses STANDARD with LATEST_KUBERNETES_VERSION'(test: Test) {
// GIVEN
const { app, stack } = testFixtureNoVpc();
const LATEST_KUBERNETES_VERSION = '1.14';

// WHEN
new eks.EksOptimizedImage().getImage(stack);

// THEN
const assembly = app.synth();
const parameters = assembly.getStackByName(stack.stackName).template.Parameters;
test.ok(Object.entries(parameters).some(
([k, v]) => k.startsWith('SsmParameterValueawsserviceeksoptimizedami') &&
(v as any).Default.includes('/amazon-linux-2/'),
), 'EKS STANDARD AMI should be in ssm parameters');
test.ok(Object.entries(parameters).some(
([k, v]) => k.startsWith('SsmParameterValueawsserviceeksoptimizedami') &&
(v as any).Default.includes(LATEST_KUBERNETES_VERSION),
), 'LATEST_KUBERNETES_VERSION should be in ssm parameters');
test.done();
},

'EksOptimizedImage() with specific kubernetesVersion return correct AMI'(test: Test) {
// GIVEN
const { app, stack } = testFixtureNoVpc();

// WHEN
new eks.EksOptimizedImage({ kubernetesVersion: '1.15' }).getImage(stack);

// THEN
const assembly = app.synth();
const parameters = assembly.getStackByName(stack.stackName).template.Parameters;
test.ok(Object.entries(parameters).some(
([k, v]) => k.startsWith('SsmParameterValueawsserviceeksoptimizedami') &&
(v as any).Default.includes('/amazon-linux-2/'),
), 'EKS STANDARD AMI should be in ssm parameters');
test.ok(Object.entries(parameters).some(
([k, v]) => k.startsWith('SsmParameterValueawsserviceeksoptimizedami') &&
(v as any).Default.includes('/1.15/'),
), 'kubernetesVersion should be in ssm parameters');
test.done();
},

'EKS-Optimized AMI with GPU support when addCapacity'(test: Test) {
// GIVEN
const { app, stack } = testFixtureNoVpc();
Expand All @@ -736,7 +779,7 @@ export = {
const assembly = app.synth();
const parameters = assembly.getStackByName(stack.stackName).template.Parameters;
test.ok(Object.entries(parameters).some(
([k, v]) => k.startsWith('SsmParameterValueawsserviceeksoptimizedami') && (v as any).Default.includes('amazon-linux2-gpu'),
([k, v]) => k.startsWith('SsmParameterValueawsserviceeksoptimizedami') && (v as any).Default.includes('amazon-linux-2-gpu'),
), 'EKS AMI with GPU should be in ssm parameters');
test.done();
},
Expand Down

0 comments on commit 5861d18

Please sign in to comment.