Skip to content

Commit 7ca18c7

Browse files
fix(lambda): Code cleanup - fix review comments
fixes #8257
1 parent 5e9a4f0 commit 7ca18c7

6 files changed

Lines changed: 42 additions & 39 deletions

File tree

packages/@aws-cdk/aws-lambda/lib/function.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,12 +233,10 @@ export interface FunctionOptions extends EventInvokeConfigOptions {
233233
readonly logRetentionRole?: iam.IRole;
234234

235235
/**
236-
* Retry options for creating CloudWatch log groups. Deploying many Lambdas
237-
* with log retention resources may result in rate limit issues when creating
238-
* CloudWatch Log groups. The retry options allow you to customize the retry
239-
* options in order to successfully create these.
236+
* When log retention is specified, a custom resource attempts to create the CloudWatch log group.
237+
* These options control the retry policy when interacting with CloudWatch APIs.
240238
*
241-
* @default - Default retry options of the AWS SDK.
239+
* @default - Default AWS SDK retry options.
242240
*/
243241
readonly logRetentionRetryOptions?: LogRetentionRetryOptions;
244242

packages/@aws-cdk/aws-lambda/lib/log-retention-provider/index.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
// eslint-disable-next-line import/no-extraneous-dependencies
44
import * as AWS from 'aws-sdk';
5-
import { LogRetentionRetryOptions } from '../log-retention';
65

76
/**
87
* Creates a log group and doesn't throw if it exists.
98
*
10-
* @param logGroupName the name of the log group to create
9+
* @param logGroupName the name of the log group to create.
10+
* @param options CloudWatch API SDK options.
1111
*/
12-
async function createLogGroupSafe(logGroupName: string, retryOptions?: LogRetentionRetryOptions) {
12+
async function createLogGroupSafe(logGroupName: string, options?: any) {
1313
try { // Try to create the log group
14-
const cloudwatchlogs = new AWS.CloudWatchLogs({ apiVersion: '2014-03-28', ...retryOptions });
14+
const cloudwatchlogs = new AWS.CloudWatchLogs({ apiVersion: '2014-03-28', ...options });
1515
await cloudwatchlogs.createLogGroup({ logGroupName }).promise();
1616
} catch (e) {
1717
if (e.code !== 'ResourceAlreadyExistsException') {
@@ -24,10 +24,11 @@ async function createLogGroupSafe(logGroupName: string, retryOptions?: LogRetent
2424
* Puts or deletes a retention policy on a log group.
2525
*
2626
* @param logGroupName the name of the log group to create
27+
* @param options CloudWatch API SDK options.
2728
* @param retentionInDays the number of days to retain the log events in the specified log group.
2829
*/
29-
async function setRetentionPolicy(logGroupName: string, retryOptions?: LogRetentionRetryOptions, retentionInDays?: number) {
30-
const cloudwatchlogs = new AWS.CloudWatchLogs({ apiVersion: '2014-03-28', ...retryOptions });
30+
async function setRetentionPolicy(logGroupName: string, options?: any, retentionInDays?: number) {
31+
const cloudwatchlogs = new AWS.CloudWatchLogs({ apiVersion: '2014-03-28', ...options });
3132
if (!retentionInDays) {
3233
await cloudwatchlogs.deleteRetentionPolicy({ logGroupName }).promise();
3334
} else {
@@ -42,8 +43,8 @@ export async function handler(event: AWSLambda.CloudFormationCustomResourceEvent
4243
// The target log group
4344
const logGroupName = event.ResourceProperties.LogGroupName;
4445

45-
// Parse retry options for creating the target log group
46-
const retryOptions = parseRetryOptions(event.ResourceProperties.LogRetentionRetryOptions);
46+
// Parse to AWS SDK retry options
47+
const retryOptions = parseRetryOptions(event.ResourceProperties.SdkRetry);
4748

4849
if (event.RequestType === 'Create' || event.RequestType === 'Update') {
4950
// Act on the target log group

packages/@aws-cdk/aws-lambda/lib/log-retention.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,29 @@ export interface LogRetentionProps {
2828
readonly role?: iam.IRole;
2929

3030
/**
31-
* Retry options for managing CloudWatch log groups.
31+
* Retry options for all AWS API calls.
3232
*
3333
* @default - AWS SDK default retry options
3434
*/
3535
readonly logRetentionRetryOptions?: LogRetentionRetryOptions;
3636
}
3737

3838
/**
39-
* Retry options for managing CloudWatch log groups
39+
* Retry options for all AWS API calls.
4040
*/
4141
export interface LogRetentionRetryOptions {
4242
/**
4343
* The maximum amount of retries.
4444
*
45-
* @default - AWS SDK default
45+
* @default - 3 (AWS SDK default)
4646
*/
4747
readonly maxRetries?: number;
4848
/**
49-
* The base number of milliseconds to use in the exponential backoff for operation retries.
49+
* The base duration to use in the exponential backoff for operation retries.
5050
*
51-
* @default - AWS SDK default
51+
* @default - 100 milliseconds (AWS SDK default)
5252
*/
53-
readonly base?: number;
53+
readonly base?: cdk.Duration;
5454
}
5555

5656
/**
@@ -89,12 +89,16 @@ export class LogRetention extends cdk.Construct {
8989

9090
// Need to use a CfnResource here to prevent lerna dependency cycles
9191
// @aws-cdk/aws-cloudformation -> @aws-cdk/aws-lambda -> @aws-cdk/aws-cloudformation
92+
const retryOptions = props.logRetentionRetryOptions;
9293
const resource = new cdk.CfnResource(this, 'Resource', {
9394
type: 'Custom::LogRetention',
9495
properties: {
9596
ServiceToken: provider.functionArn,
9697
LogGroupName: props.logGroupName,
97-
LogRetentionRetryOptions: props.logRetentionRetryOptions,
98+
SdkRetry: retryOptions ? {
99+
maxRetries: retryOptions.maxRetries,
100+
base: retryOptions.base?.toMilliseconds(),
101+
} : undefined,
98102
RetentionInDays: props.retention === logs.RetentionDays.INFINITE ? undefined : props.retention,
99103
},
100104
});

packages/@aws-cdk/aws-lambda/test/integ.log-retention.expected.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@
133133
"Properties": {
134134
"Code": {
135135
"S3Bucket": {
136-
"Ref": "AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3BucketA7A09DD7"
136+
"Ref": "AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3Bucket7D13D80A"
137137
},
138138
"S3Key": {
139139
"Fn::Join": [
@@ -146,7 +146,7 @@
146146
"Fn::Split": [
147147
"||",
148148
{
149-
"Ref": "AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3VersionKey579A73D3"
149+
"Ref": "AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3VersionKey8FAF5E55"
150150
}
151151
]
152152
}
@@ -159,7 +159,7 @@
159159
"Fn::Split": [
160160
"||",
161161
{
162-
"Ref": "AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3VersionKey579A73D3"
162+
"Ref": "AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3VersionKey8FAF5E55"
163163
}
164164
]
165165
}
@@ -331,17 +331,17 @@
331331
}
332332
},
333333
"Parameters": {
334-
"AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3BucketA7A09DD7": {
334+
"AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3Bucket7D13D80A": {
335335
"Type": "String",
336-
"Description": "S3 bucket for asset \"e375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028f\""
336+
"Description": "S3 bucket for asset \"5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67\""
337337
},
338-
"AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3VersionKey579A73D3": {
338+
"AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3VersionKey8FAF5E55": {
339339
"Type": "String",
340-
"Description": "S3 key for asset version \"e375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028f\""
340+
"Description": "S3 key for asset version \"5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67\""
341341
},
342-
"AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fArtifactHashE75963CF": {
342+
"AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67ArtifactHash13DA6A3B": {
343343
"Type": "String",
344-
"Description": "Artifact hash for asset \"e375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028f\""
344+
"Description": "Artifact hash for asset \"5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67\""
345345
}
346346
}
347347
}

packages/@aws-cdk/aws-lambda/test/test.log-retention-provider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ export = {
309309
ServiceToken: 'token',
310310
RetentionInDays: '30',
311311
LogGroupName: 'group',
312-
LogRetentionRetryOptions: {
312+
SdkRetry: {
313313
maxRetries: '5',
314314
base: '300',
315315
},

packages/@aws-cdk/aws-rds/test/integ.instance.lit.expected.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -967,7 +967,7 @@
967967
"Properties": {
968968
"Code": {
969969
"S3Bucket": {
970-
"Ref": "AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3BucketA7A09DD7"
970+
"Ref": "AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3Bucket7D13D80A"
971971
},
972972
"S3Key": {
973973
"Fn::Join": [
@@ -980,7 +980,7 @@
980980
"Fn::Split": [
981981
"||",
982982
{
983-
"Ref": "AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3VersionKey579A73D3"
983+
"Ref": "AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3VersionKey8FAF5E55"
984984
}
985985
]
986986
}
@@ -993,7 +993,7 @@
993993
"Fn::Split": [
994994
"||",
995995
{
996-
"Ref": "AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3VersionKey579A73D3"
996+
"Ref": "AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3VersionKey8FAF5E55"
997997
}
998998
]
999999
}
@@ -1108,17 +1108,17 @@
11081108
}
11091109
},
11101110
"Parameters": {
1111-
"AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3BucketA7A09DD7": {
1111+
"AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3Bucket7D13D80A": {
11121112
"Type": "String",
1113-
"Description": "S3 bucket for asset \"e375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028f\""
1113+
"Description": "S3 bucket for asset \"5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67\""
11141114
},
1115-
"AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fS3VersionKey579A73D3": {
1115+
"AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67S3VersionKey8FAF5E55": {
11161116
"Type": "String",
1117-
"Description": "S3 key for asset version \"e375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028f\""
1117+
"Description": "S3 key for asset version \"5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67\""
11181118
},
1119-
"AssetParameterse375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028fArtifactHashE75963CF": {
1119+
"AssetParameters5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67ArtifactHash13DA6A3B": {
11201120
"Type": "String",
1121-
"Description": "Artifact hash for asset \"e375da66e6ab168bb13b858a043e9e8c8c20334b443d746983fa4ad0dcc7028f\""
1121+
"Description": "Artifact hash for asset \"5e2b20ad370d3155f4160b75bbf219a9280a3ea5ff390409ce201444026b0f67\""
11221122
}
11231123
}
11241124
}

0 commit comments

Comments
 (0)