@gradientedge/cdk-utils-aws 1.0.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 (288) hide show
  1. package/LICENSE +21 -0
  2. package/dist/src/common/construct.d.ts +85 -0
  3. package/dist/src/common/construct.js +125 -0
  4. package/dist/src/common/index.d.ts +4 -0
  5. package/dist/src/common/index.js +4 -0
  6. package/dist/src/common/resource-name-formatter.d.ts +13 -0
  7. package/dist/src/common/resource-name-formatter.js +30 -0
  8. package/dist/src/common/stack.d.ts +62 -0
  9. package/dist/src/common/stack.js +139 -0
  10. package/dist/src/common/types.d.ts +30 -0
  11. package/dist/src/common/types.js +1 -0
  12. package/dist/src/construct/api-to-any-target/index.d.ts +3 -0
  13. package/dist/src/construct/api-to-any-target/index.js +3 -0
  14. package/dist/src/construct/api-to-any-target/main.d.ts +47 -0
  15. package/dist/src/construct/api-to-any-target/main.js +154 -0
  16. package/dist/src/construct/api-to-any-target/target.d.ts +23 -0
  17. package/dist/src/construct/api-to-any-target/target.js +14 -0
  18. package/dist/src/construct/api-to-any-target/types.d.ts +60 -0
  19. package/dist/src/construct/api-to-any-target/types.js +1 -0
  20. package/dist/src/construct/api-to-eventbridge-target/api.d.ts +34 -0
  21. package/dist/src/construct/api-to-eventbridge-target/api.js +23 -0
  22. package/dist/src/construct/api-to-eventbridge-target/event.d.ts +15 -0
  23. package/dist/src/construct/api-to-eventbridge-target/event.js +12 -0
  24. package/dist/src/construct/api-to-eventbridge-target/index.d.ts +4 -0
  25. package/dist/src/construct/api-to-eventbridge-target/index.js +4 -0
  26. package/dist/src/construct/api-to-eventbridge-target/main.d.ts +121 -0
  27. package/dist/src/construct/api-to-eventbridge-target/main.js +442 -0
  28. package/dist/src/construct/api-to-eventbridge-target/types.d.ts +100 -0
  29. package/dist/src/construct/api-to-eventbridge-target/types.js +1 -0
  30. package/dist/src/construct/api-to-eventbridge-target-with-sns/api-destined-lambda.d.ts +16 -0
  31. package/dist/src/construct/api-to-eventbridge-target-with-sns/api-destined-lambda.js +12 -0
  32. package/dist/src/construct/api-to-eventbridge-target-with-sns/index.d.ts +3 -0
  33. package/dist/src/construct/api-to-eventbridge-target-with-sns/index.js +3 -0
  34. package/dist/src/construct/api-to-eventbridge-target-with-sns/main.d.ts +159 -0
  35. package/dist/src/construct/api-to-eventbridge-target-with-sns/main.js +547 -0
  36. package/dist/src/construct/api-to-eventbridge-target-with-sns/types.d.ts +22 -0
  37. package/dist/src/construct/api-to-eventbridge-target-with-sns/types.js +1 -0
  38. package/dist/src/construct/api-to-lambda-target/api.d.ts +35 -0
  39. package/dist/src/construct/api-to-lambda-target/api.js +24 -0
  40. package/dist/src/construct/api-to-lambda-target/index.d.ts +3 -0
  41. package/dist/src/construct/api-to-lambda-target/index.js +3 -0
  42. package/dist/src/construct/api-to-lambda-target/main.d.ts +70 -0
  43. package/dist/src/construct/api-to-lambda-target/main.js +218 -0
  44. package/dist/src/construct/api-to-lambda-target/types.d.ts +62 -0
  45. package/dist/src/construct/api-to-lambda-target/types.js +1 -0
  46. package/dist/src/construct/application-configuration/index.d.ts +2 -0
  47. package/dist/src/construct/application-configuration/index.js +2 -0
  48. package/dist/src/construct/application-configuration/main.d.ts +23 -0
  49. package/dist/src/construct/application-configuration/main.js +79 -0
  50. package/dist/src/construct/application-configuration/types.d.ts +6 -0
  51. package/dist/src/construct/application-configuration/types.js +1 -0
  52. package/dist/src/construct/event-handler/handler.d.ts +29 -0
  53. package/dist/src/construct/event-handler/handler.js +21 -0
  54. package/dist/src/construct/event-handler/index.d.ts +3 -0
  55. package/dist/src/construct/event-handler/index.js +3 -0
  56. package/dist/src/construct/event-handler/main.d.ts +91 -0
  57. package/dist/src/construct/event-handler/main.js +196 -0
  58. package/dist/src/construct/event-handler/types.d.ts +41 -0
  59. package/dist/src/construct/event-handler/types.js +1 -0
  60. package/dist/src/construct/index.d.ts +14 -0
  61. package/dist/src/construct/index.js +14 -0
  62. package/dist/src/construct/lambda-with-iam-access/index.d.ts +2 -0
  63. package/dist/src/construct/lambda-with-iam-access/index.js +2 -0
  64. package/dist/src/construct/lambda-with-iam-access/main.d.ts +78 -0
  65. package/dist/src/construct/lambda-with-iam-access/main.js +182 -0
  66. package/dist/src/construct/lambda-with-iam-access/types.d.ts +20 -0
  67. package/dist/src/construct/lambda-with-iam-access/types.js +1 -0
  68. package/dist/src/construct/piped-event-handler/index.d.ts +2 -0
  69. package/dist/src/construct/piped-event-handler/index.js +2 -0
  70. package/dist/src/construct/piped-event-handler/main.d.ts +38 -0
  71. package/dist/src/construct/piped-event-handler/main.js +62 -0
  72. package/dist/src/construct/piped-event-handler/types.d.ts +9 -0
  73. package/dist/src/construct/piped-event-handler/types.js +1 -0
  74. package/dist/src/construct/rest-api-lambda/index.d.ts +2 -0
  75. package/dist/src/construct/rest-api-lambda/index.js +2 -0
  76. package/dist/src/construct/rest-api-lambda/main.d.ts +96 -0
  77. package/dist/src/construct/rest-api-lambda/main.js +170 -0
  78. package/dist/src/construct/rest-api-lambda/types.d.ts +23 -0
  79. package/dist/src/construct/rest-api-lambda/types.js +1 -0
  80. package/dist/src/construct/rest-api-lambda-with-cache/index.d.ts +2 -0
  81. package/dist/src/construct/rest-api-lambda-with-cache/index.js +2 -0
  82. package/dist/src/construct/rest-api-lambda-with-cache/main.d.ts +56 -0
  83. package/dist/src/construct/rest-api-lambda-with-cache/main.js +118 -0
  84. package/dist/src/construct/rest-api-lambda-with-cache/types.d.ts +11 -0
  85. package/dist/src/construct/rest-api-lambda-with-cache/types.js +1 -0
  86. package/dist/src/construct/site-with-ecs-backend/constants.d.ts +4 -0
  87. package/dist/src/construct/site-with-ecs-backend/constants.js +5 -0
  88. package/dist/src/construct/site-with-ecs-backend/index.d.ts +3 -0
  89. package/dist/src/construct/site-with-ecs-backend/index.js +3 -0
  90. package/dist/src/construct/site-with-ecs-backend/main.d.ts +154 -0
  91. package/dist/src/construct/site-with-ecs-backend/main.js +437 -0
  92. package/dist/src/construct/site-with-ecs-backend/types.d.ts +49 -0
  93. package/dist/src/construct/site-with-ecs-backend/types.js +1 -0
  94. package/dist/src/construct/site-with-lambda-backend/constants.d.ts +5 -0
  95. package/dist/src/construct/site-with-lambda-backend/constants.js +6 -0
  96. package/dist/src/construct/site-with-lambda-backend/index.d.ts +3 -0
  97. package/dist/src/construct/site-with-lambda-backend/index.js +3 -0
  98. package/dist/src/construct/site-with-lambda-backend/main.d.ts +116 -0
  99. package/dist/src/construct/site-with-lambda-backend/main.js +316 -0
  100. package/dist/src/construct/site-with-lambda-backend/types.d.ts +45 -0
  101. package/dist/src/construct/site-with-lambda-backend/types.js +1 -0
  102. package/dist/src/construct/static-asset-deployment/index.d.ts +2 -0
  103. package/dist/src/construct/static-asset-deployment/index.js +2 -0
  104. package/dist/src/construct/static-asset-deployment/main.d.ts +41 -0
  105. package/dist/src/construct/static-asset-deployment/main.js +113 -0
  106. package/dist/src/construct/static-asset-deployment/types.d.ts +41 -0
  107. package/dist/src/construct/static-asset-deployment/types.js +1 -0
  108. package/dist/src/construct/static-site/index.d.ts +2 -0
  109. package/dist/src/construct/static-site/index.js +2 -0
  110. package/dist/src/construct/static-site/main.d.ts +84 -0
  111. package/dist/src/construct/static-site/main.js +136 -0
  112. package/dist/src/construct/static-site/types.d.ts +30 -0
  113. package/dist/src/construct/static-site/types.js +1 -0
  114. package/dist/src/index.d.ts +5 -0
  115. package/dist/src/index.js +5 -0
  116. package/dist/src/services/api-gateway/index.d.ts +2 -0
  117. package/dist/src/services/api-gateway/index.js +2 -0
  118. package/dist/src/services/api-gateway/main.d.ts +68 -0
  119. package/dist/src/services/api-gateway/main.js +173 -0
  120. package/dist/src/services/api-gateway/types.d.ts +10 -0
  121. package/dist/src/services/api-gateway/types.js +1 -0
  122. package/dist/src/services/appconfig/constants.d.ts +12 -0
  123. package/dist/src/services/appconfig/constants.js +51 -0
  124. package/dist/src/services/appconfig/index.d.ts +3 -0
  125. package/dist/src/services/appconfig/index.js +3 -0
  126. package/dist/src/services/appconfig/main.d.ts +63 -0
  127. package/dist/src/services/appconfig/main.js +119 -0
  128. package/dist/src/services/appconfig/types.d.ts +17 -0
  129. package/dist/src/services/appconfig/types.js +1 -0
  130. package/dist/src/services/certificate-manager/index.d.ts +2 -0
  131. package/dist/src/services/certificate-manager/index.js +2 -0
  132. package/dist/src/services/certificate-manager/main.d.ts +41 -0
  133. package/dist/src/services/certificate-manager/main.js +62 -0
  134. package/dist/src/services/certificate-manager/types.d.ts +11 -0
  135. package/dist/src/services/certificate-manager/types.js +1 -0
  136. package/dist/src/services/cloudfront/index.d.ts +2 -0
  137. package/dist/src/services/cloudfront/index.js +2 -0
  138. package/dist/src/services/cloudfront/main.d.ts +96 -0
  139. package/dist/src/services/cloudfront/main.js +233 -0
  140. package/dist/src/services/cloudfront/types.d.ts +13 -0
  141. package/dist/src/services/cloudfront/types.js +1 -0
  142. package/dist/src/services/cloudtrail/index.d.ts +2 -0
  143. package/dist/src/services/cloudtrail/index.js +2 -0
  144. package/dist/src/services/cloudtrail/main.d.ts +44 -0
  145. package/dist/src/services/cloudtrail/main.js +71 -0
  146. package/dist/src/services/cloudtrail/types.d.ts +5 -0
  147. package/dist/src/services/cloudtrail/types.js +1 -0
  148. package/dist/src/services/cloudwatch/index.d.ts +3 -0
  149. package/dist/src/services/cloudwatch/index.js +3 -0
  150. package/dist/src/services/cloudwatch/logs.d.ts +47 -0
  151. package/dist/src/services/cloudwatch/logs.js +98 -0
  152. package/dist/src/services/cloudwatch/main.d.ts +207 -0
  153. package/dist/src/services/cloudwatch/main.js +552 -0
  154. package/dist/src/services/cloudwatch/types.d.ts +89 -0
  155. package/dist/src/services/cloudwatch/types.js +1 -0
  156. package/dist/src/services/codebuild/index.d.ts +1 -0
  157. package/dist/src/services/codebuild/index.js +1 -0
  158. package/dist/src/services/codebuild/main.d.ts +36 -0
  159. package/dist/src/services/codebuild/main.js +67 -0
  160. package/dist/src/services/constants.d.ts +4 -0
  161. package/dist/src/services/constants.js +5 -0
  162. package/dist/src/services/dynamodb/index.d.ts +2 -0
  163. package/dist/src/services/dynamodb/index.js +2 -0
  164. package/dist/src/services/dynamodb/main.d.ts +35 -0
  165. package/dist/src/services/dynamodb/main.js +72 -0
  166. package/dist/src/services/dynamodb/types.d.ts +10 -0
  167. package/dist/src/services/dynamodb/types.js +1 -0
  168. package/dist/src/services/elastic-container-registry/index.d.ts +1 -0
  169. package/dist/src/services/elastic-container-registry/index.js +1 -0
  170. package/dist/src/services/elastic-container-registry/main.d.ts +27 -0
  171. package/dist/src/services/elastic-container-registry/main.js +33 -0
  172. package/dist/src/services/elastic-container-service/index.d.ts +2 -0
  173. package/dist/src/services/elastic-container-service/index.js +2 -0
  174. package/dist/src/services/elastic-container-service/main.d.ts +56 -0
  175. package/dist/src/services/elastic-container-service/main.js +149 -0
  176. package/dist/src/services/elastic-container-service/types.d.ts +45 -0
  177. package/dist/src/services/elastic-container-service/types.js +1 -0
  178. package/dist/src/services/elastic-file-system/index.d.ts +2 -0
  179. package/dist/src/services/elastic-file-system/index.js +2 -0
  180. package/dist/src/services/elastic-file-system/main.d.ts +42 -0
  181. package/dist/src/services/elastic-file-system/main.js +76 -0
  182. package/dist/src/services/elastic-file-system/types.d.ts +15 -0
  183. package/dist/src/services/elastic-file-system/types.js +1 -0
  184. package/dist/src/services/elastic-kubernetes-service/index.d.ts +2 -0
  185. package/dist/src/services/elastic-kubernetes-service/index.js +2 -0
  186. package/dist/src/services/elastic-kubernetes-service/main.d.ts +32 -0
  187. package/dist/src/services/elastic-kubernetes-service/main.js +85 -0
  188. package/dist/src/services/elastic-kubernetes-service/types.d.ts +7 -0
  189. package/dist/src/services/elastic-kubernetes-service/types.js +1 -0
  190. package/dist/src/services/elasticache/index.d.ts +2 -0
  191. package/dist/src/services/elasticache/index.js +2 -0
  192. package/dist/src/services/elasticache/main.d.ts +47 -0
  193. package/dist/src/services/elasticache/main.js +90 -0
  194. package/dist/src/services/elasticache/types.d.ts +9 -0
  195. package/dist/src/services/elasticache/types.js +1 -0
  196. package/dist/src/services/eventbridge/index.d.ts +3 -0
  197. package/dist/src/services/eventbridge/index.js +3 -0
  198. package/dist/src/services/eventbridge/main.d.ts +93 -0
  199. package/dist/src/services/eventbridge/main.js +295 -0
  200. package/dist/src/services/eventbridge/target.d.ts +57 -0
  201. package/dist/src/services/eventbridge/target.js +61 -0
  202. package/dist/src/services/eventbridge/types.d.ts +43 -0
  203. package/dist/src/services/eventbridge/types.js +1 -0
  204. package/dist/src/services/evidently/index.d.ts +2 -0
  205. package/dist/src/services/evidently/index.js +2 -0
  206. package/dist/src/services/evidently/main.d.ts +56 -0
  207. package/dist/src/services/evidently/main.js +114 -0
  208. package/dist/src/services/evidently/types.d.ts +21 -0
  209. package/dist/src/services/evidently/types.js +1 -0
  210. package/dist/src/services/identity-access-management/index.d.ts +1 -0
  211. package/dist/src/services/identity-access-management/index.js +1 -0
  212. package/dist/src/services/identity-access-management/main.d.ts +263 -0
  213. package/dist/src/services/identity-access-management/main.js +609 -0
  214. package/dist/src/services/index.d.ts +28 -0
  215. package/dist/src/services/index.js +28 -0
  216. package/dist/src/services/key-management-service/index.d.ts +2 -0
  217. package/dist/src/services/key-management-service/index.js +2 -0
  218. package/dist/src/services/key-management-service/main.d.ts +28 -0
  219. package/dist/src/services/key-management-service/main.js +39 -0
  220. package/dist/src/services/key-management-service/types.d.ts +5 -0
  221. package/dist/src/services/key-management-service/types.js +1 -0
  222. package/dist/src/services/lambda/index.d.ts +2 -0
  223. package/dist/src/services/lambda/index.js +2 -0
  224. package/dist/src/services/lambda/main.d.ts +89 -0
  225. package/dist/src/services/lambda/main.js +232 -0
  226. package/dist/src/services/lambda/types.d.ts +54 -0
  227. package/dist/src/services/lambda/types.js +1 -0
  228. package/dist/src/services/route53/index.d.ts +2 -0
  229. package/dist/src/services/route53/index.js +2 -0
  230. package/dist/src/services/route53/main.d.ts +66 -0
  231. package/dist/src/services/route53/main.js +136 -0
  232. package/dist/src/services/route53/types.d.ts +6 -0
  233. package/dist/src/services/route53/types.js +1 -0
  234. package/dist/src/services/secrets-manager/index.d.ts +2 -0
  235. package/dist/src/services/secrets-manager/index.js +2 -0
  236. package/dist/src/services/secrets-manager/main.d.ts +43 -0
  237. package/dist/src/services/secrets-manager/main.js +71 -0
  238. package/dist/src/services/secrets-manager/types.d.ts +3 -0
  239. package/dist/src/services/secrets-manager/types.js +1 -0
  240. package/dist/src/services/simple-notification-service/index.d.ts +2 -0
  241. package/dist/src/services/simple-notification-service/index.js +2 -0
  242. package/dist/src/services/simple-notification-service/main.d.ts +38 -0
  243. package/dist/src/services/simple-notification-service/main.js +68 -0
  244. package/dist/src/services/simple-notification-service/types.d.ts +5 -0
  245. package/dist/src/services/simple-notification-service/types.js +1 -0
  246. package/dist/src/services/simple-queue-service/index.d.ts +2 -0
  247. package/dist/src/services/simple-queue-service/index.js +2 -0
  248. package/dist/src/services/simple-queue-service/main.d.ts +45 -0
  249. package/dist/src/services/simple-queue-service/main.js +101 -0
  250. package/dist/src/services/simple-queue-service/types.d.ts +15 -0
  251. package/dist/src/services/simple-queue-service/types.js +1 -0
  252. package/dist/src/services/simple-storage-service/index.d.ts +2 -0
  253. package/dist/src/services/simple-storage-service/index.js +2 -0
  254. package/dist/src/services/simple-storage-service/main.d.ts +79 -0
  255. package/dist/src/services/simple-storage-service/main.js +191 -0
  256. package/dist/src/services/simple-storage-service/types.d.ts +25 -0
  257. package/dist/src/services/simple-storage-service/types.js +1 -0
  258. package/dist/src/services/step-function/index.d.ts +2 -0
  259. package/dist/src/services/step-function/index.js +2 -0
  260. package/dist/src/services/step-function/main.d.ts +161 -0
  261. package/dist/src/services/step-function/main.js +380 -0
  262. package/dist/src/services/step-function/types.d.ts +88 -0
  263. package/dist/src/services/step-function/types.js +1 -0
  264. package/dist/src/services/systems-manager/index.d.ts +2 -0
  265. package/dist/src/services/systems-manager/index.js +2 -0
  266. package/dist/src/services/systems-manager/main.d.ts +55 -0
  267. package/dist/src/services/systems-manager/main.js +97 -0
  268. package/dist/src/services/systems-manager/types.d.ts +9 -0
  269. package/dist/src/services/systems-manager/types.js +1 -0
  270. package/dist/src/services/virtual-private-cloud/index.d.ts +2 -0
  271. package/dist/src/services/virtual-private-cloud/index.js +2 -0
  272. package/dist/src/services/virtual-private-cloud/ipv6.d.ts +7 -0
  273. package/dist/src/services/virtual-private-cloud/ipv6.js +38 -0
  274. package/dist/src/services/virtual-private-cloud/main.d.ts +43 -0
  275. package/dist/src/services/virtual-private-cloud/main.js +87 -0
  276. package/dist/src/services/virtual-private-cloud/types.d.ts +4 -0
  277. package/dist/src/services/virtual-private-cloud/types.js +1 -0
  278. package/dist/src/services/web-application-firewall/index.d.ts +2 -0
  279. package/dist/src/services/web-application-firewall/index.js +2 -0
  280. package/dist/src/services/web-application-firewall/main.d.ts +35 -0
  281. package/dist/src/services/web-application-firewall/main.js +61 -0
  282. package/dist/src/services/web-application-firewall/types.d.ts +9 -0
  283. package/dist/src/services/web-application-firewall/types.js +1 -0
  284. package/dist/src/types/index.d.ts +6 -0
  285. package/dist/src/types/index.js +1 -0
  286. package/dist/src/utils/index.d.ts +45 -0
  287. package/dist/src/utils/index.js +61 -0
  288. package/package.json +44 -0
@@ -0,0 +1,191 @@
1
+ import { Duration, RemovalPolicy, Stack, Tags } from 'aws-cdk-lib';
2
+ import { Effect, PolicyDocument, PolicyStatement, ServicePrincipal } from 'aws-cdk-lib/aws-iam';
3
+ import { BlockPublicAccess, Bucket, BucketEncryption, CfnBucketPolicy } from 'aws-cdk-lib/aws-s3';
4
+ import { BucketDeployment, ServerSideEncryption, Source } from 'aws-cdk-lib/aws-s3-deployment';
5
+ import _ from 'lodash';
6
+ import { createCfnOutput } from '../../utils/index.js';
7
+ /**
8
+ * @classdesc Provides operations on AWS S3
9
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
10
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
11
+ * @example
12
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
13
+ *
14
+ * class CustomConstruct extends CommonConstruct {
15
+ * constructor(parent: Construct, id: string, props: common.CommonStackProps) {
16
+ * super(parent, id, props)
17
+ * this.props = props
18
+ * this.s3Manager.createS3Bucket('MyBucket', this)
19
+ * }
20
+ * }
21
+ * @see [CDK S3 Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3-readme.html}
22
+ */
23
+ export class S3Manager {
24
+ /**
25
+ * @summary Method to determine S3 Bucket lifecycle properties
26
+ * @param props bucket properties
27
+ */
28
+ determineBucketLifecycleRules(props) {
29
+ if (!props.lifecycleRules)
30
+ return undefined;
31
+ const bucketLifecycleRules = [];
32
+ _.forEach(props.lifecycleRules, lifecycleRule => {
33
+ bucketLifecycleRules.push({
34
+ ...lifecycleRule,
35
+ expiration: lifecycleRule.expirationInDays ? Duration.days(lifecycleRule.expirationInDays) : undefined,
36
+ noncurrentVersionExpiration: lifecycleRule.noncurrentVersionExpirationInDays
37
+ ? Duration.days(lifecycleRule.noncurrentVersionExpirationInDays)
38
+ : undefined,
39
+ });
40
+ });
41
+ return bucketLifecycleRules;
42
+ }
43
+ /**
44
+ * @summary Method to determine the bucket name using account and region
45
+ * @param scope scope in which this resource is defined
46
+ * @param bucketName the bucket name
47
+ */
48
+ static determineBucketNameByAccountAndRegion(scope, bucketName) {
49
+ return `${bucketName}-${Stack.of(scope).account}-${scope.props.region}-${scope.props.stage}`;
50
+ }
51
+ /**
52
+ * @summary Method to determine the bucket name using domain name
53
+ * @param scope scope in which this resource is defined
54
+ * @param bucketName the bucket name
55
+ */
56
+ static determineBucketNameByDomainName(scope, bucketName) {
57
+ return scope.isProductionStage()
58
+ ? `${bucketName}.${scope.fullyQualifiedDomainName}`
59
+ : `${bucketName}-${scope.props.stage}.${scope.fullyQualifiedDomainName}`;
60
+ }
61
+ /**
62
+ * @summary Method to determine the bucket name
63
+ * @param scope scope in which this resource is defined
64
+ * @param bucketName the bucket name
65
+ */
66
+ static determineBucketName(scope, props, bucketName) {
67
+ if (!scope.props.excludeDomainNameForBuckets) {
68
+ return S3Manager.determineBucketNameByDomainName(scope, bucketName);
69
+ }
70
+ if (!scope.props.excludeAccountNumberForBuckets) {
71
+ return S3Manager.determineBucketNameByAccountAndRegion(scope, bucketName);
72
+ }
73
+ return scope.resourceNameFormatter.format(bucketName, scope.props.resourceNameOptions?.s3);
74
+ }
75
+ /**
76
+ * @summary Method to create a s3 bucket
77
+ * @param id scoped id of the resource
78
+ * @param scope scope in which this resource is defined
79
+ * @param props bucket properties
80
+ */
81
+ createS3Bucket(id, scope, props) {
82
+ if (!props)
83
+ throw `S3 props undefined for ${id}`;
84
+ let bucket;
85
+ const bucketName = S3Manager.determineBucketName(scope, props, props.bucketName);
86
+ if (props.existingBucket && props.bucketName) {
87
+ bucket = Bucket.fromBucketName(scope, `${id}`, S3Manager.determineBucketName(scope, props, props.bucketName));
88
+ }
89
+ else {
90
+ let logBucket;
91
+ if (props.logBucketName) {
92
+ logBucket = Bucket.fromBucketName(scope, `${id}-logs`, S3Manager.determineBucketName(scope, props, props.logBucketName));
93
+ }
94
+ bucket = new Bucket(scope, `${id}-bucket`, {
95
+ ...props,
96
+ blockPublicAccess: props.blockPublicAccess || BlockPublicAccess.BLOCK_ALL,
97
+ bucketName,
98
+ encryption: props.encryption || BucketEncryption.S3_MANAGED,
99
+ lifecycleRules: this.determineBucketLifecycleRules(props),
100
+ removalPolicy: props.removalPolicy || RemovalPolicy.RETAIN,
101
+ serverAccessLogsBucket: logBucket,
102
+ });
103
+ const cfnBucket = bucket.node.defaultChild;
104
+ cfnBucket.notificationConfiguration = {
105
+ eventBridgeConfiguration: {
106
+ eventBridgeEnabled: props.enableEventBridge ?? false,
107
+ },
108
+ };
109
+ }
110
+ if (props.tags && !_.isEmpty(props.tags)) {
111
+ _.forEach(props.tags, tag => {
112
+ Tags.of(bucket).add(tag.key, tag.value);
113
+ });
114
+ }
115
+ createCfnOutput(`${id}-bucketName`, scope, bucket.bucketName);
116
+ createCfnOutput(`${id}-bucketArn`, scope, bucket.bucketArn);
117
+ return bucket;
118
+ }
119
+ /**
120
+ * @summary Method to create an iam bucket policy for cloudtrail
121
+ * @param id scoped id of the resource
122
+ * @param scope scope in which this resource is defined
123
+ * @param bucket
124
+ */
125
+ createBucketPolicyForCloudTrail(id, scope, bucket) {
126
+ const bucketPolicyDocument = new PolicyDocument({
127
+ statements: [
128
+ new PolicyStatement({
129
+ actions: ['s3:GetBucketAcl'],
130
+ effect: Effect.ALLOW,
131
+ principals: [new ServicePrincipal('cloudtrail.amazonaws.com')],
132
+ resources: [bucket.bucketArn],
133
+ sid: 'AWSCloudTrailAclCheck20150319',
134
+ }),
135
+ new PolicyStatement({
136
+ actions: ['s3:PutObject'],
137
+ effect: Effect.ALLOW,
138
+ principals: [new ServicePrincipal('cloudtrail.amazonaws.com')],
139
+ resources: [bucket.arnForObjects('*')],
140
+ sid: 'AWSCloudTrailWrite20150319',
141
+ }),
142
+ ],
143
+ });
144
+ return new CfnBucketPolicy(scope, `${id}`, {
145
+ bucket: bucket.bucketName,
146
+ policyDocument: bucketPolicyDocument,
147
+ });
148
+ }
149
+ /**
150
+ * @summary Method to create a s3 bucket deployment
151
+ * @param id scoped id of the resource
152
+ * @param scope scope in which this resource is defined
153
+ * @param siteBucket
154
+ * @param distribution
155
+ * @param sources
156
+ * @param prefix
157
+ * @param prune
158
+ */
159
+ doBucketDeployment(id, scope, siteBucket, distribution, sources, prefix, prune) {
160
+ new BucketDeployment(scope, `${id}`, {
161
+ destinationBucket: siteBucket,
162
+ destinationKeyPrefix: prefix,
163
+ distribution: distribution,
164
+ distributionPaths: ['/*'],
165
+ memoryLimit: 1024,
166
+ prune: !!prune,
167
+ serverSideEncryption: ServerSideEncryption.AES_256,
168
+ sources: sources,
169
+ });
170
+ }
171
+ /**
172
+ *
173
+ * @param id scoped id of the resource
174
+ * @param scope scope in which this resource is defined
175
+ * @param bucket bucket to create the folders in
176
+ * @param folders list of folder names to be created in the bucket
177
+ */
178
+ createBucketFolders(id, scope, bucket, folders) {
179
+ if (!folders || folders.length == 0) {
180
+ throw `Folder unspecified for ${id}`;
181
+ }
182
+ _.forEach(folders, folder => {
183
+ new BucketDeployment(scope, `${id}-${folder}`, {
184
+ destinationBucket: bucket,
185
+ destinationKeyPrefix: folder,
186
+ prune: false,
187
+ sources: [Source.data('README.md', `This is the ${folder} folder for ${id}`)],
188
+ });
189
+ });
190
+ }
191
+ }
@@ -0,0 +1,25 @@
1
+ import * as s3 from 'aws-cdk-lib/aws-s3';
2
+ import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment';
3
+ import { TagProps } from '../../types/index.js';
4
+ /**
5
+ */
6
+ export interface LifecycleRule extends s3.LifecycleRule {
7
+ expirationInDays?: number;
8
+ noncurrentVersionExpirationInDays?: number;
9
+ }
10
+ /**
11
+ */
12
+ export interface BucketDeploymentProps extends s3deploy.BucketDeploymentProps {
13
+ expirationInDays?: number;
14
+ noncurrentVersionExpirationInDays?: number;
15
+ }
16
+ /**
17
+ */
18
+ export interface S3BucketProps extends s3.BucketProps {
19
+ bucketName: string;
20
+ enableEventBridge?: boolean;
21
+ existingBucket?: boolean;
22
+ lifecycleRules?: LifecycleRule[];
23
+ logBucketName?: string;
24
+ tags?: TagProps[];
25
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './main.js';
2
+ export * from './types.js';
@@ -0,0 +1,2 @@
1
+ export * from './main.js';
2
+ export * from './types.js';
@@ -0,0 +1,161 @@
1
+ import { IRestApi } from 'aws-cdk-lib/aws-apigateway';
2
+ import { ITable } from 'aws-cdk-lib/aws-dynamodb';
3
+ import { IRole } from 'aws-cdk-lib/aws-iam';
4
+ import { IFunction } from 'aws-cdk-lib/aws-lambda';
5
+ import { ILogGroup } from 'aws-cdk-lib/aws-logs';
6
+ import { IQueue } from 'aws-cdk-lib/aws-sqs';
7
+ import { Choice, Fail, IChainable, IStateMachine, Map, Parallel, Pass, StateMachine, Succeed, Wait } from 'aws-cdk-lib/aws-stepfunctions';
8
+ import { CallApiGatewayRestApiEndpoint, DynamoAttributeValue, DynamoDeleteItem, DynamoGetItem, DynamoPutItem, LambdaInvoke, SqsSendMessage, StepFunctionsStartExecution } from 'aws-cdk-lib/aws-stepfunctions-tasks';
9
+ import { CommonConstruct } from '../../common/index.js';
10
+ import { SfnCallApiGatewayRestApiEndpointProps, SfnChoiceProps, SfnDynamoDeleteItemProps, SfnDynamoGetItemProps, SfnDynamoPutItemProps, SfnFailProps, SfnLambdaInvokeProps, SfnMapProps, SfnParallelProps, SfnPassProps, SfnSqsSendMessageProps, SfnStartExecutionProps, SfnStateMachineProps, SfnSucceedProps, SfnWaitProps } from './types.js';
11
+ /**
12
+ * @classdesc Provides operations on AWS Step Functions Service.
13
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
14
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
15
+ * @example
16
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
17
+ *
18
+ * class CustomConstruct extends CommonConstruct {
19
+ * constructor(parent: Construct, id: string, props: common.CommonStackProps) {
20
+ * super(parent, id, props)
21
+ * this.props = props
22
+ * this.sfnManager.createSuccessStep('MyStep', this, myStepProps)
23
+ * }
24
+ * }
25
+ * @see [CDK Step Functions Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions-readme.html}
26
+ */
27
+ export declare class SfnManager {
28
+ /**
29
+ * @summary Method to create a success step
30
+ * @param id scoped id of the resource
31
+ * @param scope scope in which this resource is defined
32
+ * @param props
33
+ */
34
+ createSuccessStep(id: string, scope: CommonConstruct, props: SfnSucceedProps): Succeed;
35
+ /**
36
+ * @summary Method to create a failure step
37
+ * @param id scoped id of the resource
38
+ * @param scope scope in which this resource is defined
39
+ * @param props
40
+ */
41
+ createFailStep(id: string, scope: CommonConstruct, props: SfnFailProps): Fail;
42
+ /**
43
+ * @summary Method to create a pass step
44
+ * @param id scoped id of the resource
45
+ * @param scope scope in which this resource is defined
46
+ * @param props
47
+ */
48
+ createPassStep(id: string, scope: CommonConstruct, props: SfnPassProps): Pass;
49
+ /**
50
+ * @summary Method to create a parallel step
51
+ * @param id scoped id of the resource
52
+ * @param scope scope in which this resource is defined
53
+ * @param props
54
+ */
55
+ createParallelStep(id: string, scope: CommonConstruct, props: SfnParallelProps): Parallel;
56
+ /**
57
+ * @summary Method to create a choice step
58
+ * @param id scoped id of the resource
59
+ * @param scope scope in which this resource is defined
60
+ * @param props
61
+ */
62
+ createChoiceStep(id: string, scope: CommonConstruct, props: SfnChoiceProps): Choice;
63
+ /**
64
+ * @summary Method to create a wait step
65
+ * @param id scoped id of the resource
66
+ * @param scope scope in which this resource is defined
67
+ * @param props
68
+ */
69
+ createWaitStep(id: string, scope: CommonConstruct, props: SfnWaitProps): Wait;
70
+ /**
71
+ * @summary Method to create a DynamoDB get item step
72
+ * @param id scoped id of the resource
73
+ * @param scope scope in which this resource is defined
74
+ * @param props
75
+ * @param table The table to get the item from
76
+ * @param tableKey The table key for query/scan
77
+ */
78
+ createDynamoDbGetItemStep(id: string, scope: CommonConstruct, props: SfnDynamoGetItemProps, table: ITable, tableKey: {
79
+ [key: string]: DynamoAttributeValue;
80
+ }): DynamoGetItem;
81
+ /**
82
+ * @summary Method to create a DynamoDB put item step
83
+ * @param id scoped id of the resource
84
+ * @param scope scope in which this resource is defined
85
+ * @param props
86
+ * @param table The table to put the item in
87
+ * @param tableItem The item to add to the table
88
+ */
89
+ createDynamoDbPutItemStep(id: string, scope: CommonConstruct, props: SfnDynamoPutItemProps, table: ITable, tableItem: {
90
+ [key: string]: DynamoAttributeValue;
91
+ }): DynamoPutItem;
92
+ /**
93
+ * @summary Method to create a DynamoDB delete item step
94
+ * @param id scoped id of the resource
95
+ * @param scope scope in which this resource is defined
96
+ * @param props
97
+ * @param table The table to put the item in
98
+ * @param tableKey The table key for query/scan
99
+ */
100
+ createDynamoDbDeleteItemStep(id: string, scope: CommonConstruct, props: SfnDynamoDeleteItemProps, table: ITable, tableKey: {
101
+ [key: string]: DynamoAttributeValue;
102
+ }): DynamoDeleteItem;
103
+ /**
104
+ * @summary Method to send a message to SQS step
105
+ * @param id scoped id of the resource
106
+ * @param scope scope in which this resource is defined
107
+ * @param props
108
+ * @param queue The queue to send the message to
109
+ */
110
+ createSendSqsMessageStep(id: string, scope: CommonConstruct, props: SfnSqsSendMessageProps, queue: IQueue): SqsSendMessage;
111
+ /**
112
+ * @summary Method to create a lambda invoke step
113
+ * @param id scoped id of the resource
114
+ * @param scope scope in which this resource is defined
115
+ * @param props
116
+ * @param lambdaFunction
117
+ */
118
+ createLambdaStep(id: string, scope: CommonConstruct, props: SfnLambdaInvokeProps, lambdaFunction: IFunction): LambdaInvoke;
119
+ /**
120
+ * @summary Method to create a lambda invoke step
121
+ * @param id scoped id of the resource
122
+ * @param scope scope in which this resource is defined
123
+ * @param props
124
+ * @param lambdaFunction
125
+ * @param skipExecution
126
+ */
127
+ createSkippableLambdaStep(id: string, scope: CommonConstruct, props: SfnLambdaInvokeProps, lambdaFunction: IFunction, skipExecution?: boolean): Pass | LambdaInvoke;
128
+ /**
129
+ * @summary Method to create a API Gateway invoke step
130
+ * @param id scoped id of the resource
131
+ * @param scope scope in which this resource is defined
132
+ * @param props
133
+ * @param api
134
+ */
135
+ createApiStep(id: string, scope: CommonConstruct, props: SfnCallApiGatewayRestApiEndpointProps, api: IRestApi): CallApiGatewayRestApiEndpoint;
136
+ /**
137
+ * @summary Method to create a step function execution step
138
+ * @param id scoped id of the resource
139
+ * @param scope scope in which this resource is defined
140
+ * @param props props for the step
141
+ * @param stateMachine the state machine to execute
142
+ */
143
+ createSfnExecutionStep(id: string, scope: CommonConstruct, props: SfnStartExecutionProps, stateMachine: IStateMachine): StepFunctionsStartExecution;
144
+ /**
145
+ * @summary Method to create a step function map state
146
+ * @param id scoped id of the resource
147
+ * @param scope scope in which this resource is defined
148
+ * @param props props for the map state
149
+ */
150
+ createMapState(id: string, scope: CommonConstruct, props: SfnMapProps): Map;
151
+ /**
152
+ * @summary Method to create a state machine
153
+ * @param id scoped id of the resource
154
+ * @param scope scope in which this resource is defined
155
+ * @param props
156
+ * @param definition
157
+ * @param logGroup
158
+ * @param role
159
+ */
160
+ createStateMachine(id: string, scope: CommonConstruct, props: SfnStateMachineProps, definition: IChainable, logGroup: ILogGroup, role?: IRole): StateMachine;
161
+ }