@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,380 @@
1
+ import { Duration } from 'aws-cdk-lib';
2
+ import { Choice, DefinitionBody, Fail, LogLevel, Map, Parallel, Pass, StateMachine, Succeed, Wait, WaitTime, } from 'aws-cdk-lib/aws-stepfunctions';
3
+ import { CallApiGatewayRestApiEndpoint, DynamoDeleteItem, DynamoGetItem, DynamoPutItem, LambdaInvoke, SqsSendMessage, StepFunctionsStartExecution, } from 'aws-cdk-lib/aws-stepfunctions-tasks';
4
+ import _ from 'lodash';
5
+ import { v4 as uuidv4 } from 'uuid';
6
+ import { createCfnOutput } from '../../utils/index.js';
7
+ const DEFAULT_RETRY_CONFIG = [
8
+ {
9
+ backoffRate: 2,
10
+ errors: ['States.ALL'],
11
+ intervalInSecs: 30,
12
+ maxAttempts: 6,
13
+ },
14
+ ];
15
+ /**
16
+ * @classdesc Provides operations on AWS Step Functions Service.
17
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
18
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
19
+ * @example
20
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
21
+ *
22
+ * class CustomConstruct extends CommonConstruct {
23
+ * constructor(parent: Construct, id: string, props: common.CommonStackProps) {
24
+ * super(parent, id, props)
25
+ * this.props = props
26
+ * this.sfnManager.createSuccessStep('MyStep', this, myStepProps)
27
+ * }
28
+ * }
29
+ * @see [CDK Step Functions Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions-readme.html}
30
+ */
31
+ export class SfnManager {
32
+ /**
33
+ * @summary Method to create a success step
34
+ * @param id scoped id of the resource
35
+ * @param scope scope in which this resource is defined
36
+ * @param props
37
+ */
38
+ createSuccessStep(id, scope, props) {
39
+ if (!props)
40
+ throw `Step props undefined for ${id}`;
41
+ return new Succeed(scope, `${props.name}`, {
42
+ ...props,
43
+ comment: `Succeed step for ${props.name} - ${scope.props.stage} stage`,
44
+ });
45
+ }
46
+ /**
47
+ * @summary Method to create a failure step
48
+ * @param id scoped id of the resource
49
+ * @param scope scope in which this resource is defined
50
+ * @param props
51
+ */
52
+ createFailStep(id, scope, props) {
53
+ if (!props)
54
+ throw `Step props undefined for ${id}`;
55
+ return new Fail(scope, `${props.name}`, {
56
+ ...props,
57
+ comment: `Fail step for ${props.name} - ${scope.props.stage} stage`,
58
+ });
59
+ }
60
+ /**
61
+ * @summary Method to create a pass step
62
+ * @param id scoped id of the resource
63
+ * @param scope scope in which this resource is defined
64
+ * @param props
65
+ */
66
+ createPassStep(id, scope, props) {
67
+ if (!props)
68
+ throw `Step props undefined for ${id}`;
69
+ return new Pass(scope, `${props.name}`, {
70
+ ...props,
71
+ comment: `Pass step for ${props.name} - ${scope.props.stage} stage`,
72
+ });
73
+ }
74
+ /**
75
+ * @summary Method to create a parallel step
76
+ * @param id scoped id of the resource
77
+ * @param scope scope in which this resource is defined
78
+ * @param props
79
+ */
80
+ createParallelStep(id, scope, props) {
81
+ if (!props)
82
+ throw `Step props undefined for ${id}`;
83
+ return new Parallel(scope, `${props.name}`, {
84
+ ...props,
85
+ comment: `Parallel step for ${props.name} - ${scope.props.stage} stage`,
86
+ });
87
+ }
88
+ /**
89
+ * @summary Method to create a choice step
90
+ * @param id scoped id of the resource
91
+ * @param scope scope in which this resource is defined
92
+ * @param props
93
+ */
94
+ createChoiceStep(id, scope, props) {
95
+ if (!props)
96
+ throw `Step props undefined for ${id}`;
97
+ return new Choice(scope, `${props.name}`, {
98
+ ...props,
99
+ comment: `Choice step for ${props.name} - ${scope.props.stage} stage`,
100
+ });
101
+ }
102
+ /**
103
+ * @summary Method to create a wait step
104
+ * @param id scoped id of the resource
105
+ * @param scope scope in which this resource is defined
106
+ * @param props
107
+ */
108
+ createWaitStep(id, scope, props) {
109
+ return new Wait(scope, `${props.name}`, {
110
+ ...props,
111
+ comment: `Choice step for ${props.name} - ${scope.props.stage} stage`,
112
+ time: WaitTime.duration(Duration.seconds(props.delayInSeconds)),
113
+ });
114
+ }
115
+ /**
116
+ * @summary Method to create a DynamoDB get item step
117
+ * @param id scoped id of the resource
118
+ * @param scope scope in which this resource is defined
119
+ * @param props
120
+ * @param table The table to get the item from
121
+ * @param tableKey The table key for query/scan
122
+ */
123
+ createDynamoDbGetItemStep(id, scope, props, table, tableKey) {
124
+ if (!props)
125
+ throw `Step props undefined for ${id}`;
126
+ const step = new DynamoGetItem(scope, `${props.name}`, {
127
+ ...props,
128
+ comment: `DynamoDB GetItem step for ${props.name} - ${scope.props.stage} stage`,
129
+ key: tableKey,
130
+ table,
131
+ });
132
+ let retries = props.retries;
133
+ if (!retries || retries.length === 0) {
134
+ retries = DEFAULT_RETRY_CONFIG;
135
+ }
136
+ _.forEach(retries, retry => {
137
+ step.addRetry({
138
+ ...retry,
139
+ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
140
+ });
141
+ });
142
+ return step;
143
+ }
144
+ /**
145
+ * @summary Method to create a DynamoDB put item step
146
+ * @param id scoped id of the resource
147
+ * @param scope scope in which this resource is defined
148
+ * @param props
149
+ * @param table The table to put the item in
150
+ * @param tableItem The item to add to the table
151
+ */
152
+ createDynamoDbPutItemStep(id, scope, props, table, tableItem) {
153
+ if (!props)
154
+ throw `Step props undefined for ${id}`;
155
+ const step = new DynamoPutItem(scope, `${props.name}`, {
156
+ ...props,
157
+ comment: `DynamoDB PutItem step for ${props.name} - ${scope.props.stage} stage`,
158
+ item: tableItem,
159
+ table,
160
+ });
161
+ let retries = props.retries;
162
+ if (!retries || retries.length === 0) {
163
+ retries = DEFAULT_RETRY_CONFIG;
164
+ }
165
+ _.forEach(retries, retry => {
166
+ step.addRetry({
167
+ ...retry,
168
+ ...{ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval },
169
+ });
170
+ });
171
+ return step;
172
+ }
173
+ /**
174
+ * @summary Method to create a DynamoDB delete item step
175
+ * @param id scoped id of the resource
176
+ * @param scope scope in which this resource is defined
177
+ * @param props
178
+ * @param table The table to put the item in
179
+ * @param tableKey The table key for query/scan
180
+ */
181
+ createDynamoDbDeleteItemStep(id, scope, props, table, tableKey) {
182
+ if (!props)
183
+ throw `Step props undefined for ${id}`;
184
+ const step = new DynamoDeleteItem(scope, `${props.name}`, {
185
+ ...props,
186
+ comment: `DynamoDB DeleteItem step for ${props.name} - ${scope.props.stage} stage`,
187
+ key: tableKey,
188
+ table,
189
+ });
190
+ let retries = props.retries;
191
+ if (!retries || retries.length === 0) {
192
+ retries = DEFAULT_RETRY_CONFIG;
193
+ }
194
+ _.forEach(retries, retry => {
195
+ step.addRetry({
196
+ ...retry,
197
+ ...{ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval },
198
+ });
199
+ });
200
+ return step;
201
+ }
202
+ /**
203
+ * @summary Method to send a message to SQS step
204
+ * @param id scoped id of the resource
205
+ * @param scope scope in which this resource is defined
206
+ * @param props
207
+ * @param queue The queue to send the message to
208
+ */
209
+ createSendSqsMessageStep(id, scope, props, queue) {
210
+ if (!props)
211
+ throw `Step props undefined for ${id}`;
212
+ if (!props.messageBody)
213
+ throw 'Message body undefined';
214
+ const step = new SqsSendMessage(scope, `${props.name}`, {
215
+ ...props,
216
+ comment: `DynamoDB PutItem step for ${props.name} - ${scope.props.stage} stage`,
217
+ queue,
218
+ });
219
+ let retries = props.retries;
220
+ if (!retries || retries.length === 0) {
221
+ retries = DEFAULT_RETRY_CONFIG;
222
+ }
223
+ _.forEach(retries, retry => {
224
+ step.addRetry({
225
+ ...retry,
226
+ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
227
+ });
228
+ });
229
+ return step;
230
+ }
231
+ /**
232
+ * @summary Method to create a lambda invoke step
233
+ * @param id scoped id of the resource
234
+ * @param scope scope in which this resource is defined
235
+ * @param props
236
+ * @param lambdaFunction
237
+ */
238
+ createLambdaStep(id, scope, props, lambdaFunction) {
239
+ if (!props)
240
+ throw `Step props undefined for ${id}`;
241
+ const step = new LambdaInvoke(scope, `${props.name}`, {
242
+ ...props,
243
+ comment: `Lambda step for ${props.name} - ${scope.props.stage} stage`,
244
+ lambdaFunction,
245
+ });
246
+ let retries = props.retries;
247
+ if (!retries || retries.length === 0) {
248
+ retries = DEFAULT_RETRY_CONFIG;
249
+ }
250
+ _.forEach(retries, retry => {
251
+ step.addRetry({
252
+ ...retry,
253
+ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
254
+ });
255
+ });
256
+ return step;
257
+ }
258
+ /**
259
+ * @summary Method to create a lambda invoke step
260
+ * @param id scoped id of the resource
261
+ * @param scope scope in which this resource is defined
262
+ * @param props
263
+ * @param lambdaFunction
264
+ * @param skipExecution
265
+ */
266
+ createSkippableLambdaStep(id, scope, props, lambdaFunction, skipExecution) {
267
+ if (!props)
268
+ throw `Step props undefined for ${id}`;
269
+ if (skipExecution)
270
+ return this.createPassStep(id, scope, { comment: props.comment, name: props.name });
271
+ const step = new LambdaInvoke(scope, `${props.name}`, {
272
+ ...props,
273
+ comment: `Lambda step for ${props.name} - ${scope.props.stage} stage`,
274
+ lambdaFunction,
275
+ });
276
+ let retries = props.retries;
277
+ if (!retries || retries.length === 0) {
278
+ retries = DEFAULT_RETRY_CONFIG;
279
+ }
280
+ _.forEach(retries, retry => {
281
+ step.addRetry({
282
+ ...retry,
283
+ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
284
+ });
285
+ });
286
+ return step;
287
+ }
288
+ /**
289
+ * @summary Method to create a API Gateway invoke step
290
+ * @param id scoped id of the resource
291
+ * @param scope scope in which this resource is defined
292
+ * @param props
293
+ * @param api
294
+ */
295
+ createApiStep(id, scope, props, api) {
296
+ if (!props)
297
+ throw `Step props undefined for ${id}`;
298
+ const step = new CallApiGatewayRestApiEndpoint(scope, `${props.name}`, {
299
+ ...props,
300
+ api,
301
+ comment: `API step for ${props.name} - ${scope.props.stage} stage`,
302
+ stageName: scope.props.stage,
303
+ });
304
+ let retries = props.retries;
305
+ if (!retries || retries.length === 0) {
306
+ retries = DEFAULT_RETRY_CONFIG;
307
+ }
308
+ _.forEach(retries, retry => {
309
+ step.addRetry({
310
+ ...retry,
311
+ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
312
+ });
313
+ });
314
+ return step;
315
+ }
316
+ /**
317
+ * @summary Method to create a step function execution step
318
+ * @param id scoped id of the resource
319
+ * @param scope scope in which this resource is defined
320
+ * @param props props for the step
321
+ * @param stateMachine the state machine to execute
322
+ */
323
+ createSfnExecutionStep(id, scope, props, stateMachine) {
324
+ const step = new StepFunctionsStartExecution(scope, `${id}`, {
325
+ ...props,
326
+ associateWithParent: props.associateWithParent ?? true,
327
+ name: props.name ?? uuidv4(),
328
+ stateMachine,
329
+ });
330
+ let retries = props.retries;
331
+ if (!retries || retries.length === 0) {
332
+ retries = DEFAULT_RETRY_CONFIG;
333
+ }
334
+ _.forEach(retries, retry => {
335
+ step.addRetry({
336
+ ...retry,
337
+ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
338
+ });
339
+ });
340
+ return step;
341
+ }
342
+ /**
343
+ * @summary Method to create a step function map state
344
+ * @param id scoped id of the resource
345
+ * @param scope scope in which this resource is defined
346
+ * @param props props for the map state
347
+ */
348
+ createMapState(id, scope, props) {
349
+ return new Map(scope, `${id}`, props);
350
+ }
351
+ /**
352
+ * @summary Method to create a state machine
353
+ * @param id scoped id of the resource
354
+ * @param scope scope in which this resource is defined
355
+ * @param props
356
+ * @param definition
357
+ * @param logGroup
358
+ * @param role
359
+ */
360
+ createStateMachine(id, scope, props, definition, logGroup, role) {
361
+ if (!props)
362
+ throw `State Machine props undefined for ${id}`;
363
+ if (!props.stateMachineName)
364
+ throw `State Machine stateMachineName undefined for ${id}`;
365
+ const stateMachine = new StateMachine(scope, `${id}`, {
366
+ ...props,
367
+ definitionBody: DefinitionBody.fromChainable(definition),
368
+ logs: {
369
+ destination: logGroup,
370
+ includeExecutionData: props.logs?.includeExecutionData ?? true,
371
+ level: props.logs?.level ?? LogLevel.ALL,
372
+ },
373
+ role,
374
+ stateMachineName: scope.resourceNameFormatter.format(props.stateMachineName, scope.props.resourceNameOptions?.stepFunction),
375
+ });
376
+ createCfnOutput(`${id}-stateMachineName`, scope, stateMachine.stateMachineName);
377
+ createCfnOutput(`${id}-stateMachineArn`, scope, stateMachine.stateMachineArn);
378
+ return stateMachine;
379
+ }
380
+ }
@@ -0,0 +1,88 @@
1
+ import { ChoiceProps, FailProps, MapProps, ParallelProps, PassProps, RetryProps, StateMachineProps, SucceedProps, WaitProps } from 'aws-cdk-lib/aws-stepfunctions';
2
+ import { CallApiGatewayRestApiEndpointProps, DynamoDeleteItemProps, DynamoGetItemProps, DynamoPutItemProps, LambdaInvokeProps, SqsSendMessageProps, StepFunctionsStartExecutionProps } from 'aws-cdk-lib/aws-stepfunctions-tasks';
3
+ /**
4
+ */
5
+ export interface SfnSucceedProps extends SucceedProps {
6
+ name: string;
7
+ }
8
+ /**
9
+ */
10
+ export interface SfnRetryProps extends RetryProps {
11
+ intervalInSecs: number;
12
+ }
13
+ /**
14
+ */
15
+ export interface SfnFailProps extends FailProps {
16
+ name: string;
17
+ }
18
+ /**
19
+ */
20
+ export interface SfnPassProps extends PassProps {
21
+ name: string;
22
+ }
23
+ /**
24
+ */
25
+ export interface SfnDynamoGetItemProps extends DynamoGetItemProps {
26
+ name: string;
27
+ retries?: SfnRetryProps[];
28
+ }
29
+ /**
30
+ */
31
+ export interface SfnDynamoPutItemProps extends DynamoPutItemProps {
32
+ name: string;
33
+ retries?: SfnRetryProps[];
34
+ }
35
+ /**
36
+ */
37
+ export interface SfnDynamoDeleteItemProps extends DynamoDeleteItemProps {
38
+ name: string;
39
+ retries?: SfnRetryProps[];
40
+ }
41
+ /**
42
+ */
43
+ export interface SfnSqsSendMessageProps extends SqsSendMessageProps {
44
+ name: string;
45
+ retries?: SfnRetryProps[];
46
+ }
47
+ /**
48
+ */
49
+ export interface SfnParallelProps extends ParallelProps {
50
+ name: string;
51
+ retries?: SfnRetryProps[];
52
+ }
53
+ /**
54
+ */
55
+ export interface SfnChoiceProps extends ChoiceProps {
56
+ name: string;
57
+ }
58
+ /**
59
+ */
60
+ export interface SfnWaitProps extends WaitProps {
61
+ name: string;
62
+ delayInSeconds: number;
63
+ }
64
+ /**
65
+ */
66
+ export interface SfnLambdaInvokeProps extends LambdaInvokeProps {
67
+ name: string;
68
+ retries?: SfnRetryProps[];
69
+ }
70
+ /**
71
+ */
72
+ export interface SfnCallApiGatewayRestApiEndpointProps extends CallApiGatewayRestApiEndpointProps {
73
+ name: string;
74
+ retries?: SfnRetryProps[];
75
+ }
76
+ /**
77
+ */
78
+ export interface SfnStateMachineProps extends StateMachineProps {
79
+ }
80
+ /**
81
+ */
82
+ export interface SfnMapProps extends MapProps {
83
+ }
84
+ /**
85
+ */
86
+ export interface SfnStartExecutionProps extends StepFunctionsStartExecutionProps {
87
+ retries?: SfnRetryProps[];
88
+ }
@@ -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,55 @@
1
+ import { StringParameter } from 'aws-cdk-lib/aws-ssm';
2
+ import { AwsCustomResource } from 'aws-cdk-lib/custom-resources';
3
+ import { CommonConstruct } from '../../common/index.js';
4
+ import { SSMParameterReaderProps, SSMStringParameterProps } from './types.js';
5
+ /**
6
+ * @classdesc Provides operations on AWS Systems Manager.
7
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
8
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
9
+ * @example
10
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
11
+ *
12
+ * class CustomConstruct extends CommonConstruct {
13
+ * constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
14
+ * super(parent, id, props)
15
+ * this.props = props
16
+ * this.acmManager.writeStringToParameters('MyParameter', this, ...props)
17
+ * }
18
+ * }
19
+ * @see [CDK Systems Manager Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm-readme.html}
20
+ */
21
+ export declare class SsmManager {
22
+ static SECRETS_MODIFIED_TIMESTAMP_PARAM: string;
23
+ /**
24
+ * Method to write a string parameter to the parameters store
25
+ * @param id scoped id of the resource
26
+ * @param scope scope in which this resource is defined
27
+ * @param props parameter props
28
+ */
29
+ writeStringToParameters(id: string, scope: CommonConstruct, props: SSMStringParameterProps): StringParameter;
30
+ /**
31
+ * Method to read a string parameter from the parameters store
32
+ * @param id scoped id of the resource
33
+ * @param scope scope in which this resource is defined
34
+ * @param parameterName parameter name to lookup
35
+ */
36
+ readStringParameter(id: string, scope: CommonConstruct, parameterName: string): string;
37
+ /**
38
+ * Method to read a string parameter from the parameters store in a given region
39
+ * @param id scoped id of the resource
40
+ * @param scope scope in which this resource is defined
41
+ * @param parameterName parameter name to lookup
42
+ * @param region region name to lookup parameter
43
+ */
44
+ readStringParameterFromRegion(id: string, scope: CommonConstruct, parameterName: string, region: string): string;
45
+ }
46
+ /**
47
+ * @classdesc Provides utilities to read same/cross region SSM parameters
48
+ */
49
+ export declare class SSMParameterReader extends AwsCustomResource {
50
+ constructor(scope: CommonConstruct, name: string, props: SSMParameterReaderProps);
51
+ /**
52
+ *
53
+ */
54
+ getParameterValue(): string;
55
+ }
@@ -0,0 +1,97 @@
1
+ import { StringParameter } from 'aws-cdk-lib/aws-ssm';
2
+ import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId, } from 'aws-cdk-lib/custom-resources';
3
+ import { createCfnOutput } from '../../utils/index.js';
4
+ /**
5
+ * @classdesc Provides operations on AWS Systems Manager.
6
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
7
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
8
+ * @example
9
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
10
+ *
11
+ * class CustomConstruct extends CommonConstruct {
12
+ * constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
13
+ * super(parent, id, props)
14
+ * this.props = props
15
+ * this.acmManager.writeStringToParameters('MyParameter', this, ...props)
16
+ * }
17
+ * }
18
+ * @see [CDK Systems Manager Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm-readme.html}
19
+ */
20
+ export class SsmManager {
21
+ static SECRETS_MODIFIED_TIMESTAMP_PARAM = 'secrets-last-modified-timestamp';
22
+ /**
23
+ * Method to write a string parameter to the parameters store
24
+ * @param id scoped id of the resource
25
+ * @param scope scope in which this resource is defined
26
+ * @param props parameter props
27
+ */
28
+ writeStringToParameters(id, scope, props) {
29
+ if (!props)
30
+ throw `Parameter props undefined for ${id}`;
31
+ if (!props.parameterName)
32
+ throw `Parameter parameterName undefined for ${id}`;
33
+ const parameter = new StringParameter(scope, `${id}`, {
34
+ ...props,
35
+ description: `${props.description} - ${scope.props.stage} stage`,
36
+ parameterName: scope.resourceNameFormatter.format(props.parameterName, scope.props.resourceNameOptions?.ssm),
37
+ });
38
+ createCfnOutput(`${id}-parameterArn`, scope, parameter.parameterArn);
39
+ createCfnOutput(`${id}-parameterName`, scope, parameter.parameterName);
40
+ return parameter;
41
+ }
42
+ /**
43
+ * Method to read a string parameter from the parameters store
44
+ * @param id scoped id of the resource
45
+ * @param scope scope in which this resource is defined
46
+ * @param parameterName parameter name to lookup
47
+ */
48
+ readStringParameter(id, scope, parameterName) {
49
+ if (!parameterName || parameterName == '')
50
+ throw 'Invalid parameter name';
51
+ return StringParameter.valueFromLookup(scope, scope.resourceNameFormatter.format(parameterName, scope.props.resourceNameOptions?.ssm));
52
+ }
53
+ /**
54
+ * Method to read a string parameter from the parameters store in a given region
55
+ * @param id scoped id of the resource
56
+ * @param scope scope in which this resource is defined
57
+ * @param parameterName parameter name to lookup
58
+ * @param region region name to lookup parameter
59
+ */
60
+ readStringParameterFromRegion(id, scope, parameterName, region) {
61
+ if (!parameterName || parameterName == '')
62
+ throw `Invalid parameter name for ${id}`;
63
+ if (!region || region == '')
64
+ throw `Invalid region for ${id}`;
65
+ return new SSMParameterReader(scope, `${id}`, {
66
+ parameterName: scope.resourceNameFormatter.format(parameterName, scope.props.resourceNameOptions?.ssm),
67
+ region,
68
+ }).getParameterValue();
69
+ }
70
+ }
71
+ /**
72
+ * @classdesc Provides utilities to read same/cross region SSM parameters
73
+ */
74
+ export class SSMParameterReader extends AwsCustomResource {
75
+ constructor(scope, name, props) {
76
+ const { parameterName, region } = props;
77
+ const ssmAwsSdkCall = {
78
+ action: 'getParameter',
79
+ parameters: {
80
+ Name: parameterName,
81
+ },
82
+ physicalResourceId: PhysicalResourceId.of(Date.now().toString()),
83
+ region,
84
+ service: 'SSM',
85
+ };
86
+ super(scope, name, {
87
+ onUpdate: ssmAwsSdkCall,
88
+ policy: AwsCustomResourcePolicy.fromSdkCalls({ resources: AwsCustomResourcePolicy.ANY_RESOURCE }),
89
+ });
90
+ }
91
+ /**
92
+ *
93
+ */
94
+ getParameterValue() {
95
+ return this.getResponseField('Parameter.Value');
96
+ }
97
+ }
@@ -0,0 +1,9 @@
1
+ import { StringParameterProps } from 'aws-cdk-lib/aws-ssm';
2
+ /**
3
+ */
4
+ export interface SSMParameterReaderProps {
5
+ parameterName: string;
6
+ region: string;
7
+ }
8
+ export interface SSMStringParameterProps extends StringParameterProps {
9
+ }
@@ -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,7 @@
1
+ import { Vpc } from 'aws-cdk-lib/aws-ec2';
2
+ import { CommonConstruct } from '../../common/index.js';
3
+ import { VpcProps } from './types.js';
4
+ export declare class Ipv6Vpc extends Vpc {
5
+ egressOnlyInternetGatewayId: string;
6
+ constructor(scope: CommonConstruct, id: string, props: VpcProps);
7
+ }