Skip to content

Commit 1dddb7d

Browse files
committed
feat(custom-resources): log retention for AwsCustomResource
Add a `logRetention` prop to `AwsCustomResourceProps` to specify a custom log retention. Closes #6652
1 parent 8e802f4 commit 1dddb7d

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

packages/@aws-cdk/custom-resources/lib/aws-custom-resource/aws-custom-resource.ts

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { CustomResource, CustomResourceProvider } from '@aws-cdk/aws-cloudformation';
22
import * as iam from '@aws-cdk/aws-iam';
33
import * as lambda from '@aws-cdk/aws-lambda';
4+
import * as logs from '@aws-cdk/aws-logs';
45
import * as cdk from '@aws-cdk/core';
56
import * as fs from 'fs';
67
import * as path from 'path';
@@ -235,6 +236,14 @@ export interface AwsCustomResourceProps {
235236
* @default Duration.minutes(2)
236237
*/
237238
readonly timeout?: cdk.Duration
239+
240+
/**
241+
* The number of days log events of the Lambda function implementing
242+
* this custom resource are kept in CloudWatch Logs.
243+
*
244+
* @default logs.RetentionDays.INFINITE
245+
*/
246+
readonly logRetention?: logs.RetentionDays;
238247
}
239248

240249
/**
@@ -292,6 +301,7 @@ export class AwsCustomResource extends cdk.Construct implements iam.IGrantable {
292301
lambdaPurpose: 'AWS',
293302
timeout: props.timeout || cdk.Duration.minutes(2),
294303
role: props.role,
304+
logRetention: props.logRetention,
295305
});
296306
this.grantPrincipal = provider.grantPrincipal;
297307

packages/@aws-cdk/custom-resources/package.json

+2
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
"@aws-cdk/aws-cloudformation": "0.0.0",
8888
"@aws-cdk/aws-iam": "0.0.0",
8989
"@aws-cdk/aws-lambda": "0.0.0",
90+
"@aws-cdk/aws-logs": "0.0.0",
9091
"@aws-cdk/aws-sns": "0.0.0",
9192
"@aws-cdk/aws-stepfunctions": "0.0.0",
9293
"@aws-cdk/aws-stepfunctions-tasks": "0.0.0",
@@ -97,6 +98,7 @@
9798
"@aws-cdk/aws-cloudformation": "0.0.0",
9899
"@aws-cdk/aws-iam": "0.0.0",
99100
"@aws-cdk/aws-lambda": "0.0.0",
101+
"@aws-cdk/aws-logs": "0.0.0",
100102
"@aws-cdk/aws-sns": "0.0.0",
101103
"@aws-cdk/aws-stepfunctions": "0.0.0",
102104
"@aws-cdk/aws-stepfunctions-tasks": "0.0.0",

packages/@aws-cdk/custom-resources/test/aws-custom-resource/aws-custom-resource.test.ts

+33
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import '@aws-cdk/assert/jest';
22
import * as iam from '@aws-cdk/aws-iam';
3+
import * as logs from '@aws-cdk/aws-logs';
34
import * as cdk from '@aws-cdk/core';
45
import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from '../../lib';
56

@@ -488,3 +489,35 @@ test('getDataString', () => {
488489
}
489490
});
490491
});
492+
493+
test('can specify log retention', () => {
494+
// GIVEN
495+
const stack = new cdk.Stack();
496+
497+
// WHEN
498+
new AwsCustomResource(stack, 'AwsSdk', {
499+
onCreate: {
500+
service: 'service',
501+
action: 'action',
502+
physicalResourceId: PhysicalResourceId.of('id')
503+
},
504+
logRetention: logs.RetentionDays.ONE_WEEK,
505+
policy: AwsCustomResourcePolicy.fromSdkCalls({ resources: AwsCustomResourcePolicy.ANY_RESOURCE })
506+
});
507+
508+
// THEN
509+
expect(stack).toHaveResource('Custom::LogRetention', {
510+
LogGroupName: {
511+
'Fn::Join': [
512+
'',
513+
[
514+
'/aws/lambda/',
515+
{
516+
Ref: 'AWS679f53fac002430cb0da5b7982bd22872D164C4C'
517+
}
518+
]
519+
]
520+
},
521+
RetentionInDays: 7
522+
});
523+
});

0 commit comments

Comments
 (0)