@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,9 @@
1
+ import { QueueProps } from 'aws-cdk-lib/aws-sqs';
2
+ import { SqsToLambdaPipeProps, SqsToSfnPipeProps } from '../../services/index.js';
3
+ import { EventHandlerProps } from '../event-handler/index.js';
4
+ export interface PipedEventHandlerProps extends EventHandlerProps {
5
+ pipedDlq: QueueProps;
6
+ pipedQueue: QueueProps;
7
+ sqsToLambdaPipe: SqsToLambdaPipeProps;
8
+ sqsToSfnPipe: SqsToSfnPipeProps;
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,96 @@
1
+ import { BasePathMapping, DomainName, RestApi } from 'aws-cdk-lib/aws-apigateway';
2
+ import { ICertificate } from 'aws-cdk-lib/aws-certificatemanager';
3
+ import { PolicyDocument, Role } from 'aws-cdk-lib/aws-iam';
4
+ import { IFunction, ILayerVersion } from 'aws-cdk-lib/aws-lambda';
5
+ import { IHostedZone } from 'aws-cdk-lib/aws-route53';
6
+ import { ISecret } from 'aws-cdk-lib/aws-secretsmanager';
7
+ import { Construct } from 'constructs';
8
+ import { CommonConstruct } from '../../common/index.js';
9
+ import { RestApiLambdaEnvironment, RestApiLambdaProps } from './types.js';
10
+ /**
11
+ * @classdesc Provides a construct to create and deploy a RestApi as Lambda
12
+ *
13
+ * <b>Architecture</b><br/> ![Architecture](./RestApiLambda.jpg)
14
+ * @example
15
+ * import { RestApiLambda, RestApiLambdaProps } '@gradientedge/cdk-utils'
16
+ * import { Construct } from 'constructs'
17
+ *
18
+ * class CustomConstruct extends RestApiLambda {
19
+ * constructor(parent: Construct, id: string, props: RestApiLambdaProps) {
20
+ * super(parent, id, props)
21
+ * this.props = props
22
+ * this.id = id
23
+ * this.initResources()
24
+ * }
25
+ * }
26
+ */
27
+ export declare abstract class RestApiLambda extends CommonConstruct {
28
+ props: RestApiLambdaProps;
29
+ id: string;
30
+ applicationSecrets: ISecret[];
31
+ restApiLambdaPolicy: PolicyDocument;
32
+ restApiLambdaRole: Role;
33
+ restApiLambdaEnvironment: RestApiLambdaEnvironment;
34
+ restApiLambdaLayers: ILayerVersion[];
35
+ restApiLambdaFunction: IFunction;
36
+ restApi: RestApi;
37
+ restApiHostedZone: IHostedZone;
38
+ restApiCertificate: ICertificate;
39
+ restApiDomain: DomainName;
40
+ restApiBasePathMappings: BasePathMapping[];
41
+ protected constructor(parent: Construct, id: string, props: RestApiLambdaProps);
42
+ /**
43
+ * @summary Initialise and provision resources
44
+ */
45
+ initResources(): void;
46
+ /**
47
+ * @summary Method to resolve secrets from SecretsManager
48
+ * - To be implemented in the overriding method in the implementation class
49
+ */
50
+ protected resolveSecrets(): void;
51
+ /**
52
+ * @summary Method to resolve a hosted zone based on domain attributes
53
+ */
54
+ protected resolveHostedZone(): void;
55
+ /**
56
+ * @summary Method to resolve a certificate based on attributes
57
+ */
58
+ protected resolveCertificate(): void;
59
+ /**
60
+ * @summary Method to create iam policy for RestApi Lambda function
61
+ */
62
+ protected createLambdaPolicy(): void;
63
+ /**
64
+ * @summary Method to create iam role for RestApi Lambda function
65
+ */
66
+ protected createLambdaRole(): void;
67
+ /**
68
+ * @summary Method to create environment variables for RestApi Lambda function
69
+ */
70
+ protected createLambdaEnvironment(): void;
71
+ /**
72
+ * @summary Method to create layers for RestApi Lambda function
73
+ */
74
+ protected createLambdaLayers(): void;
75
+ /**
76
+ * @summary Method to create lambda function for RestApi
77
+ */
78
+ protected createLambdaFunction(): void;
79
+ /**
80
+ * @summary Method to create rest restApiLambda for RestApi
81
+ */
82
+ protected createRestApi(): void;
83
+ protected abstract createRestApiResources(): void;
84
+ /**
85
+ * @summary Method to create custom restApiLambda domain for RestApi
86
+ */
87
+ protected createApiDomain(): void;
88
+ /**
89
+ * @summary Method to create base path mappings for RestApi
90
+ */
91
+ protected createApiBasePathMapping(): void;
92
+ /**
93
+ * @summary Method to create route53 records for RestApi
94
+ */
95
+ protected createApiRouteAssets(): void;
96
+ }
@@ -0,0 +1,170 @@
1
+ import { BasePathMapping } from 'aws-cdk-lib/aws-apigateway';
2
+ import { PolicyDocument } from 'aws-cdk-lib/aws-iam';
3
+ import _ from 'lodash';
4
+ import { CommonConstruct } from '../../common/index.js';
5
+ /**
6
+ * @classdesc Provides a construct to create and deploy a RestApi as Lambda
7
+ *
8
+ * <b>Architecture</b><br/> ![Architecture](./RestApiLambda.jpg)
9
+ * @example
10
+ * import { RestApiLambda, RestApiLambdaProps } '@gradientedge/cdk-utils'
11
+ * import { Construct } from 'constructs'
12
+ *
13
+ * class CustomConstruct extends RestApiLambda {
14
+ * constructor(parent: Construct, id: string, props: RestApiLambdaProps) {
15
+ * super(parent, id, props)
16
+ * this.props = props
17
+ * this.id = id
18
+ * this.initResources()
19
+ * }
20
+ * }
21
+ */
22
+ export class RestApiLambda extends CommonConstruct {
23
+ /* restApiLambda props */
24
+ props;
25
+ id;
26
+ /* restApiLambda resources */
27
+ applicationSecrets;
28
+ restApiLambdaPolicy;
29
+ restApiLambdaRole;
30
+ restApiLambdaEnvironment;
31
+ restApiLambdaLayers = [];
32
+ restApiLambdaFunction;
33
+ restApi;
34
+ restApiHostedZone;
35
+ restApiCertificate;
36
+ restApiDomain;
37
+ restApiBasePathMappings = [];
38
+ constructor(parent, id, props) {
39
+ super(parent, id, props);
40
+ this.props = props;
41
+ this.id = id;
42
+ }
43
+ /**
44
+ * @summary Initialise and provision resources
45
+ */
46
+ initResources() {
47
+ this.resolveSecrets();
48
+ this.resolveHostedZone();
49
+ this.resolveCertificate();
50
+ this.createLambdaPolicy();
51
+ this.createLambdaRole();
52
+ this.createLambdaEnvironment();
53
+ this.createLambdaLayers();
54
+ this.createLambdaFunction();
55
+ this.createRestApi();
56
+ this.createRestApiResources();
57
+ this.createApiDomain();
58
+ this.createApiBasePathMapping();
59
+ this.createApiRouteAssets();
60
+ }
61
+ /**
62
+ * @summary Method to resolve secrets from SecretsManager
63
+ * - To be implemented in the overriding method in the implementation class
64
+ */
65
+ resolveSecrets() {
66
+ this.applicationSecrets = [];
67
+ }
68
+ /**
69
+ * @summary Method to resolve a hosted zone based on domain attributes
70
+ */
71
+ resolveHostedZone() {
72
+ this.restApiHostedZone = this.route53Manager.withHostedZoneFromFullyQualifiedDomainName(`${this.id}-hosted-zone`, this, this.props.useExistingHostedZone);
73
+ }
74
+ /**
75
+ * @summary Method to resolve a certificate based on attributes
76
+ */
77
+ resolveCertificate() {
78
+ if (this.props.restApiCertificate.useExistingCertificate &&
79
+ this.props.restApiCertificate.certificateSsmName &&
80
+ this.props.restApiCertificate.certificateRegion) {
81
+ this.props.restApiCertificate.certificateArn = this.ssmManager.readStringParameterFromRegion(`${this.id}-certificate-param`, this, this.props.restApiCertificate.certificateSsmName, this.props.restApiCertificate.certificateRegion);
82
+ }
83
+ this.restApiCertificate = this.acmManager.resolveCertificate(`${this.id}-certificate`, this, this.props.restApiCertificate);
84
+ }
85
+ /**
86
+ * @summary Method to create iam policy for RestApi Lambda function
87
+ */
88
+ createLambdaPolicy() {
89
+ this.restApiLambdaPolicy = new PolicyDocument({
90
+ statements: [this.iamManager.statementForCreateAnyLogStream()],
91
+ });
92
+ }
93
+ /**
94
+ * @summary Method to create iam role for RestApi Lambda function
95
+ */
96
+ createLambdaRole() {
97
+ this.restApiLambdaRole = this.iamManager.createRoleForLambda(`${this.id}-lambda-role`, this, this.restApiLambdaPolicy);
98
+ }
99
+ /**
100
+ * @summary Method to create environment variables for RestApi Lambda function
101
+ */
102
+ createLambdaEnvironment() {
103
+ this.restApiLambdaEnvironment = {
104
+ LOG_LEVEL: this.props.logLevel,
105
+ NODE_ENV: this.props.nodeEnv,
106
+ TZ: this.props.timezone,
107
+ };
108
+ }
109
+ /**
110
+ * @summary Method to create layers for RestApi Lambda function
111
+ */
112
+ createLambdaLayers() {
113
+ const layers = [];
114
+ if (!this.props.restApiLambdaLayerSources)
115
+ return;
116
+ _.forEach(this.props.restApiLambdaLayerSources, (source, index) => {
117
+ layers.push(this.lambdaManager.createLambdaLayer(`${this.id}-layer-${index}`, this, source));
118
+ });
119
+ this.restApiLambdaLayers = layers;
120
+ }
121
+ /**
122
+ * @summary Method to create lambda function for RestApi
123
+ */
124
+ createLambdaFunction() {
125
+ this.restApiLambdaFunction = this.lambdaManager.createLambdaFunction(`${this.id}-restapi-server`, this, this.props.restApiLambda, this.restApiLambdaRole, this.restApiLambdaLayers, this.props.restApiSource, this.props.restApiHandler || 'index.handler', this.restApiLambdaEnvironment);
126
+ }
127
+ /**
128
+ * @summary Method to create rest restApiLambda for RestApi
129
+ */
130
+ createRestApi() {
131
+ this.restApi = this.apiManager.createLambdaRestApi(`${this.id}-lambda-rest-api`, this, this.props.restApi, this.restApiLambdaFunction);
132
+ }
133
+ /**
134
+ * @summary Method to create custom restApiLambda domain for RestApi
135
+ */
136
+ createApiDomain() {
137
+ this.restApiDomain = this.apiManager.createApiDomain(`${this.id}-api-domain`, this, this.isProductionStage() || this.props.skipStageForARecords
138
+ ? `${this.props.apiSubDomain}.${this.fullyQualifiedDomainName}`
139
+ : `${this.props.apiSubDomain}-${this.props.stage}.${this.fullyQualifiedDomainName}`, this.restApiCertificate);
140
+ }
141
+ /**
142
+ * @summary Method to create base path mappings for RestApi
143
+ */
144
+ createApiBasePathMapping() {
145
+ const apiRootPaths = this.props.apiRootPaths;
146
+ if (apiRootPaths && !_.isEmpty(apiRootPaths)) {
147
+ _.forEach(apiRootPaths, (apiRootPath) => {
148
+ this.restApiBasePathMappings.push(new BasePathMapping(this, `${this.id}-base-bath-mapping-${apiRootPath}`, {
149
+ basePath: apiRootPath,
150
+ domainName: this.restApiDomain,
151
+ restApi: this.restApi,
152
+ stage: this.restApi.deploymentStage,
153
+ }));
154
+ });
155
+ return;
156
+ }
157
+ // add default mapping if apiRootPaths not set
158
+ new BasePathMapping(this, `${this.id}-base-bath-mapping`, {
159
+ domainName: this.restApiDomain,
160
+ restApi: this.restApi,
161
+ stage: this.restApi.deploymentStage,
162
+ });
163
+ }
164
+ /**
165
+ * @summary Method to create route53 records for RestApi
166
+ */
167
+ createApiRouteAssets() {
168
+ this.route53Manager.createApiGatewayARecord(`${this.id}-custom-domain-a-record`, this, this.props.apiSubDomain, this.restApiDomain, this.restApiHostedZone, this.props.skipStageForARecords);
169
+ }
170
+ }
@@ -0,0 +1,23 @@
1
+ import { AcmProps, LambdaEnvironment, LambdaProps, LambdaRestApiProps } from '../../services/index.js';
2
+ import { CommonStackProps } from '../../common/index.js';
3
+ import { AssetCode } from 'aws-cdk-lib/aws-lambda';
4
+ /**
5
+ */
6
+ export interface RestApiLambdaEnvironment extends LambdaEnvironment {
7
+ }
8
+ /**
9
+ */
10
+ export interface RestApiLambdaProps extends CommonStackProps {
11
+ apiRootPaths?: string[];
12
+ apiSubDomain: string;
13
+ logLevel: string;
14
+ nodeEnv: string;
15
+ restApi: LambdaRestApiProps;
16
+ restApiCertificate: AcmProps;
17
+ restApiHandler: string;
18
+ restApiLambda: LambdaProps;
19
+ restApiLambdaLayerSources?: AssetCode[];
20
+ restApiSource: AssetCode;
21
+ timezone: string;
22
+ useExistingHostedZone: boolean;
23
+ }
@@ -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 { ISecurityGroup, IVpc } from 'aws-cdk-lib/aws-ec2';
2
+ import { CfnReplicationGroup } from 'aws-cdk-lib/aws-elasticache';
3
+ import { Construct } from 'constructs';
4
+ import { RestApiLambdaWithCacheProps } from './types.js';
5
+ import { RestApiLambda } from '../rest-api-lambda/index.js';
6
+ /**
7
+ * @classdesc Provides a construct to create and deploy a RestApi API as Lambda with Caching
8
+ *
9
+ * <b>Architecture</b><br/> ![Architecture](./RestApiLambda.jpg)
10
+ * @example
11
+ * import { RestApiLambdaWithCacheProps } '@gradientedge/cdk-utils'
12
+ * import { Construct } from 'constructs'
13
+ *
14
+ * class CustomConstruct extends RestApiLambdaWithCache {
15
+ * constructor(parent: Construct, id: string, props: RestApiLambdaWithCacheProps) {
16
+ * super(parent, id, props)
17
+ * this.props = props
18
+ * this.id = id
19
+ * this.initResources()
20
+ * }
21
+ * }
22
+ */
23
+ export declare abstract class RestApiLambdaWithCache extends RestApiLambda {
24
+ props: RestApiLambdaWithCacheProps;
25
+ id: string;
26
+ restApivpc: IVpc;
27
+ restApiCache: CfnReplicationGroup;
28
+ restApiSecurityGroup: ISecurityGroup;
29
+ restApiSecurityGroupExportName: string;
30
+ protected constructor(parent: Construct, id: string, props: RestApiLambdaWithCacheProps);
31
+ initResources(): void;
32
+ /**
33
+ * Create VPC
34
+ */
35
+ protected resolveVpc(): void;
36
+ /**
37
+ * Resolve Security Group
38
+ */
39
+ protected resolveSecurityGroup(): void;
40
+ /**
41
+ * Create ElastiCache
42
+ */
43
+ protected createElastiCache(): void;
44
+ /**
45
+ * Create Lambda Role
46
+ */
47
+ protected createLambdaRole(): void;
48
+ /**
49
+ * @summary Method to create environment variables for RestApi Lambda function
50
+ */
51
+ protected createLambdaEnvironment(): void;
52
+ /**
53
+ * @summary Method to create lambda function for RestApi API
54
+ */
55
+ protected createLambdaFunction(): void;
56
+ }
@@ -0,0 +1,118 @@
1
+ import { Fn } from 'aws-cdk-lib';
2
+ import { Peer, Port, SecurityGroup } from 'aws-cdk-lib/aws-ec2';
3
+ import { ManagedPolicy } from 'aws-cdk-lib/aws-iam';
4
+ import _ from 'lodash';
5
+ import { createCfnOutput } from '../../utils/index.js';
6
+ import { RestApiLambda } from '../rest-api-lambda/index.js';
7
+ /**
8
+ * @classdesc Provides a construct to create and deploy a RestApi API as Lambda with Caching
9
+ *
10
+ * <b>Architecture</b><br/> ![Architecture](./RestApiLambda.jpg)
11
+ * @example
12
+ * import { RestApiLambdaWithCacheProps } '@gradientedge/cdk-utils'
13
+ * import { Construct } from 'constructs'
14
+ *
15
+ * class CustomConstruct extends RestApiLambdaWithCache {
16
+ * constructor(parent: Construct, id: string, props: RestApiLambdaWithCacheProps) {
17
+ * super(parent, id, props)
18
+ * this.props = props
19
+ * this.id = id
20
+ * this.initResources()
21
+ * }
22
+ * }
23
+ */
24
+ export class RestApiLambdaWithCache extends RestApiLambda {
25
+ /* restApiLambdaWithCache props */
26
+ props;
27
+ id;
28
+ /* restApiLambda resources */
29
+ restApivpc;
30
+ restApiCache;
31
+ restApiSecurityGroup;
32
+ restApiSecurityGroupExportName;
33
+ constructor(parent, id, props) {
34
+ super(parent, id, props);
35
+ this.props = props;
36
+ this.id = id;
37
+ }
38
+ initResources() {
39
+ this.resolveVpc();
40
+ this.resolveSecurityGroup();
41
+ this.createElastiCache();
42
+ super.initResources();
43
+ }
44
+ /**
45
+ * Create VPC
46
+ */
47
+ resolveVpc() {
48
+ if (this.props.useExistingVpc) {
49
+ this.restApivpc = this.vpcManager.retrieveCommonVpc(`${this.id}-vpc`, this, this.props.vpcName);
50
+ }
51
+ else {
52
+ this.restApivpc = this.vpcManager.createCommonVpc(`${this.id}-vpc`, this, this.props.restApiVpc, this.props.restApiVpc.vpcName);
53
+ }
54
+ }
55
+ /**
56
+ * Resolve Security Group
57
+ */
58
+ resolveSecurityGroup() {
59
+ if (this.props.securityGroupExportName) {
60
+ this.restApiSecurityGroup = SecurityGroup.fromSecurityGroupId(this, `${this.id}-security-group`, Fn.importValue(this.props.securityGroupExportName));
61
+ }
62
+ else {
63
+ this.restApiSecurityGroup = new SecurityGroup(this, `${this.id}-security-group-${this.props.stage}`, {
64
+ securityGroupName: `${this.id}-security-group-${this.props.stage}`,
65
+ vpc: this.restApivpc,
66
+ });
67
+ if (this.props.restApiVpc.isIPV6) {
68
+ this.restApiSecurityGroup.addIngressRule(Peer.anyIpv6(), Port.allTraffic(), 'All Traffic');
69
+ }
70
+ else {
71
+ this.restApiSecurityGroup.addIngressRule(Peer.anyIpv4(), Port.allTraffic(), 'All Traffic');
72
+ }
73
+ createCfnOutput(`${this.id}-security-group-id`, this, this.restApiSecurityGroup.securityGroupId);
74
+ }
75
+ }
76
+ /**
77
+ * Create ElastiCache
78
+ */
79
+ createElastiCache() {
80
+ if (!this.props.restApiCache) {
81
+ return;
82
+ }
83
+ this.restApiCache = this.elasticacheManager.createReplicatedElastiCache(`${this.id}-elasticache`, this, this.props.restApiCache, _.map(this.restApivpc.privateSubnets, subnet => subnet.subnetId), [this.restApiSecurityGroup.securityGroupId]);
84
+ this.ssmManager.writeStringToParameters(`${this.id}-elasticache-endpoint-address`, this, {
85
+ description: `Elasticache address to use by applications`,
86
+ parameterName: `${this.id}-elasticache-endpoint-address`,
87
+ stringValue: this.restApiCache.attrConfigurationEndPointAddress,
88
+ });
89
+ this.ssmManager.writeStringToParameters(`${this.id}-elasticache-endpoint-port`, this, {
90
+ description: `Elasticache port to use by applications`,
91
+ parameterName: `${this.id}-elasticache-endpoint-port`,
92
+ stringValue: this.restApiCache.attrConfigurationEndPointPort,
93
+ });
94
+ }
95
+ /**
96
+ * Create Lambda Role
97
+ */
98
+ createLambdaRole() {
99
+ super.createLambdaRole();
100
+ this.restApiLambdaRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaVPCAccessExecutionRole'));
101
+ }
102
+ /**
103
+ * @summary Method to create environment variables for RestApi Lambda function
104
+ */
105
+ createLambdaEnvironment() {
106
+ this.restApiLambdaEnvironment = {
107
+ LOG_LEVEL: this.props.logLevel,
108
+ NODE_ENV: this.props.nodeEnv,
109
+ TZ: this.props.timezone,
110
+ };
111
+ }
112
+ /**
113
+ * @summary Method to create lambda function for RestApi API
114
+ */
115
+ createLambdaFunction() {
116
+ this.restApiLambdaFunction = this.lambdaManager.createLambdaFunction(`${this.id}-restapi-server`, this, this.props.restApiLambda, this.restApiLambdaRole, this.restApiLambdaLayers, this.props.restApiSource, this.props.restApiHandler || 'index.handler', this.restApiLambdaEnvironment, this.restApivpc, [this.restApiSecurityGroup], undefined, undefined, this.restApivpc);
117
+ }
118
+ }
@@ -0,0 +1,11 @@
1
+ import { RestApiLambdaProps } from '../rest-api-lambda/index.js';
2
+ import { ReplicatedElastiCacheProps, VpcProps } from '../../services/index.js';
3
+ /**
4
+ */
5
+ export interface RestApiLambdaWithCacheProps extends RestApiLambdaProps {
6
+ restApiCache: ReplicatedElastiCacheProps;
7
+ restApiVpc: VpcProps;
8
+ securityGroupExportName: string;
9
+ useExistingVpc: boolean;
10
+ vpcName?: string;
11
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum SiteResponseHeaderPolicyType {
2
+ ORIGIN = "origin",
3
+ STATIC = "static"
4
+ }
@@ -0,0 +1,5 @@
1
+ export var SiteResponseHeaderPolicyType;
2
+ (function (SiteResponseHeaderPolicyType) {
3
+ SiteResponseHeaderPolicyType["ORIGIN"] = "origin";
4
+ SiteResponseHeaderPolicyType["STATIC"] = "static";
5
+ })(SiteResponseHeaderPolicyType || (SiteResponseHeaderPolicyType = {}));
@@ -0,0 +1,3 @@
1
+ export * from './constants.js';
2
+ export * from './main.js';
3
+ export * from './types.js';
@@ -0,0 +1,3 @@
1
+ export * from './constants.js';
2
+ export * from './main.js';
3
+ export * from './types.js';