Skip to content

Commit

Permalink
fix(efs): fix bug when setting both lifecyclePolicy and outOfInfreque…
Browse files Browse the repository at this point in the history
…ntAccessPolicy
  • Loading branch information
robertd committed Feb 22, 2022
1 parent 5b92cc3 commit 14aec3b
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 11 deletions.
26 changes: 20 additions & 6 deletions packages/@aws-cdk/aws-efs/lib/efs-file-system.ts
Expand Up @@ -341,15 +341,29 @@ export class FileSystem extends FileSystemBase {
const encrypted = props.encrypted ?? (FeatureFlags.of(this).isEnabled(
cxapi.EFS_DEFAULT_ENCRYPTION_AT_REST) ? true : undefined);

// LifecyclePolicies is an array of lists containing a single policy
let lifecyclePolicies = [];

const lifecyclePolicy = props.lifecyclePolicy ? {
transitionToIa: props.lifecyclePolicy,
} : undefined;

if (lifecyclePolicy) {
lifecyclePolicies.push(lifecyclePolicy);
}

const outOfInfrequentAccessPolicy = props.outOfInfrequentAccessPolicy ? {
transitionToPrimaryStorageClass: props.outOfInfrequentAccessPolicy,
} : undefined;

if (outOfInfrequentAccessPolicy) {
lifecyclePolicies.push(outOfInfrequentAccessPolicy);
}

const filesystem = new CfnFileSystem(this, 'Resource', {
encrypted: encrypted,
kmsKeyId: props.kmsKey?.keyArn,
lifecyclePolicies: (
(props.lifecyclePolicy || props.outOfInfrequentAccessPolicy) ?
[{
transitionToIa: props.lifecyclePolicy,
transitionToPrimaryStorageClass: props.outOfInfrequentAccessPolicy,
}] : undefined),
lifecyclePolicies: lifecyclePolicies.length > 0 ? lifecyclePolicies : undefined,
performanceMode: props.performanceMode,
throughputMode: props.throughputMode,
provisionedThroughputInMibps: props.provisionedThroughputPerSecond?.toMebibytes(),
Expand Down
12 changes: 8 additions & 4 deletions packages/@aws-cdk/aws-efs/test/efs-file-system.test.ts
Expand Up @@ -137,10 +137,14 @@ test('file system is created correctly with a life cycle property and out of inf
});
// THEN
Template.fromStack(stack).hasResourceProperties('AWS::EFS::FileSystem', {
LifecyclePolicies: [{
TransitionToIA: 'AFTER_7_DAYS',
TransitionToPrimaryStorageClass: 'AFTER_1_ACCESS',
}],
LifecyclePolicies: [
{
TransitionToIA: 'AFTER_7_DAYS',
},
{
TransitionToPrimaryStorageClass: 'AFTER_1_ACCESS',
},
],
});
});

Expand Down
4 changes: 3 additions & 1 deletion packages/@aws-cdk/aws-efs/test/integ.efs.ts
@@ -1,6 +1,6 @@
import * as ec2 from '@aws-cdk/aws-ec2';
import * as cdk from '@aws-cdk/core';
import { FileSystem } from '../lib';
import { FileSystem, LifecyclePolicy, OutOfInfrequentAccessPolicy } from '../lib';

const app = new cdk.App();
const stack = new cdk.Stack(app, 'test-efs-integ');
Expand All @@ -9,6 +9,8 @@ const vpc = new ec2.Vpc(stack, 'Vpc', { maxAzs: 3, natGateways: 1 });

const fileSystem = new FileSystem(stack, 'FileSystem', {
vpc,
lifecyclePolicy: LifecyclePolicy.AFTER_7_DAYS,
outOfInfrequentAccessPolicy: OutOfInfrequentAccessPolicy.AFTER_1_ACCESS,
});

fileSystem.addAccessPoint('AccessPoint', {
Expand Down

0 comments on commit 14aec3b

Please sign in to comment.