@gradientedge/cdk-utils 4.0.14 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +37 -9
  2. package/dist/src/lib/common/commonConstruct.d.ts +5 -5
  3. package/dist/src/lib/common/commonConstruct.js +5 -5
  4. package/dist/src/lib/common/commonStack.d.ts +2 -1
  5. package/dist/src/lib/common/commonStack.d.ts.map +1 -1
  6. package/dist/src/lib/common/commonStack.js +2 -1
  7. package/dist/src/lib/common/commonStack.js.map +1 -1
  8. package/dist/src/lib/construct/graphQLApiLambda.d.ts +1 -0
  9. package/dist/src/lib/construct/graphQLApiLambda.d.ts.map +1 -1
  10. package/dist/src/lib/construct/graphQLApiLambda.js +1 -0
  11. package/dist/src/lib/construct/graphQLApiLambda.js.map +1 -1
  12. package/dist/src/lib/construct/siteWithEcsBackend.d.ts +13 -0
  13. package/dist/src/lib/construct/siteWithEcsBackend.d.ts.map +1 -1
  14. package/dist/src/lib/construct/siteWithEcsBackend.js +29 -1
  15. package/dist/src/lib/construct/siteWithEcsBackend.js.map +1 -1
  16. package/dist/src/lib/construct/staticSite.d.ts +13 -0
  17. package/dist/src/lib/construct/staticSite.d.ts.map +1 -1
  18. package/dist/src/lib/construct/staticSite.js +30 -1
  19. package/dist/src/lib/construct/staticSite.js.map +1 -1
  20. package/dist/src/lib/manager/acmManager.d.ts +2 -1
  21. package/dist/src/lib/manager/acmManager.d.ts.map +1 -1
  22. package/dist/src/lib/manager/acmManager.js +2 -1
  23. package/dist/src/lib/manager/acmManager.js.map +1 -1
  24. package/dist/src/lib/manager/apiManager.d.ts +2 -1
  25. package/dist/src/lib/manager/apiManager.d.ts.map +1 -1
  26. package/dist/src/lib/manager/apiManager.js +2 -1
  27. package/dist/src/lib/manager/apiManager.js.map +1 -1
  28. package/dist/src/lib/manager/appConfigManager.d.ts +2 -1
  29. package/dist/src/lib/manager/appConfigManager.d.ts.map +1 -1
  30. package/dist/src/lib/manager/appConfigManager.js +2 -1
  31. package/dist/src/lib/manager/appConfigManager.js.map +1 -1
  32. package/dist/src/lib/manager/cloudFrontManager.d.ts +15 -4
  33. package/dist/src/lib/manager/cloudFrontManager.d.ts.map +1 -1
  34. package/dist/src/lib/manager/cloudFrontManager.js +27 -3
  35. package/dist/src/lib/manager/cloudFrontManager.js.map +1 -1
  36. package/dist/src/lib/manager/cloudTrailManager.d.ts +2 -1
  37. package/dist/src/lib/manager/cloudTrailManager.d.ts.map +1 -1
  38. package/dist/src/lib/manager/cloudTrailManager.js +2 -1
  39. package/dist/src/lib/manager/cloudTrailManager.js.map +1 -1
  40. package/dist/src/lib/manager/cloudWatchManager.d.ts +2 -1
  41. package/dist/src/lib/manager/cloudWatchManager.d.ts.map +1 -1
  42. package/dist/src/lib/manager/cloudWatchManager.js +2 -1
  43. package/dist/src/lib/manager/cloudWatchManager.js.map +1 -1
  44. package/dist/src/lib/manager/codeBuildManager.d.ts +16 -0
  45. package/dist/src/lib/manager/codeBuildManager.d.ts.map +1 -1
  46. package/dist/src/lib/manager/codeBuildManager.js +16 -0
  47. package/dist/src/lib/manager/codeBuildManager.js.map +1 -1
  48. package/dist/src/lib/manager/ecrManager.d.ts +2 -1
  49. package/dist/src/lib/manager/ecrManager.d.ts.map +1 -1
  50. package/dist/src/lib/manager/ecrManager.js +2 -1
  51. package/dist/src/lib/manager/ecrManager.js.map +1 -1
  52. package/dist/src/lib/manager/ecsManager.d.ts +2 -1
  53. package/dist/src/lib/manager/ecsManager.d.ts.map +1 -1
  54. package/dist/src/lib/manager/ecsManager.js +2 -1
  55. package/dist/src/lib/manager/ecsManager.js.map +1 -1
  56. package/dist/src/lib/manager/eksManager.d.ts +2 -1
  57. package/dist/src/lib/manager/eksManager.d.ts.map +1 -1
  58. package/dist/src/lib/manager/eksManager.js +2 -1
  59. package/dist/src/lib/manager/eksManager.js.map +1 -1
  60. package/dist/src/lib/manager/eventManager.d.ts +2 -1
  61. package/dist/src/lib/manager/eventManager.d.ts.map +1 -1
  62. package/dist/src/lib/manager/eventManager.js +2 -1
  63. package/dist/src/lib/manager/eventManager.js.map +1 -1
  64. package/dist/src/lib/manager/iamManager.d.ts +2 -1
  65. package/dist/src/lib/manager/iamManager.d.ts.map +1 -1
  66. package/dist/src/lib/manager/iamManager.js +2 -1
  67. package/dist/src/lib/manager/iamManager.js.map +1 -1
  68. package/dist/src/lib/manager/lambdaManager.d.ts +2 -1
  69. package/dist/src/lib/manager/lambdaManager.d.ts.map +1 -1
  70. package/dist/src/lib/manager/lambdaManager.js +2 -1
  71. package/dist/src/lib/manager/lambdaManager.js.map +1 -1
  72. package/dist/src/lib/manager/logManager.d.ts +2 -1
  73. package/dist/src/lib/manager/logManager.d.ts.map +1 -1
  74. package/dist/src/lib/manager/logManager.js +2 -1
  75. package/dist/src/lib/manager/logManager.js.map +1 -1
  76. package/dist/src/lib/manager/route53Manager.d.ts +2 -1
  77. package/dist/src/lib/manager/route53Manager.d.ts.map +1 -1
  78. package/dist/src/lib/manager/route53Manager.js +2 -1
  79. package/dist/src/lib/manager/route53Manager.js.map +1 -1
  80. package/dist/src/lib/manager/s3Manager.d.ts +23 -2
  81. package/dist/src/lib/manager/s3Manager.d.ts.map +1 -1
  82. package/dist/src/lib/manager/s3Manager.js +61 -8
  83. package/dist/src/lib/manager/s3Manager.js.map +1 -1
  84. package/dist/src/lib/manager/secretsManager.d.ts +3 -2
  85. package/dist/src/lib/manager/secretsManager.d.ts.map +1 -1
  86. package/dist/src/lib/manager/secretsManager.js +3 -2
  87. package/dist/src/lib/manager/secretsManager.js.map +1 -1
  88. package/dist/src/lib/manager/snsManager.d.ts +2 -1
  89. package/dist/src/lib/manager/snsManager.d.ts.map +1 -1
  90. package/dist/src/lib/manager/snsManager.js +2 -1
  91. package/dist/src/lib/manager/snsManager.js.map +1 -1
  92. package/dist/src/lib/manager/ssmManager.d.ts +2 -1
  93. package/dist/src/lib/manager/ssmManager.d.ts.map +1 -1
  94. package/dist/src/lib/manager/ssmManager.js +2 -1
  95. package/dist/src/lib/manager/ssmManager.js.map +1 -1
  96. package/dist/src/lib/manager/vpcManager.d.ts +2 -1
  97. package/dist/src/lib/manager/vpcManager.d.ts.map +1 -1
  98. package/dist/src/lib/manager/vpcManager.js +2 -1
  99. package/dist/src/lib/manager/vpcManager.js.map +1 -1
  100. package/dist/src/lib/manager/wafManager.d.ts +2 -1
  101. package/dist/src/lib/manager/wafManager.d.ts.map +1 -1
  102. package/dist/src/lib/manager/wafManager.js +2 -1
  103. package/dist/src/lib/manager/wafManager.js.map +1 -1
  104. package/dist/src/lib/types.d.ts +17 -0
  105. package/dist/src/lib/types.d.ts.map +1 -1
  106. package/package.json +24 -18
  107. package/src/lib/common/commonConstruct.ts +5 -5
  108. package/src/lib/common/commonStack.ts +2 -1
  109. package/src/lib/construct/graphQLApiLambda.ts +1 -0
  110. package/src/lib/construct/siteWithEcsBackend.ts +36 -1
  111. package/src/lib/construct/staticSite.ts +36 -1
  112. package/src/lib/manager/acmManager.ts +2 -1
  113. package/src/lib/manager/apiManager.ts +2 -1
  114. package/src/lib/manager/appConfigManager.ts +2 -1
  115. package/src/lib/manager/cloudFrontManager.ts +33 -4
  116. package/src/lib/manager/cloudTrailManager.ts +2 -1
  117. package/src/lib/manager/cloudWatchManager.ts +2 -1
  118. package/src/lib/manager/codeBuildManager.ts +16 -0
  119. package/src/lib/manager/ecrManager.ts +2 -1
  120. package/src/lib/manager/ecsManager.ts +2 -1
  121. package/src/lib/manager/eksManager.ts +2 -1
  122. package/src/lib/manager/eventManager.ts +2 -1
  123. package/src/lib/manager/iamManager.ts +2 -1
  124. package/src/lib/manager/lambdaManager.ts +2 -1
  125. package/src/lib/manager/logManager.ts +2 -1
  126. package/src/lib/manager/route53Manager.ts +2 -1
  127. package/src/lib/manager/s3Manager.ts +67 -9
  128. package/src/lib/manager/secretsManager.ts +3 -2
  129. package/src/lib/manager/snsManager.ts +2 -1
  130. package/src/lib/manager/ssmManager.ts +2 -1
  131. package/src/lib/manager/vpcManager.ts +2 -1
  132. package/src/lib/manager/wafManager.ts +2 -1
  133. package/src/lib/types.ts +19 -0
@@ -20,9 +20,10 @@ import { createCfnOutput } from '../utils'
20
20
  * super(parent, id, props)
21
21
  * this.props = props
22
22
  * this.route53Manager.createHostedZone('MyHostedZone', this)
23
+ * }
23
24
  * }
24
25
  *
25
- * @see [CDK Route53 Module]{@link https://docs.aws.amazon.com/cdk/api/latest/docs/aws-route53-readme.html}
26
+ * @see [CDK Route53 Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_route53-readme.html}
26
27
  */
27
28
  export class Route53Manager {
28
29
  /**
@@ -4,7 +4,7 @@ import * as iam from 'aws-cdk-lib/aws-iam'
4
4
  import * as s3 from 'aws-cdk-lib/aws-s3'
5
5
  import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment'
6
6
  import { CommonConstruct } from '../common/commonConstruct'
7
- import { S3BucketProps } from '../types'
7
+ import { LifecycleRule, S3BucketProps } from '../types'
8
8
  import { createCfnOutput } from '../utils'
9
9
 
10
10
  /**
@@ -21,11 +21,66 @@ import { createCfnOutput } from '../utils'
21
21
  * super(parent, id, props)
22
22
  * this.props = props
23
23
  * this.s3Manager.createS3Bucket('MyBucket', this)
24
+ * }
24
25
  * }
25
26
  *
26
- * @see [CDK S3 Module]{@link https://docs.aws.amazon.com/cdk/api/latest/docs/aws-s3-readme.html}
27
+ * @see [CDK S3 Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3-readme.html}
27
28
  */
28
29
  export class S3Manager {
30
+ /**
31
+ * @summary Method to determine S3 Bucket lifecycle properties
32
+ * @param {S3BucketProps} props bucket properties
33
+ * @private
34
+ */
35
+ protected determineBucketLifecycleRules(props: S3BucketProps) {
36
+ if (!props.lifecycleRules) return undefined
37
+
38
+ const bucketLifecycleRules: LifecycleRule[] = []
39
+ props.lifecycleRules.forEach(lifecycleRule => {
40
+ bucketLifecycleRules.push({
41
+ id: lifecycleRule.id,
42
+ enabled: lifecycleRule.enabled,
43
+ abortIncompleteMultipartUploadAfter: lifecycleRule.abortIncompleteMultipartUploadAfter,
44
+ expirationDate: lifecycleRule.expirationDate,
45
+ expiration: lifecycleRule.expirationInDays ? cdk.Duration.days(lifecycleRule.expirationInDays) : undefined,
46
+ noncurrentVersionExpiration: lifecycleRule.noncurrentVersionExpirationInDays
47
+ ? cdk.Duration.days(lifecycleRule.noncurrentVersionExpirationInDays)
48
+ : undefined,
49
+ noncurrentVersionTransitions: lifecycleRule.noncurrentVersionTransitions,
50
+ transitions: lifecycleRule.transitions,
51
+ prefix: lifecycleRule.prefix,
52
+ tagFilters: lifecycleRule.tagFilters,
53
+ expiredObjectDeleteMarker: lifecycleRule.expiredObjectDeleteMarker,
54
+ })
55
+ })
56
+
57
+ return bucketLifecycleRules
58
+ }
59
+
60
+ /**
61
+ * @summary Method to determine the bucket name
62
+ * @param {CommonConstruct} scope scope in which this resource is defined
63
+ * @param {S3BucketProps} props bucket properties
64
+ * @private
65
+ */
66
+ protected static determineBucketName(scope: CommonConstruct, props: S3BucketProps) {
67
+ return scope.isProductionStage()
68
+ ? `${props.bucketName}.${scope.fullyQualifiedDomainName}`
69
+ : `${props.bucketName}-${scope.props.stage}.${scope.fullyQualifiedDomainName}`
70
+ }
71
+
72
+ /**
73
+ * @summary Method to determine the log bucket name
74
+ * @param {CommonConstruct} scope scope in which this resource is defined
75
+ * @param {S3BucketProps} props bucket properties
76
+ * @private
77
+ */
78
+ protected static determineLogBucketName(scope: CommonConstruct, props: S3BucketProps) {
79
+ return scope.isProductionStage()
80
+ ? `${props.logBucketName}.${scope.fullyQualifiedDomainName}`
81
+ : `${props.logBucketName}-${scope.props.stage}.${scope.fullyQualifiedDomainName}`
82
+ }
83
+
29
84
  /**
30
85
  * @summary Method to create a s3 bucket
31
86
  * @param {string} id scoped id of the resource
@@ -37,18 +92,14 @@ export class S3Manager {
37
92
 
38
93
  let bucket: s3.IBucket
39
94
 
40
- const bucketName = scope.isProductionStage()
41
- ? `${props.bucketName}.${scope.fullyQualifiedDomainName}`
42
- : `${props.bucketName}-${scope.props.stage}.${scope.fullyQualifiedDomainName}`
95
+ const bucketName = S3Manager.determineBucketName(scope, props)
43
96
 
44
97
  if (props.existingBucket && props.bucketName) {
45
98
  bucket = s3.Bucket.fromBucketName(scope, `${id}`, bucketName)
46
99
  } else {
47
100
  let logBucket
48
101
  if (props.logBucketName) {
49
- const logBucketName = scope.isProductionStage()
50
- ? `${props.logBucketName}.${scope.fullyQualifiedDomainName}`
51
- : `${props.logBucketName}-${scope.props.stage}.${scope.fullyQualifiedDomainName}`
102
+ const logBucketName = S3Manager.determineLogBucketName(scope, props)
52
103
  logBucket = s3.Bucket.fromBucketName(scope, `${id}-logs`, logBucketName)
53
104
  }
54
105
 
@@ -60,7 +111,7 @@ export class S3Manager {
60
111
  cors: props.cors,
61
112
  encryption: props.encryption || s3.BucketEncryption.S3_MANAGED,
62
113
  encryptionKey: props.encryptionKey,
63
- lifecycleRules: props.lifecycleRules,
114
+ lifecycleRules: this.determineBucketLifecycleRules(props),
64
115
  metrics: props.metrics,
65
116
  publicReadAccess: props.publicReadAccess,
66
117
  removalPolicy: props.removalPolicy || cdk.RemovalPolicy.RETAIN,
@@ -71,6 +122,13 @@ export class S3Manager {
71
122
  websiteRoutingRules: props.websiteRoutingRules,
72
123
  versioned: props.versioned,
73
124
  })
125
+
126
+ const cfnBucket = bucket.node.defaultChild as s3.CfnBucket
127
+ cfnBucket.notificationConfiguration = {
128
+ eventBridgeConfiguration: {
129
+ eventBridgeEnabled: props.enableEventBridge ?? false,
130
+ },
131
+ }
74
132
  }
75
133
 
76
134
  createCfnOutput(`${id}-bucketName`, scope, bucket.bucketName)
@@ -18,10 +18,11 @@ const fs = require('fs')
18
18
  * constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
19
19
  * super(parent, id, props)
20
20
  * this.props = props
21
- * this.s3Manager.loadSecret('MySecretName', 'eu-west-1')
21
+ * this.secretsManager.loadSecret('MySecretName', 'eu-west-1')
22
+ * }
22
23
  * }
23
24
  *
24
- * @see [CDK Secrets Manager Module]{@link https://docs.aws.amazon.com/cdk/api/latest/docs/aws-secretsmanager-readme.html}
25
+ * @see [CDK Secrets Manager Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_secretsmanager-readme.html}
25
26
  */
26
27
  export class SecretsManager {
27
28
  /**
@@ -19,9 +19,10 @@ import { createCfnOutput } from '../utils'
19
19
  * super(parent, id, props)
20
20
  * this.props = props
21
21
  * this.snsManager.createEmailNotificationService('MySns', 'eu-west-1', ['test@example.com'])
22
+ * }
22
23
  * }
23
24
  *
24
- * @see [CDK Simple Notification Service Module]{@link https://docs.aws.amazon.com/cdk/api/latest/docs/aws-sns-readme.html}
25
+ * @see [CDK Simple Notification Service Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_sns-readme.html}
25
26
  */
26
27
  export class SnsManager {
27
28
  /**
@@ -18,9 +18,10 @@ import { SSMParameterReaderProps } from '../types'
18
18
  * super(parent, id, props)
19
19
  * this.props = props
20
20
  * this.acmManager.writeStringToParameters('MyParameter', this, ...props)
21
+ * }
21
22
  * }
22
23
  *
23
- * @see [CDK Systems Manager Module]{@link https://docs.aws.amazon.com/cdk/api/latest/docs/aws-ssm-readme.html}
24
+ * @see [CDK Systems Manager Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm-readme.html}
24
25
  */
25
26
  export class SsmManager {
26
27
  /**
@@ -22,9 +22,10 @@ const CommonVpcIdentifier = 'CommonVpc'
22
22
  * super(parent, id, props)
23
23
  * this.props = props
24
24
  * this.vpcManager.createVpc('MyVPC', this)
25
+ * }
25
26
  * }
26
27
  *
27
- * @see [CDK VPC Module]{@link https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ec2.Vpc.html}
28
+ * @see [CDK VPC Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.@aws-cdk_aws-ec2.Vpc.html}
28
29
  */
29
30
  export class VpcManager {
30
31
  /**
@@ -17,9 +17,10 @@ import { WafIPSetProps, WafWebACLProps } from '../types'
17
17
  * super(parent, id, props)
18
18
  * this.props = props
19
19
  * this.wafManager.createWebAcl('MyWebAcl', this)
20
+ * }
20
21
  * }
21
22
  *
22
- * @see [CDK WAF Module]{@link https://docs.aws.amazon.com/cdk/api/latest/docs/aws-waf-readme.html}
23
+ * @see [CDK WAF Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_waf-readme.html}
23
24
  */
24
25
  export class WafManager {
25
26
  /**
package/src/lib/types.ts CHANGED
@@ -50,6 +50,8 @@ export interface SiteWithEcsBackendProps extends CommonStackProps {
50
50
  siteCertificate: AcmProps
51
51
  siteCluster: EcsClusterProps
52
52
  siteDistribution: DistributionProps
53
+ siteCloudfrontFunctionProps?: CloudfrontFunctionProps
54
+ siteFunctionFilePath?: string
53
55
  siteEcsContainerImagePath: string
54
56
  siteLog: LogProps
55
57
  siteLogBucket: S3BucketProps
@@ -69,6 +71,8 @@ export interface StaticSiteProps extends CommonStackProps {
69
71
  siteBucket: S3BucketProps
70
72
  siteLogBucket: S3BucketProps
71
73
  siteDistribution?: DistributionProps
74
+ siteCloudfrontFunctionProps?: CloudfrontFunctionProps
75
+ siteFunctionFilePath?: string
72
76
  siteSource: s3deploy.ISource
73
77
  siteHostedZoneDomainName?: string
74
78
  siteRecordName?: string
@@ -131,6 +135,14 @@ export interface SSMParameterReaderProps {
131
135
  */
132
136
  export interface CloudFrontProps extends cloudfront.CloudFrontWebDistributionProps {}
133
137
 
138
+ /**
139
+ * @category Networking & Content Delivery
140
+ */
141
+ export interface CloudfrontFunctionProps extends cloudfront.FunctionProps {
142
+ functionFilePath: string
143
+ eventType: string
144
+ }
145
+
134
146
  /**
135
147
  * @category Networking & Content Delivery
136
148
  */
@@ -268,10 +280,17 @@ export interface Route53Props extends route53.HostedZoneProps {
268
280
  useExistingHostedZone?: boolean
269
281
  }
270
282
 
283
+ export interface LifecycleRule extends s3.LifecycleRule {
284
+ expirationInDays?: number
285
+ noncurrentVersionExpirationInDays?: number
286
+ }
287
+
271
288
  /**
272
289
  * @category Storage
273
290
  */
274
291
  export interface S3BucketProps extends s3.BucketProps {
292
+ enableEventBridge?: boolean
293
+ lifecycleRules?: LifecycleRule[]
275
294
  bucketName: string
276
295
  logBucketName?: string
277
296
  existingBucket?: boolean