@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,442 @@
1
+ import { Fn, RemovalPolicy } from 'aws-cdk-lib';
2
+ import { AccessLogFormat, BasePathMapping, Cors, EndpointType, Integration, IntegrationType, JsonSchemaType, JsonSchemaVersion, LogGroupLogDestination, MethodLoggingLevel, Model, PassthroughBehavior, Resource, RestApi, } from 'aws-cdk-lib/aws-apigateway';
3
+ import { EventBus } from 'aws-cdk-lib/aws-events';
4
+ import { CloudWatchLogGroup } from 'aws-cdk-lib/aws-events-targets';
5
+ import { PolicyDocument, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';
6
+ import { CommonConstruct } from '../../common/index.js';
7
+ import { ApiToEventbridgeTargetRestApi } from './api.js';
8
+ import { ApiToEventbridgeTargetEvent } from './event.js';
9
+ /**
10
+ * @classdesc Provides a construct to create and deploy API Gateway invocations to EventBridge
11
+ *
12
+ * <b>Architecture</b><br/> ![Architecture](./ApiToEventBridgeTarget.jpg)
13
+ * @example
14
+ * import { ApiToEventBridgeTarget, ApiToEventBridgeTargetProps } '@gradientedge/cdk-utils'
15
+ * import { Construct } from 'constructs'
16
+ *
17
+ * class CustomConstruct extends ApiToEventBridgeTarget {
18
+ * constructor(parent: Construct, id: string, props: ApiToEventBridgeTargetProps) {
19
+ * super(parent, id, props)
20
+ * this.props = props
21
+ * this.id = id
22
+ * this.initResources()
23
+ * }
24
+ * }
25
+ */
26
+ export class ApiToEventBridgeTarget extends CommonConstruct {
27
+ props;
28
+ id;
29
+ /* application related resources */
30
+ applicationSecrets;
31
+ /* event related resources */
32
+ apiEvent;
33
+ /* rest restApi related resources */
34
+ apiToEventBridgeTargetRestApi;
35
+ apiResource;
36
+ constructor(parent, id, props) {
37
+ super(parent, id, props);
38
+ this.props = props;
39
+ this.id = id;
40
+ this.apiEvent = new ApiToEventbridgeTargetEvent();
41
+ this.apiToEventBridgeTargetRestApi = new ApiToEventbridgeTargetRestApi();
42
+ this.apiResource = 'notify';
43
+ }
44
+ initResources() {
45
+ /* application related resources */
46
+ this.resolveSecrets();
47
+ /* core resources */
48
+ this.resolveHostedZone();
49
+ this.resolveCertificate();
50
+ /* optional custom event bus */
51
+ this.createApiToEventBridgeTargetEventBus();
52
+ /* event related resources */
53
+ this.createApiToEventBridgeTargetLogGroup();
54
+ this.createApiToEventBridgeTargetRule();
55
+ this.createApiToEventBridgeTargetPolicy();
56
+ this.createApiToEventBridgeTargetRole();
57
+ /* restApi related resources */
58
+ this.createApiToEventBridgeTargetIntegrationRequestParameters();
59
+ this.createApiToEventBridgeTargetIntegrationRequestTemplates();
60
+ this.createApiToEventBridgeTargetIntegrationResponse();
61
+ this.createApiToEventBridgeTargetIntegrationErrorResponse();
62
+ this.createApiToEventBridgeTargetIntegration();
63
+ this.createApiToEventBridgeTargetRestApi();
64
+ this.createApiToEventBridgeTargetResource();
65
+ this.createApiToEventBridgeTargetResponseModel();
66
+ this.createApiToEventBridgeTargetErrorResponseModel();
67
+ this.createApiToEventBridgeTargetMethodResponse();
68
+ this.createApiToEventBridgeTargetMethodErrorResponse();
69
+ this.createApiToEventBridgeTargetResourceMethod();
70
+ this.createApiDomain();
71
+ this.createApiBasePathMapping();
72
+ this.createApiRouteAssets();
73
+ }
74
+ /**
75
+ * @summary Method to resolve secrets from SecretsManager
76
+ * - To be implemented in the overriding method in the implementation class
77
+ */
78
+ resolveSecrets() {
79
+ this.applicationSecrets = [];
80
+ }
81
+ /**
82
+ * @summary Method to resolve a hosted zone based on domain attributes
83
+ */
84
+ resolveHostedZone() {
85
+ this.apiToEventBridgeTargetRestApi.hostedZone = this.route53Manager.withHostedZoneFromFullyQualifiedDomainName(`${this.id}-hosted-zone`, this, this.props.useExistingHostedZone);
86
+ }
87
+ /**
88
+ * @summary Method to resolve a certificate based on attributes
89
+ */
90
+ resolveCertificate() {
91
+ if (this.props.api.useExisting)
92
+ return;
93
+ if (this.props.api.certificate.useExistingCertificate &&
94
+ this.props.api.certificate.certificateSsmName &&
95
+ this.props.api.certificate.certificateRegion) {
96
+ this.props.api.certificate.certificateArn = this.ssmManager.readStringParameterFromRegion(`${this.id}-certificate-param`, this, this.props.api.certificate.certificateSsmName, this.props.api.certificate.certificateRegion);
97
+ }
98
+ this.apiToEventBridgeTargetRestApi.certificate = this.acmManager.resolveCertificate(`${this.id}-certificate`, this, this.props.api.certificate);
99
+ }
100
+ /**
101
+ * @summary Method to create or use an existing event bus for api payload deliveries
102
+ */
103
+ createApiToEventBridgeTargetEventBus() {
104
+ if (this.props.api.useExisting) {
105
+ this.apiEvent.eventBus = EventBus.fromEventBusName(this, `${this.id}-event-bus`, this.resourceNameFormatter.format(this.props.event.eventBusName ?? 'default', this.props.resourceNameOptions?.eventbridgeBus));
106
+ return;
107
+ }
108
+ this.apiEvent.eventBus = this.eventManager.createEventBus(`${this.id}-event-bus`, this, {
109
+ eventBusName: this.props.event.eventBusName ?? 'default',
110
+ });
111
+ }
112
+ /**
113
+ * @summary Method to create a log group for successful api payload deliveries
114
+ */
115
+ createApiToEventBridgeTargetLogGroup() {
116
+ if (this.props.api.useExisting)
117
+ return;
118
+ this.apiEvent.logGroup = this.logManager.createLogGroup(`${this.id}-log`, this, {
119
+ ...{
120
+ logGroupName: `${this.id}-api-to-event-bridge-target-${this.props.stage}`,
121
+ },
122
+ ...this.props.event.logGroup,
123
+ });
124
+ }
125
+ /**
126
+ * Method to create EventBridge rule with lambda target for success
127
+ */
128
+ createApiToEventBridgeTargetRule() {
129
+ if (this.props.api.useExisting)
130
+ return;
131
+ if (!this.props.event.rule.ruleName)
132
+ throw `Event ruleName undefined for ${this.id}`;
133
+ this.props.event.rule = {
134
+ eventPattern: {
135
+ source: ['api-to-eventbridge-target'],
136
+ },
137
+ ...this.props.event.rule,
138
+ };
139
+ this.apiEvent.rule = this.eventManager.createRule(`${this.id}-api-to-eventbridge-target-rule`, this, this.props.event.rule, this.apiEvent.eventBus, [new CloudWatchLogGroup(this.apiEvent.logGroup)]);
140
+ }
141
+ createApiToEventBridgeTargetPolicy() {
142
+ this.apiToEventBridgeTargetRestApi.policy = new PolicyDocument({
143
+ statements: [this.iamManager.statementForPutEvents()],
144
+ });
145
+ }
146
+ /**
147
+ * @summary Method to create a role for api integration
148
+ */
149
+ createApiToEventBridgeTargetRole() {
150
+ if (!this.apiToEventBridgeTargetRestApi.policy)
151
+ throw 'Policy undefined';
152
+ this.apiToEventBridgeTargetRestApi.role = new Role(this, `${this.id}-rest-api-role`, {
153
+ assumedBy: new ServicePrincipal('apigateway.amazonaws.com'),
154
+ inlinePolicies: { policy: this.apiToEventBridgeTargetRestApi.policy },
155
+ });
156
+ }
157
+ /**
158
+ * @summary Method to create api integration request parameters
159
+ */
160
+ createApiToEventBridgeTargetIntegrationRequestParameters() {
161
+ if (!this.props.api.withResource)
162
+ return;
163
+ this.apiToEventBridgeTargetRestApi.integrationRequestParameters = {
164
+ 'integration.request.header.Content-Type': "'application/x-www-form-urlencoded'",
165
+ };
166
+ }
167
+ /**
168
+ * @summary Method to create api integration request templates
169
+ */
170
+ createApiToEventBridgeTargetIntegrationRequestTemplates() {
171
+ if (!this.props.api.withResource)
172
+ return;
173
+ this.apiToEventBridgeTargetRestApi.integrationRequestTemplates = {
174
+ 'application/json': [
175
+ '#set($context.requestOverride.header.X-Amz-Target = "AWSEvents.PutEvents")',
176
+ '#set($context.requestOverride.header.Content-Type = "application/x-amz-json-1.1")',
177
+ `{
178
+ "Entries": [
179
+ {
180
+ "EventBusName": "${this.apiEvent.eventBus.eventBusName}",
181
+ "Source": "api-to-eventbridge-target",
182
+ "DetailType": "$util.escapeJavaScript($context.domainName)$util.escapeJavaScript($context.resourcePath)",
183
+ "Detail": "$util.escapeJavaScript($input.body).replaceAll("\\\\'","'")"
184
+ }
185
+ ]
186
+ }`,
187
+ ].join('\r'),
188
+ };
189
+ }
190
+ /**
191
+ * @summary Method to create api integration response
192
+ */
193
+ createApiToEventBridgeTargetIntegrationResponse() {
194
+ if (!this.props.api.withResource)
195
+ return;
196
+ this.apiToEventBridgeTargetRestApi.integrationResponse = this.props.api.integrationResponse ?? {
197
+ responseTemplates: {
198
+ 'application/json': JSON.stringify({ message: 'Payload Submitted' }),
199
+ },
200
+ statusCode: '200',
201
+ };
202
+ }
203
+ /**
204
+ * @summary Method to create api integration error response
205
+ */
206
+ createApiToEventBridgeTargetIntegrationErrorResponse() {
207
+ if (!this.props.api.withResource)
208
+ return;
209
+ this.apiToEventBridgeTargetRestApi.integrationErrorResponse = {
210
+ responseParameters: {
211
+ 'method.response.header.Access-Control-Allow-Credentials': "'true'",
212
+ 'method.response.header.Access-Control-Allow-Origin': "'*'",
213
+ 'method.response.header.Content-Type': "'application/json'",
214
+ },
215
+ responseTemplates: {
216
+ 'application/json': JSON.stringify({
217
+ message: "$util.escapeJavaScript($input.path('$.errorMessage'))",
218
+ state: 'error',
219
+ }),
220
+ },
221
+ selectionPattern: '^\\[Error\\].*',
222
+ statusCode: '400',
223
+ ...this.props.api.integrationErrorResponse,
224
+ };
225
+ }
226
+ /**
227
+ * @summary Method to create api integration
228
+ */
229
+ createApiToEventBridgeTargetIntegration() {
230
+ if (!this.props.api.withResource)
231
+ return;
232
+ this.apiToEventBridgeTargetRestApi.integration = new Integration({
233
+ integrationHttpMethod: 'POST',
234
+ options: {
235
+ credentialsRole: this.apiToEventBridgeTargetRestApi.role,
236
+ integrationResponses: [
237
+ this.apiToEventBridgeTargetRestApi.integrationResponse,
238
+ this.apiToEventBridgeTargetRestApi.integrationErrorResponse,
239
+ ],
240
+ passthroughBehavior: PassthroughBehavior.NEVER,
241
+ requestParameters: this.apiToEventBridgeTargetRestApi.integrationRequestParameters,
242
+ requestTemplates: this.apiToEventBridgeTargetRestApi.integrationRequestTemplates,
243
+ ...this.props.api.integrationOptions,
244
+ },
245
+ type: IntegrationType.AWS,
246
+ uri: `arn:aws:apigateway:${this.props.region}:events:path//`,
247
+ });
248
+ }
249
+ /**
250
+ * @summary Method to create api integration method response
251
+ */
252
+ createApiToEventBridgeTargetMethodResponse() {
253
+ if (!this.props.api.withResource)
254
+ return;
255
+ this.apiToEventBridgeTargetRestApi.methodResponse = {
256
+ responseModels: {
257
+ 'application/json': this.apiToEventBridgeTargetRestApi.responseModel,
258
+ },
259
+ responseParameters: {
260
+ 'method.response.header.Access-Control-Allow-Credentials': true,
261
+ 'method.response.header.Access-Control-Allow-Origin': true,
262
+ 'method.response.header.Content-Type': true,
263
+ },
264
+ statusCode: '200',
265
+ ...this.props.api.methodResponse,
266
+ };
267
+ }
268
+ /**
269
+ * @summary Method to create api integration method error response
270
+ */
271
+ createApiToEventBridgeTargetMethodErrorResponse() {
272
+ if (!this.props.api.withResource)
273
+ return;
274
+ this.apiToEventBridgeTargetRestApi.methodErrorResponse = {
275
+ responseModels: {
276
+ 'application/json': this.apiToEventBridgeTargetRestApi.errorResponseModel,
277
+ },
278
+ responseParameters: {
279
+ 'method.response.header.Access-Control-Allow-Credentials': true,
280
+ 'method.response.header.Access-Control-Allow-Origin': true,
281
+ 'method.response.header.Content-Type': true,
282
+ },
283
+ statusCode: '400',
284
+ ...this.props.api.methodErrorResponse,
285
+ };
286
+ }
287
+ /**
288
+ * @summary Method to create rest restApi for Api
289
+ */
290
+ createApiToEventBridgeTargetRestApi() {
291
+ if (this.props.api.useExisting && this.props.api.importedRestApiRef) {
292
+ this.apiToEventBridgeTargetRestApi.api = RestApi.fromRestApiId(this, `${this.id}-rest-api`, Fn.importValue(this.props.api.importedRestApiRef));
293
+ return;
294
+ }
295
+ if (!this.props.api.restApi?.restApiName)
296
+ throw `RestApi name undefined for ${this.id}`;
297
+ const restApiName = this.resourceNameFormatter.format(this.props.api.restApi?.restApiName, this.props.resourceNameOptions?.apigateway);
298
+ const restApiAccessLogName = this.resourceNameFormatter.format(`${this.props.api.restApi?.restApiName}-access`, this.props.resourceNameOptions?.apigateway);
299
+ this.apiToEventBridgeTargetRestApi.accessLogGroup = this.logManager.createLogGroup(`${this.id}-rest-api-access-log`, this, {
300
+ logGroupName: restApiAccessLogName,
301
+ removalPolicy: RemovalPolicy.DESTROY,
302
+ });
303
+ this.apiToEventBridgeTargetRestApi.api = new RestApi(this, `${this.id}-rest-api`, {
304
+ cloudWatchRole: this.props.api.restApi?.cloudWatchRole ?? true,
305
+ defaultCorsPreflightOptions: {
306
+ allowHeaders: Cors.DEFAULT_HEADERS,
307
+ allowMethods: ['POST'],
308
+ allowOrigins: Cors.ALL_ORIGINS,
309
+ },
310
+ defaultIntegration: this.apiToEventBridgeTargetRestApi.integration,
311
+ defaultMethodOptions: {
312
+ methodResponses: [
313
+ this.apiToEventBridgeTargetRestApi.methodResponse,
314
+ this.apiToEventBridgeTargetRestApi.methodErrorResponse,
315
+ ],
316
+ },
317
+ deploy: this.props.api.restApi?.deploy ?? true,
318
+ deployOptions: {
319
+ accessLogDestination: new LogGroupLogDestination(this.apiToEventBridgeTargetRestApi.accessLogGroup),
320
+ accessLogFormat: AccessLogFormat.jsonWithStandardFields(),
321
+ dataTraceEnabled: this.props.api.restApi?.deployOptions?.dataTraceEnabled,
322
+ description: `${this.id} - ${this.props.stage} stage`,
323
+ loggingLevel: MethodLoggingLevel.INFO,
324
+ metricsEnabled: true,
325
+ stageName: this.props.stage,
326
+ tracingEnabled: this.props.api.restApi?.deployOptions?.tracingEnabled,
327
+ },
328
+ endpointConfiguration: {
329
+ types: [EndpointType.REGIONAL],
330
+ },
331
+ ...this.props.api.restApi,
332
+ restApiName,
333
+ });
334
+ this.addCfnOutput(`${this.id}-restApiId`, this.apiToEventBridgeTargetRestApi.api.restApiId);
335
+ this.addCfnOutput(`${this.id}-restApiRootResourceId`, this.apiToEventBridgeTargetRestApi.api.root.resourceId);
336
+ }
337
+ /**
338
+ * @summary Method to create api integration response model
339
+ */
340
+ createApiToEventBridgeTargetResponseModel() {
341
+ if (!this.props.api.withResource)
342
+ return;
343
+ this.apiToEventBridgeTargetRestApi.responseModel = new Model(this, `${this.id}-response-model`, {
344
+ restApi: this.apiToEventBridgeTargetRestApi.api,
345
+ contentType: 'application/json',
346
+ modelName: 'ResponseModel',
347
+ schema: {
348
+ properties: { message: { type: JsonSchemaType.STRING } },
349
+ schema: JsonSchemaVersion.DRAFT4,
350
+ title: 'pollResponse',
351
+ type: JsonSchemaType.OBJECT,
352
+ },
353
+ ...this.props.api.responseModel,
354
+ });
355
+ }
356
+ /**
357
+ * @summary Method to create api integration error response model
358
+ */
359
+ createApiToEventBridgeTargetErrorResponseModel() {
360
+ if (!this.props.api.withResource)
361
+ return;
362
+ this.apiToEventBridgeTargetRestApi.errorResponseModel = new Model(this, `${this.id}-error-response-model`, {
363
+ restApi: this.apiToEventBridgeTargetRestApi.api,
364
+ contentType: 'application/json',
365
+ modelName: 'ErrorResponseModel',
366
+ schema: {
367
+ properties: {
368
+ message: { type: JsonSchemaType.STRING },
369
+ state: { type: JsonSchemaType.STRING },
370
+ },
371
+ schema: JsonSchemaVersion.DRAFT4,
372
+ title: 'errorResponse',
373
+ type: JsonSchemaType.OBJECT,
374
+ },
375
+ ...this.props.api.errorResponseModel,
376
+ });
377
+ }
378
+ /**
379
+ * @summary Method to create api integration resource
380
+ */
381
+ createApiToEventBridgeTargetResource() {
382
+ if (!this.props.api.withResource)
383
+ return;
384
+ let rootResource;
385
+ if (this.props.api.withResource && this.props.api.importedRestApiRootResourceRef) {
386
+ rootResource = Resource.fromResourceAttributes(this, `${this.id}-root-resource`, {
387
+ path: '/',
388
+ resourceId: Fn.importValue(this.props.api.importedRestApiRootResourceRef),
389
+ restApi: this.apiToEventBridgeTargetRestApi.api,
390
+ });
391
+ }
392
+ else {
393
+ rootResource = this.apiToEventBridgeTargetRestApi.api.root;
394
+ }
395
+ this.apiToEventBridgeTargetRestApi.resource = rootResource.addResource(this.props.api.resource ?? this.apiResource);
396
+ }
397
+ /**
398
+ * @summary Method to create api integration resource method
399
+ */
400
+ createApiToEventBridgeTargetResourceMethod() {
401
+ if (!this.props.api.withResource)
402
+ return;
403
+ this.apiToEventBridgeTargetRestApi.method = this.apiToEventBridgeTargetRestApi.resource.addMethod('POST', this.apiToEventBridgeTargetRestApi.integration, {
404
+ authorizer: this.apiToEventBridgeTargetRestApi.authoriser,
405
+ methodResponses: [
406
+ this.apiToEventBridgeTargetRestApi.methodResponse,
407
+ this.apiToEventBridgeTargetRestApi.methodErrorResponse,
408
+ ],
409
+ });
410
+ }
411
+ /**
412
+ * @summary Method to create custom restApi domain for Api
413
+ */
414
+ createApiDomain() {
415
+ if (this.props.api.useExisting)
416
+ return;
417
+ this.apiToEventBridgeTargetRestApi.domain = this.apiManager.createApiDomain(`${this.id}-api-domain`, this, this.isProductionStage() || this.props.skipStageForARecords
418
+ ? `${this.props.apiSubDomain}.${this.fullyQualifiedDomainName}`
419
+ : `${this.props.apiSubDomain}-${this.props.stage}.${this.fullyQualifiedDomainName}`, this.apiToEventBridgeTargetRestApi.certificate);
420
+ }
421
+ /**
422
+ * @summary Method to create base path mappings for Api
423
+ */
424
+ createApiBasePathMapping() {
425
+ if (this.props.api.useExisting)
426
+ return;
427
+ new BasePathMapping(this, `${this.id}-base-bath-mapping`, {
428
+ basePath: '',
429
+ domainName: this.apiToEventBridgeTargetRestApi.domain,
430
+ restApi: this.apiToEventBridgeTargetRestApi.api,
431
+ stage: this.apiToEventBridgeTargetRestApi.api.deploymentStage,
432
+ });
433
+ }
434
+ /**
435
+ * @summary Method to create route53 records for Api
436
+ */
437
+ createApiRouteAssets() {
438
+ if (this.props.api.useExisting)
439
+ return;
440
+ this.route53Manager.createApiGatewayARecord(`${this.id}-custom-domain-a-record`, this, this.props.apiSubDomain, this.apiToEventBridgeTargetRestApi.domain, this.apiToEventBridgeTargetRestApi.hostedZone, this.props.skipStageForARecords);
441
+ }
442
+ }
@@ -0,0 +1,100 @@
1
+ import { DomainName, IAuthorizer, Integration, IntegrationOptions, IntegrationResponse, IRestApi, Method, MethodResponse, Model, ModelOptions, Resource } from 'aws-cdk-lib/aws-apigateway';
2
+ import { ICertificate } from 'aws-cdk-lib/aws-certificatemanager';
3
+ import { IEventBus, Rule } from 'aws-cdk-lib/aws-events';
4
+ import { PolicyDocument, Role } from 'aws-cdk-lib/aws-iam';
5
+ import { AssetCode } from 'aws-cdk-lib/aws-lambda';
6
+ import { LogGroup } from 'aws-cdk-lib/aws-logs';
7
+ import { IHostedZone } from 'aws-cdk-lib/aws-route53';
8
+ import { ITopic } from 'aws-cdk-lib/aws-sns';
9
+ import { CommonStackProps } from '../../common/index.js';
10
+ import { AcmProps, EventRuleProps, LambdaProps, LogProps, RestApigProps } from '../../services/index.js';
11
+ /**
12
+ */
13
+ export interface ApiToEventBridgeTargetEventType {
14
+ eventBus: IEventBus;
15
+ logGroup: LogGroup;
16
+ logGroupFailure: LogGroup;
17
+ logGroupSuccess: LogGroup;
18
+ rule: Rule;
19
+ ruleFailure: Rule;
20
+ ruleSuccess: Rule;
21
+ }
22
+ /**
23
+ */
24
+ export interface ApiToEventBridgeTargetRestApiType {
25
+ accessLogGroup: LogGroup;
26
+ api: IRestApi;
27
+ authoriser?: IAuthorizer;
28
+ certificate: ICertificate;
29
+ domain: DomainName;
30
+ errorResponseModel: Model;
31
+ hostedZone: IHostedZone;
32
+ integration: Integration;
33
+ integrationErrorResponse: IntegrationResponse;
34
+ integrationRequestParameters: {
35
+ [p: string]: string;
36
+ };
37
+ integrationRequestTemplates: {
38
+ [p: string]: string;
39
+ };
40
+ integrationResponse: IntegrationResponse;
41
+ method: Method;
42
+ methodErrorResponse: MethodResponse;
43
+ methodResponse: MethodResponse;
44
+ policy?: PolicyDocument;
45
+ resource: Resource;
46
+ responseModel: Model;
47
+ role?: Role;
48
+ topic?: ITopic;
49
+ }
50
+ /**
51
+ */
52
+ export interface ApiToEventBridgeTargetRestApiProps {
53
+ certificate: AcmProps;
54
+ errorResponseModel?: ModelOptions;
55
+ importedRestApiRef?: string;
56
+ importedRestApiRootResourceRef?: string;
57
+ integrationErrorResponse?: IntegrationResponse;
58
+ integrationOptions?: IntegrationOptions;
59
+ integrationResponse?: IntegrationResponse;
60
+ methodErrorResponse?: MethodResponse;
61
+ methodResponse?: MethodResponse;
62
+ resource: string;
63
+ responseModel?: ModelOptions;
64
+ restApi?: RestApigProps;
65
+ useExisting: boolean;
66
+ withResource?: boolean;
67
+ }
68
+ /**
69
+ */
70
+ interface ApiToEventBridgeTargetLambdaProps {
71
+ function: LambdaProps;
72
+ handler?: string;
73
+ layerSource?: AssetCode;
74
+ source?: AssetCode;
75
+ }
76
+ /**
77
+ */
78
+ interface ApiToEventBridgeTargetEventProps {
79
+ eventBusName?: string;
80
+ logGroup?: LogProps;
81
+ logGroupFailure?: LogProps;
82
+ logGroupSuccess?: LogProps;
83
+ rule: EventRuleProps;
84
+ ruleFailure: EventRuleProps;
85
+ ruleSuccess: EventRuleProps;
86
+ }
87
+ /**
88
+ */
89
+ export interface ApiToEventBridgeTargetProps extends CommonStackProps {
90
+ api: ApiToEventBridgeTargetRestApiProps;
91
+ apiRootPaths?: string[];
92
+ apiSubDomain: string;
93
+ event: ApiToEventBridgeTargetEventProps;
94
+ lambda?: ApiToEventBridgeTargetLambdaProps;
95
+ logLevel: string;
96
+ nodeEnv: string;
97
+ timezone: string;
98
+ useExistingHostedZone: boolean;
99
+ }
100
+ export {};
@@ -0,0 +1,16 @@
1
+ import { PolicyDocument, Role } from 'aws-cdk-lib/aws-iam';
2
+ import { IFunction, LayerVersion } from 'aws-cdk-lib/aws-lambda';
3
+ import { EventBridgeDestination } from 'aws-cdk-lib/aws-lambda-destinations';
4
+ import { ApiDestinedLambdaEnvironment, ApiDestinedLambdaType } from './types.js';
5
+ /**
6
+ * @classdesc Provides a construct to contain lambda resources for ApiToEventBridgeTargetWithSns
7
+ */
8
+ export declare class ApiDestinedLambda implements ApiDestinedLambdaType {
9
+ destinationFailure: EventBridgeDestination;
10
+ destinationSuccess: EventBridgeDestination;
11
+ environment: ApiDestinedLambdaEnvironment;
12
+ function: IFunction;
13
+ layers: LayerVersion[];
14
+ policy: PolicyDocument;
15
+ role: Role;
16
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @classdesc Provides a construct to contain lambda resources for ApiToEventBridgeTargetWithSns
3
+ */
4
+ export class ApiDestinedLambda {
5
+ destinationFailure;
6
+ destinationSuccess;
7
+ environment;
8
+ function;
9
+ layers;
10
+ policy;
11
+ role;
12
+ }
@@ -0,0 +1,3 @@
1
+ export * from './api-destined-lambda.js';
2
+ export * from './main.js';
3
+ export * from './types.js';
@@ -0,0 +1,3 @@
1
+ export * from './api-destined-lambda.js';
2
+ export * from './main.js';
3
+ export * from './types.js';