@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,295 @@
1
+ import { Tags } from 'aws-cdk-lib';
2
+ import { CfnRule, EventBus, Rule } from 'aws-cdk-lib/aws-events';
3
+ import { Role } from 'aws-cdk-lib/aws-iam';
4
+ import { CfnPermission } from 'aws-cdk-lib/aws-lambda';
5
+ import { CfnPipe } from 'aws-cdk-lib/aws-pipes';
6
+ import _ from 'lodash';
7
+ import { createCfnOutput } from '../../utils/index.js';
8
+ /**
9
+ * @classdesc Provides operations on AWS EventBridge.
10
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
11
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
12
+ * @example
13
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
14
+ *
15
+ * class CustomConstruct extends CommonConstruct {
16
+ * constructor(parent: Construct, id: string, props: common.CommonStackProps) {
17
+ * super(parent, id, props)
18
+ * this.props = props
19
+ * this.eventManager.createLambdaRule('MyLambdaRule', this, lambdaFunction)
20
+ * }
21
+ * }
22
+ * @see [CDK EventBridge Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_events-readme.html}
23
+ */
24
+ export class EventManager {
25
+ /**
26
+ * Method to create an event bus
27
+ * @param id scoped id of the resource
28
+ * @param scope scope in which this resource is defined
29
+ * @param props event bus properties
30
+ */
31
+ createEventBus(id, scope, props) {
32
+ if (!props)
33
+ throw `EventBus props undefined for ${id}`;
34
+ if (!props.eventBusName)
35
+ throw `EventBus eventBusName undefined for ${id}`;
36
+ let eventBusName = props.eventBusName;
37
+ if (eventBusName != 'default') {
38
+ eventBusName = scope.resourceNameFormatter.format(props.eventBusName, scope.props.resourceNameOptions?.eventbridgeBus);
39
+ }
40
+ const eventBus = new EventBus(scope, `${id}`, {
41
+ ...props,
42
+ eventBusName,
43
+ });
44
+ createCfnOutput(`${id}-eventBusName`, scope, eventBusName);
45
+ createCfnOutput(`${id}-eventBusArn`, scope, eventBus.eventBusArn);
46
+ return eventBus;
47
+ }
48
+ /**
49
+ * Method to create an event rule
50
+ * @param id scoped id of the resource
51
+ * @param scope scope in which this resource is defined
52
+ * @param props event rule properties
53
+ * @param eventBus optional custom event bus
54
+ * @param targets optional event targets
55
+ */
56
+ createRule(id, scope, props, eventBus, targets) {
57
+ if (!props)
58
+ throw `EventRule props undefined for ${id}`;
59
+ if (!props.ruleName)
60
+ throw `EventRule ruleName undefined for ${id}`;
61
+ const rule = new Rule(scope, `${id}`, {
62
+ ...props,
63
+ eventBus,
64
+ ruleName: scope.resourceNameFormatter.format(props.ruleName, scope.props.resourceNameOptions?.eventbridgeRule),
65
+ });
66
+ if (targets && !_.isEmpty(targets)) {
67
+ _.forEach(targets, target => {
68
+ rule.addTarget(target);
69
+ });
70
+ }
71
+ if (props.tags && !_.isEmpty(props.tags)) {
72
+ _.forEach(props.tags, tag => {
73
+ Tags.of(rule).add(tag.key, tag.value);
74
+ });
75
+ }
76
+ createCfnOutput(`${id}-ruleArn`, scope, rule.ruleArn);
77
+ createCfnOutput(`${id}-ruleName`, scope, rule.ruleName);
78
+ return rule;
79
+ }
80
+ /**
81
+ * @summary Method to create an eventbridge rule with lambda target
82
+ * @param id scoped id of the resource
83
+ * @param scope scope in which this resource is defined
84
+ * @param props
85
+ * @param lambdaFunction
86
+ * @param eventBusName
87
+ * @param eventPattern
88
+ * @param scheduleExpression
89
+ */
90
+ createLambdaRule(id, scope, props, lambdaFunction, eventBusName, eventPattern, scheduleExpression) {
91
+ if (!props)
92
+ throw `EventRule props undefined for ${id}`;
93
+ if (!props.name)
94
+ throw `EventRule name undefined for ${id}`;
95
+ const eventRule = new CfnRule(scope, `${id}`, {
96
+ ...props,
97
+ description: 'Rule to send notification to lambda function target',
98
+ eventBusName,
99
+ eventPattern,
100
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgeRule),
101
+ scheduleExpression,
102
+ targets: [
103
+ {
104
+ arn: lambdaFunction.functionArn,
105
+ id: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgeRule),
106
+ input: props.input ?? undefined,
107
+ },
108
+ ],
109
+ });
110
+ if (props.tags && !_.isEmpty(props.tags)) {
111
+ _.forEach(props.tags, tag => {
112
+ Tags.of(eventRule).add(tag.key, tag.value);
113
+ });
114
+ }
115
+ new CfnPermission(scope, `${id}LambdaPermission`, {
116
+ action: 'lambda:InvokeFunction',
117
+ functionName: lambdaFunction.functionName,
118
+ principal: 'events.amazonaws.com',
119
+ sourceArn: eventRule.attrArn,
120
+ });
121
+ createCfnOutput(`${id}-ruleArn`, scope, eventRule.attrArn);
122
+ createCfnOutput(`${id}-ruleName`, scope, eventRule.name);
123
+ return eventRule;
124
+ }
125
+ /**
126
+ * @summary Method to create an eventbridge rule with fargate task target
127
+ * @param id scoped id of the resource
128
+ * @param scope scope in which this resource is defined
129
+ * @param props
130
+ * @param cluster
131
+ * @param task
132
+ * @param subnetIds
133
+ * @param role
134
+ * @param eventPattern
135
+ */
136
+ createFargateTaskRule(id, scope, props, cluster, task, subnetIds, role, eventPattern) {
137
+ if (!props)
138
+ throw `EventRule props undefined for ${id}`;
139
+ if (!props.name)
140
+ throw `EventRule name undefined for ${id}`;
141
+ const eventRule = new CfnRule(scope, `${id}`, {
142
+ ...props,
143
+ description: 'Rule to send notification on new objects in data bucket to ecs task target',
144
+ eventPattern,
145
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgeRule),
146
+ targets: [
147
+ {
148
+ arn: cluster.clusterArn,
149
+ ecsParameters: {
150
+ launchType: 'FARGATE',
151
+ networkConfiguration: {
152
+ awsVpcConfiguration: { assignPublicIp: 'ENABLED', subnets: subnetIds },
153
+ },
154
+ taskCount: 1,
155
+ taskDefinitionArn: task.taskDefinitionArn,
156
+ },
157
+ id: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgeRule),
158
+ roleArn: role instanceof Role ? role.roleArn : role.attrArn,
159
+ },
160
+ ],
161
+ });
162
+ createCfnOutput(`${id}-ruleArn`, scope, eventRule.attrArn);
163
+ createCfnOutput(`${id}-ruleName`, scope, eventRule.name);
164
+ return eventRule;
165
+ }
166
+ /**
167
+ * @summary Method to create an eventbridge pipe with sqs queue as source and step function as target
168
+ * @param id scoped id of the resource
169
+ * @param scope scope in which this resource is defined
170
+ * @param props the props for the pipe
171
+ * @param sourceQueue the source sqs queue
172
+ * @param targetStepFunction the target step function
173
+ */
174
+ createSqsToSfnCfnPipe(id, scope, props, sourceQueue, targetStepFunction) {
175
+ if (!props)
176
+ throw `Pipe props undefined for ${id}`;
177
+ if (!props.name)
178
+ throw `Pipe name undefined for ${id}`;
179
+ const pipeRole = scope.iamManager.createRoleForSqsToSfnPipe(`${id}-role`, scope, sourceQueue.queueArn, targetStepFunction.stateMachineArn);
180
+ const pipe = new CfnPipe(scope, `${id}`, {
181
+ ...props,
182
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgePipe),
183
+ roleArn: pipeRole.roleArn,
184
+ source: sourceQueue.queueArn,
185
+ sourceParameters: {
186
+ filterCriteria: props.pipeFilterPattern
187
+ ? {
188
+ filters: [
189
+ {
190
+ pattern: JSON.stringify(props.pipeFilterPattern),
191
+ },
192
+ ],
193
+ }
194
+ : undefined,
195
+ sqsQueueParameters: {
196
+ batchSize: props.sqsBatchSize,
197
+ maximumBatchingWindowInSeconds: props.sqsMaximumBatchingWindowInSeconds,
198
+ },
199
+ },
200
+ target: targetStepFunction.stateMachineArn,
201
+ targetParameters: {
202
+ inputTemplate: props.sfnInputTemplate,
203
+ stepFunctionStateMachineParameters: {
204
+ invocationType: props.sfnInvocationType ?? 'FIRE_AND_FORGET',
205
+ },
206
+ },
207
+ });
208
+ createCfnOutput(`${id}-pipeArn`, scope, pipe.attrArn);
209
+ createCfnOutput(`${id}-pipeName`, scope, pipe.name);
210
+ return pipe;
211
+ }
212
+ /**
213
+ * @summary Method to create an eventbridge pipe with sqs queue as source and lambda function as target
214
+ * @param id scoped id of the resource
215
+ * @param scope scope in which this resource is defined
216
+ * @param props the props for the pipe
217
+ * @param sourceQueue the source sqs queue
218
+ * @param targetLambdaFunction the target lambda function
219
+ */
220
+ createSqsToLambdaCfnPipe(id, scope, props, sourceQueue, targetLambdaFunction) {
221
+ if (!props)
222
+ throw `Pipe props undefined for ${id}`;
223
+ if (!props.name)
224
+ throw `Pipe name undefined for ${id}`;
225
+ const pipeRole = scope.iamManager.createRoleForSqsToLambdaPipe(`${id}-role`, scope, sourceQueue.queueArn, targetLambdaFunction.functionArn);
226
+ const pipe = new CfnPipe(scope, `${id}`, {
227
+ ...props,
228
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgePipe),
229
+ roleArn: pipeRole.roleArn,
230
+ source: sourceQueue.queueArn,
231
+ sourceParameters: {
232
+ filterCriteria: props.pipeFilterPattern
233
+ ? {
234
+ filters: [
235
+ {
236
+ pattern: JSON.stringify(props.pipeFilterPattern),
237
+ },
238
+ ],
239
+ }
240
+ : undefined,
241
+ sqsQueueParameters: {
242
+ batchSize: props.sqsBatchSize,
243
+ maximumBatchingWindowInSeconds: props.sqsMaximumBatchingWindowInSeconds,
244
+ },
245
+ },
246
+ target: targetLambdaFunction.functionArn,
247
+ targetParameters: {
248
+ inputTemplate: props.lambdaInputTemplate,
249
+ },
250
+ });
251
+ createCfnOutput(`${id}-pipeArn`, scope, pipe.attrArn);
252
+ createCfnOutput(`${id}-pipeName`, scope, pipe.name);
253
+ return pipe;
254
+ }
255
+ /**
256
+ * @summary Method to create an eventbridge pipe with DynamoDb stream as source and lambda function as target
257
+ * @param id scoped id of the resource
258
+ * @param scope scope in which this resource is defined
259
+ * @param props the props for the pipe
260
+ * @param dynamoDbStream the source dynamoDb stream
261
+ * @param targetLambdaFunction the target lambda function
262
+ */
263
+ createDynamoDbToLambdaCfnPipe(id, scope, props, sourceDynamoDbStreamArn, targetLambdaFunction) {
264
+ if (!props)
265
+ throw `Pipe props undefined for ${id}`;
266
+ if (!props.name)
267
+ throw `Pipe name undefined for ${id}`;
268
+ const pipeRole = scope.iamManager.createRoleForDynamoDbToLambdaPipe(`${id}-role`, scope, sourceDynamoDbStreamArn, targetLambdaFunction.functionArn);
269
+ const pipe = new CfnPipe(scope, `${id}`, {
270
+ ...props,
271
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgePipe),
272
+ roleArn: pipeRole.roleArn,
273
+ source: sourceDynamoDbStreamArn,
274
+ sourceParameters: {
275
+ filterCriteria: props.pipeFilterPattern
276
+ ? {
277
+ filters: [
278
+ {
279
+ pattern: JSON.stringify(props.pipeFilterPattern),
280
+ },
281
+ ],
282
+ }
283
+ : undefined,
284
+ dynamoDbStreamParameters: {
285
+ startingPosition: props.dynamoDbStartingPosition,
286
+ batchSize: props.dynamoDbBatchSize,
287
+ },
288
+ },
289
+ target: targetLambdaFunction.functionArn,
290
+ });
291
+ createCfnOutput(`${id}-pipeArn`, scope, pipe.attrArn);
292
+ createCfnOutput(`${id}-pipeName`, scope, pipe.name);
293
+ return pipe;
294
+ }
295
+ }
@@ -0,0 +1,57 @@
1
+ import { IRule, IRuleTarget, RuleTargetConfig, RuleTargetInput } from 'aws-cdk-lib/aws-events';
2
+ import { TargetBaseProps } from 'aws-cdk-lib/aws-events-targets';
3
+ import { ILogGroup } from 'aws-cdk-lib/aws-logs';
4
+ import { CommonConstruct } from '../../common/index.js';
5
+ /**
6
+ * @classdesc Provides operations on AWS EventBridge Targets
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.eventTargetManager.createCloudWatchLogGroupNoPolicy('MyLogGrouptarget', this, myLogGroup)
17
+ * }
18
+ * }
19
+ * @see [CDK EventBridge Target Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_events_targets-readme.html}
20
+ */
21
+ export declare class EventTargetManager {
22
+ /**
23
+ * @summary Method to create a cloud watch log group target without a policy.
24
+ * - This method is created as a workaround for cdk issue - https://github.com/aws/aws-cdk/issues/17002
25
+ * @param id scoped id of the resource
26
+ * @param scope scope in which this resource is defined
27
+ * @param logGroup the log group
28
+ * @param props the log group target properties
29
+ */
30
+ createCloudWatchLogGroupNoPolicy(id: string, scope: CommonConstruct, logGroup: ILogGroup, props?: LogGroupNoPolicyProps): CloudWatchLogGroupNoPolicy;
31
+ }
32
+ /**
33
+ * Customize the CloudWatch LogGroup Event Target
34
+ */
35
+ export interface LogGroupNoPolicyProps extends TargetBaseProps {
36
+ /**
37
+ * The event to send to the CloudWatch LogGroup
38
+ *
39
+ * This will be the event logged into the CloudWatch LogGroup
40
+ * @default - the entire EventBridge event
41
+ */
42
+ readonly event?: RuleTargetInput;
43
+ }
44
+ /**
45
+ * Use an AWS CloudWatch LogGroup as an event rule target, but don't apply a policy.
46
+ */
47
+ export declare class CloudWatchLogGroupNoPolicy implements IRuleTarget {
48
+ private readonly logGroup;
49
+ private readonly props;
50
+ constructor(logGroup: ILogGroup, props?: LogGroupNoPolicyProps);
51
+ /**
52
+ * Returns a RuleTarget that can be used to log an event into a CloudWatch LogGroup
53
+ * @param _rule
54
+ * @param _id
55
+ */
56
+ bind(_rule: IRule, _id?: string): RuleTargetConfig;
57
+ }
@@ -0,0 +1,61 @@
1
+ import { ArnFormat, Stack } from 'aws-cdk-lib';
2
+ import { bindBaseTargetConfig } from 'aws-cdk-lib/aws-events-targets';
3
+ /**
4
+ * @classdesc Provides operations on AWS EventBridge Targets
5
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
6
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
7
+ * @example
8
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
9
+ *
10
+ * class CustomConstruct extends CommonConstruct {
11
+ * constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
12
+ * super(parent, id, props)
13
+ * this.props = props
14
+ * this.eventTargetManager.createCloudWatchLogGroupNoPolicy('MyLogGrouptarget', this, myLogGroup)
15
+ * }
16
+ * }
17
+ * @see [CDK EventBridge Target Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_events_targets-readme.html}
18
+ */
19
+ export class EventTargetManager {
20
+ /**
21
+ * @summary Method to create a cloud watch log group target without a policy.
22
+ * - This method is created as a workaround for cdk issue - https://github.com/aws/aws-cdk/issues/17002
23
+ * @param id scoped id of the resource
24
+ * @param scope scope in which this resource is defined
25
+ * @param logGroup the log group
26
+ * @param props the log group target properties
27
+ */
28
+ createCloudWatchLogGroupNoPolicy(id, scope, logGroup, props) {
29
+ return new CloudWatchLogGroupNoPolicy(logGroup, props);
30
+ }
31
+ }
32
+ /**
33
+ * Use an AWS CloudWatch LogGroup as an event rule target, but don't apply a policy.
34
+ */
35
+ export class CloudWatchLogGroupNoPolicy {
36
+ logGroup;
37
+ props;
38
+ constructor(logGroup, props = {}) {
39
+ this.logGroup = logGroup;
40
+ this.props = props;
41
+ }
42
+ /**
43
+ * Returns a RuleTarget that can be used to log an event into a CloudWatch LogGroup
44
+ * @param _rule
45
+ * @param _id
46
+ */
47
+ bind(_rule, _id) {
48
+ const logGroupStack = Stack.of(this.logGroup);
49
+ return {
50
+ ...bindBaseTargetConfig(this.props),
51
+ arn: logGroupStack.formatArn({
52
+ arnFormat: ArnFormat.COLON_RESOURCE_NAME,
53
+ resource: 'log-group',
54
+ resourceName: this.logGroup.logGroupName,
55
+ service: 'logs',
56
+ }),
57
+ input: this.props.event,
58
+ targetResource: this.logGroup,
59
+ };
60
+ }
61
+ }
@@ -0,0 +1,43 @@
1
+ import { CfnRuleProps, EventBusProps as EBProps, RuleProps as EBRuleProps } from 'aws-cdk-lib/aws-events';
2
+ import { CfnPipeProps } from 'aws-cdk-lib/aws-pipes';
3
+ import { TagProps } from '../../types/index.js';
4
+ /**
5
+ */
6
+ export interface SqsToSfnPipeProps extends CfnPipeProps {
7
+ pipeFilterPattern?: any;
8
+ sfnInputTemplate?: string;
9
+ sfnInvocationType?: string;
10
+ sqsBatchSize?: number;
11
+ sqsMaximumBatchingWindowInSeconds?: number;
12
+ }
13
+ /**
14
+ */
15
+ export interface SqsToLambdaPipeProps extends CfnPipeProps {
16
+ pipeFilterPattern?: any;
17
+ sqsBatchSize?: number;
18
+ lambdaInputTemplate?: string;
19
+ sqsMaximumBatchingWindowInSeconds?: number;
20
+ }
21
+ /**
22
+ */
23
+ export interface EventRuleProps extends EBRuleProps {
24
+ tags?: TagProps[];
25
+ }
26
+ /**
27
+ */
28
+ export interface RuleProps extends CfnRuleProps {
29
+ input?: string;
30
+ tags?: TagProps[];
31
+ }
32
+ /**
33
+ */
34
+ export interface EventBusProps extends EBProps {
35
+ }
36
+ /**
37
+ }
38
+ */
39
+ export interface DynamoDbToLambdaPipeProps extends CfnPipeProps {
40
+ pipeFilterPattern?: any;
41
+ dynamoDbBatchSize?: number;
42
+ dynamoDbStartingPosition: string;
43
+ }
@@ -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,56 @@
1
+ import { CfnExperiment, CfnFeature, CfnLaunch, CfnProject, CfnSegment } from 'aws-cdk-lib/aws-evidently';
2
+ import { CommonConstruct } from '../../common/index.js';
3
+ import { EvidentlyExperimentProps, EvidentlyFeatureProps, EvidentlyLaunchProps, EvidentlyProjectProps, EvidentlySegmentProps } from './types.js';
4
+ /**
5
+ * @classdesc Provides operations on AWS Evidently
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.evidentlyManager.createProject('MyNewProhect', this, props)
16
+ * }
17
+ * }
18
+ * @see [CDK Evidently Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_evidently-readme.html}
19
+ */
20
+ export declare class EvidentlyManager {
21
+ /**
22
+ * @summary Method to create a project
23
+ * @param id scoped id of the resource
24
+ * @param scope scope in which this resource is defined
25
+ * @param props the project properties
26
+ */
27
+ createProject(id: string, scope: CommonConstruct, props: EvidentlyProjectProps): CfnProject;
28
+ /**
29
+ * @summary Method to create a feature
30
+ * @param id scoped id of the resource
31
+ * @param scope scope in which this resource is defined
32
+ * @param props the feature properties
33
+ */
34
+ createFeature(id: string, scope: CommonConstruct, props: EvidentlyFeatureProps): CfnFeature;
35
+ /**
36
+ * @summary Method to create a launch
37
+ * @param id scoped id of the resource
38
+ * @param scope scope in which this resource is defined
39
+ * @param props the launch properties
40
+ */
41
+ createLaunch(id: string, scope: CommonConstruct, props: EvidentlyLaunchProps): CfnLaunch;
42
+ /**
43
+ * @summary Method to create an experiment
44
+ * @param id scoped id of the resource
45
+ * @param scope scope in which this resource is defined
46
+ * @param props the experiment properties
47
+ */
48
+ createExperiment(id: string, scope: CommonConstruct, props: EvidentlyExperimentProps): CfnExperiment;
49
+ /**
50
+ * @summary Method to create a segment
51
+ * @param id scoped id of the resource
52
+ * @param scope scope in which this resource is defined
53
+ * @param props the segment properties
54
+ */
55
+ createSegment(id: string, scope: CommonConstruct, props: EvidentlySegmentProps): CfnSegment;
56
+ }
@@ -0,0 +1,114 @@
1
+ import { CfnExperiment, CfnFeature, CfnLaunch, CfnProject, CfnSegment } from 'aws-cdk-lib/aws-evidently';
2
+ import { createCfnOutput } from '../../utils/index.js';
3
+ /**
4
+ * @classdesc Provides operations on AWS Evidently
5
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
6
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
7
+ * @example
8
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
9
+ *
10
+ * class CustomConstruct extends CommonConstruct {
11
+ * constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
12
+ * super(parent, id, props)
13
+ * this.props = props
14
+ * this.evidentlyManager.createProject('MyNewProhect', this, props)
15
+ * }
16
+ * }
17
+ * @see [CDK Evidently Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_evidently-readme.html}
18
+ */
19
+ export class EvidentlyManager {
20
+ /**
21
+ * @summary Method to create a project
22
+ * @param id scoped id of the resource
23
+ * @param scope scope in which this resource is defined
24
+ * @param props the project properties
25
+ */
26
+ createProject(id, scope, props) {
27
+ if (!props)
28
+ throw `EvidentlyProject props undefined for ${id}`;
29
+ if (!props.name)
30
+ throw `EvidentlyProject name undefined for ${id}`;
31
+ const project = new CfnProject(scope, `${id}`, {
32
+ ...props,
33
+ description: `${props.description} ${scope.props.stage}`,
34
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.evidentlyProject),
35
+ });
36
+ createCfnOutput(`${id}-projectArn`, scope, project.attrArn);
37
+ createCfnOutput(`${id}-projectName`, scope, project.name);
38
+ return project;
39
+ }
40
+ /**
41
+ * @summary Method to create a feature
42
+ * @param id scoped id of the resource
43
+ * @param scope scope in which this resource is defined
44
+ * @param props the feature properties
45
+ */
46
+ createFeature(id, scope, props) {
47
+ if (!props)
48
+ throw `EvidentlyFeature props undefined for ${id}`;
49
+ const feature = new CfnFeature(scope, `${id}`, props);
50
+ createCfnOutput(`${id}-featureArn`, scope, feature.attrArn);
51
+ createCfnOutput(`${id}-featureName`, scope, feature.name);
52
+ return feature;
53
+ }
54
+ /**
55
+ * @summary Method to create a launch
56
+ * @param id scoped id of the resource
57
+ * @param scope scope in which this resource is defined
58
+ * @param props the launch properties
59
+ */
60
+ createLaunch(id, scope, props) {
61
+ if (!props)
62
+ throw `EvidentlyLaunch props undefined for ${id}`;
63
+ if (!props.name)
64
+ throw `EvidentlyLaunch name undefined for ${id}`;
65
+ const launch = new CfnLaunch(scope, `${id}`, {
66
+ ...props,
67
+ description: `${props.description} ${scope.props.stage}`,
68
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.evidentlyLaunch),
69
+ });
70
+ createCfnOutput(`${id}-launchArn`, scope, launch.attrArn);
71
+ createCfnOutput(`${id}-launchName`, scope, launch.name);
72
+ return launch;
73
+ }
74
+ /**
75
+ * @summary Method to create an experiment
76
+ * @param id scoped id of the resource
77
+ * @param scope scope in which this resource is defined
78
+ * @param props the experiment properties
79
+ */
80
+ createExperiment(id, scope, props) {
81
+ if (!props)
82
+ throw `EvidentlyExperiment props undefined for ${id}`;
83
+ if (!props.name)
84
+ throw `EvidentlyExperiment name undefined for ${id}`;
85
+ const experiment = new CfnExperiment(scope, `${id}`, {
86
+ ...props,
87
+ description: `${props.description} ${scope.props.stage}`,
88
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.evidentlyExperiment),
89
+ });
90
+ createCfnOutput(`${id}-experimentArn`, scope, experiment.attrArn);
91
+ createCfnOutput(`${id}-experimentName`, scope, experiment.name);
92
+ return experiment;
93
+ }
94
+ /**
95
+ * @summary Method to create a segment
96
+ * @param id scoped id of the resource
97
+ * @param scope scope in which this resource is defined
98
+ * @param props the segment properties
99
+ */
100
+ createSegment(id, scope, props) {
101
+ if (!props)
102
+ throw `EvidentlySegment props undefined for ${id}`;
103
+ if (!props.name)
104
+ throw `EvidentlySegment name undefined for ${id}`;
105
+ const segment = new CfnSegment(scope, `${id}`, {
106
+ ...props,
107
+ description: `${props.description} ${scope.props.stage}`,
108
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.evidentlySegment),
109
+ });
110
+ createCfnOutput(`${id}-segmentArn`, scope, segment.attrArn);
111
+ createCfnOutput(`${id}-segmentName`, scope, segment.name);
112
+ return segment;
113
+ }
114
+ }
@@ -0,0 +1,21 @@
1
+ import { CfnExperimentProps, CfnFeatureProps, CfnLaunchProps, CfnProjectProps, CfnSegmentProps } from 'aws-cdk-lib/aws-evidently';
2
+ /**
3
+ */
4
+ export interface EvidentlyProjectProps extends CfnProjectProps {
5
+ }
6
+ /**
7
+ */
8
+ export interface EvidentlyFeatureProps extends CfnFeatureProps {
9
+ }
10
+ /**
11
+ */
12
+ export interface EvidentlyLaunchProps extends CfnLaunchProps {
13
+ }
14
+ /**
15
+ */
16
+ export interface EvidentlyExperimentProps extends CfnExperimentProps {
17
+ }
18
+ /**
19
+ */
20
+ export interface EvidentlySegmentProps extends CfnSegmentProps {
21
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from './main.js';
@@ -0,0 +1 @@
1
+ export * from './main.js';