@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,38 @@
1
+ import { Fn } from 'aws-cdk-lib';
2
+ import { CfnEgressOnlyInternetGateway, CfnVPCCidrBlock, RouterType, Vpc, } from 'aws-cdk-lib/aws-ec2';
3
+ import _ from 'lodash';
4
+ export class Ipv6Vpc extends Vpc {
5
+ egressOnlyInternetGatewayId;
6
+ constructor(scope, id, props) {
7
+ super(scope, id, props);
8
+ const cfnVpcCidrBlock = new CfnVPCCidrBlock(this, `${id}-ipv6-cidr`, {
9
+ amazonProvidedIpv6CidrBlock: true,
10
+ vpcId: this.vpcId,
11
+ });
12
+ const subnetIpv6CidrBlocks = Fn.cidr(Fn.select(0, this.vpcIpv6CidrBlocks), 256, '64');
13
+ _.forEach([...this.publicSubnets, ...this.privateSubnets, ...this.isolatedSubnets], (subnet, index) => {
14
+ subnet.node.addDependency(cfnVpcCidrBlock);
15
+ const cfnSubnet = subnet.node.defaultChild;
16
+ cfnSubnet.cidrBlock = undefined;
17
+ cfnSubnet.mapPublicIpOnLaunch = false;
18
+ cfnSubnet.ipv6CidrBlock = Fn.select(index, subnetIpv6CidrBlocks);
19
+ cfnSubnet.assignIpv6AddressOnCreation = true;
20
+ cfnSubnet.ipv6Native = true;
21
+ });
22
+ const addDefaultIpv6Routes = (subnets, gatewayId, routerType) => subnets.forEach(subnet => subnet.addRoute(`${id}-default-route`, {
23
+ destinationIpv6CidrBlock: '::/0',
24
+ enablesInternetConnectivity: true,
25
+ routerId: gatewayId,
26
+ routerType: routerType,
27
+ }));
28
+ if (this.internetGatewayId) {
29
+ addDefaultIpv6Routes(this.publicSubnets, this.internetGatewayId, RouterType.GATEWAY);
30
+ }
31
+ if (_.isEmpty(this.privateSubnets)) {
32
+ return;
33
+ }
34
+ const egressIgw = new CfnEgressOnlyInternetGateway(this, `${id}-eigw`, { vpcId: this.vpcId });
35
+ this.egressOnlyInternetGatewayId = egressIgw.ref;
36
+ addDefaultIpv6Routes(this.privateSubnets, egressIgw.ref, RouterType.EGRESS_ONLY_INTERNET_GATEWAY);
37
+ }
38
+ }
@@ -0,0 +1,43 @@
1
+ import { Vpc } from 'aws-cdk-lib/aws-ec2';
2
+ import { CommonConstruct } from '../../common/index.js';
3
+ import { VpcProps } from './types.js';
4
+ /**
5
+ * @classdesc Provides operations on AWS VPC.
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.vpcManager.createVpc('MyVPC', this)
16
+ * }
17
+ * }
18
+ * @see [CDK VPC Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.@aws-cdk_aws-Vpc.html}
19
+ */
20
+ export declare class VpcManager {
21
+ /**
22
+ * @summary Method to create a new vpc
23
+ * @param id scoped id of the resource
24
+ * @param scope scope in which this resource is defined
25
+ * @param props
26
+ */
27
+ createVpc(id: string, scope: CommonConstruct, props: VpcProps): Vpc;
28
+ /**
29
+ * @summary Method to create a common vpc
30
+ * @param id scoped id of the resource
31
+ * @param scope scope in which this resource is defined
32
+ * @param props
33
+ * @param vpcIdentifier optional identifier for VPC
34
+ */
35
+ createCommonVpc(id: string, scope: CommonConstruct, props: VpcProps, vpcIdentifier?: string): Vpc;
36
+ /**
37
+ * @summary Method to retrieve a common vpc
38
+ * @param id scoped id of the resource
39
+ * @param scope scope in which this resource is defined
40
+ * @param vpcIdentifier optional identifier for VPC
41
+ */
42
+ retrieveCommonVpc(id: string, scope: CommonConstruct, vpcIdentifier?: string): import("aws-cdk-lib/aws-ec2").IVpc;
43
+ }
@@ -0,0 +1,87 @@
1
+ import { Tags } from 'aws-cdk-lib';
2
+ import { SubnetType, Vpc } from 'aws-cdk-lib/aws-ec2';
3
+ import _ from 'lodash';
4
+ import { createCfnOutput } from '../../utils/index.js';
5
+ import { Ipv6Vpc } from './ipv6.js';
6
+ /**
7
+ */
8
+ const CommonVpcIdentifier = 'CommonVpc';
9
+ /**
10
+ * @classdesc Provides operations on AWS VPC.
11
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
12
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
13
+ * @example
14
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
15
+ *
16
+ * class CustomConstruct extends CommonConstruct {
17
+ * constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
18
+ * super(parent, id, props)
19
+ * this.props = props
20
+ * this.vpcManager.createVpc('MyVPC', this)
21
+ * }
22
+ * }
23
+ * @see [CDK VPC Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.@aws-cdk_aws-Vpc.html}
24
+ */
25
+ export class VpcManager {
26
+ /**
27
+ * @summary Method to create a new vpc
28
+ * @param id scoped id of the resource
29
+ * @param scope scope in which this resource is defined
30
+ * @param props
31
+ */
32
+ createVpc(id, scope, props) {
33
+ if (!props)
34
+ throw `Vpc props undefined for ${id}`;
35
+ if (!props.vpcName)
36
+ throw `Vpc vpcName undefined for ${id}`;
37
+ const vpcName = scope.resourceNameFormatter.format(props.vpcName, scope.props.resourceNameOptions?.vpc);
38
+ let vpc;
39
+ if (props.isIPV6) {
40
+ vpc = new Ipv6Vpc(scope, `${id}`, {
41
+ ...props,
42
+ subnetConfiguration: [
43
+ { name: `${vpcName}-public`, subnetType: SubnetType.PUBLIC },
44
+ { name: `${vpcName}-private`, subnetType: SubnetType.PRIVATE_WITH_EGRESS },
45
+ ],
46
+ vpcName,
47
+ });
48
+ }
49
+ else {
50
+ vpc = new Vpc(scope, `${id}`, {
51
+ ...props,
52
+ vpcName,
53
+ });
54
+ }
55
+ createCfnOutput(`${id}Id`, scope, vpc.vpcId);
56
+ createCfnOutput(`${id}PublicSubnetIds`, scope, _.map(vpc.publicSubnets, subnet => subnet.subnetId).toString());
57
+ createCfnOutput(`${id}PrivateSubnetIds`, scope, _.map(vpc.privateSubnets, subnet => subnet.subnetId).toString());
58
+ createCfnOutput(`${id}PublicSubnetRouteTableIds`, scope, _.map(vpc.publicSubnets, subnet => subnet.routeTable.routeTableId).toString());
59
+ createCfnOutput(`${id}PrivateSubnetRouteTableIds`, scope, _.map(vpc.privateSubnets, subnet => subnet.routeTable.routeTableId).toString());
60
+ createCfnOutput(`${id}AvailabilityZones`, scope, vpc.availabilityZones.toString());
61
+ createCfnOutput(`${id}DefaultSecurityGroup`, scope, vpc.vpcDefaultSecurityGroup.toString());
62
+ return vpc;
63
+ }
64
+ /**
65
+ * @summary Method to create a common vpc
66
+ * @param id scoped id of the resource
67
+ * @param scope scope in which this resource is defined
68
+ * @param props
69
+ * @param vpcIdentifier optional identifier for VPC
70
+ */
71
+ createCommonVpc(id, scope, props, vpcIdentifier) {
72
+ const vpc = this.createVpc(id, scope, props);
73
+ Tags.of(vpc).add('Name', scope.resourceNameFormatter.format(vpcIdentifier ?? CommonVpcIdentifier, scope.props.resourceNameOptions?.vpc));
74
+ return vpc;
75
+ }
76
+ /**
77
+ * @summary Method to retrieve a common vpc
78
+ * @param id scoped id of the resource
79
+ * @param scope scope in which this resource is defined
80
+ * @param vpcIdentifier optional identifier for VPC
81
+ */
82
+ retrieveCommonVpc(id, scope, vpcIdentifier) {
83
+ return Vpc.fromLookup(scope, `${id}`, {
84
+ vpcName: scope.resourceNameFormatter.format(vpcIdentifier ?? CommonVpcIdentifier, scope.props.resourceNameOptions?.vpc),
85
+ });
86
+ }
87
+ }
@@ -0,0 +1,4 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ export interface VpcProps extends ec2.VpcProps {
3
+ isIPV6?: boolean;
4
+ }
@@ -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,35 @@
1
+ import { CfnIPSet, CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
2
+ import { CommonConstruct } from '../../common/index.js';
3
+ import { WafIPSetProps, WafWebACLProps } from './types.js';
4
+ /**
5
+ * @classdesc Provides operations on AWS WAF.
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.wafManager.createWebAcl('MyWebAcl', this)
16
+ * }
17
+ * }
18
+ * @see [CDK WAF Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_waf-readme.html}
19
+ */
20
+ export declare class WafManager {
21
+ /**
22
+ * @summary Method to create an ip set
23
+ * @param id scoped id of the resource
24
+ * @param scope scope in which this resource is defined
25
+ * @param props
26
+ */
27
+ createIpSet(id: string, scope: CommonConstruct, props: WafIPSetProps): CfnIPSet;
28
+ /**
29
+ * @summary Method to create a web acl
30
+ * @param id scoped id of the resource
31
+ * @param scope scope in which this resource is defined
32
+ * @param props
33
+ */
34
+ createWebAcl(id: string, scope: CommonConstruct, props: WafWebACLProps): CfnWebACL;
35
+ }
@@ -0,0 +1,61 @@
1
+ import { CfnIPSet, CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
2
+ import { createCfnOutput } from '../../utils/index.js';
3
+ /**
4
+ * @classdesc Provides operations on AWS WAF.
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.wafManager.createWebAcl('MyWebAcl', this)
15
+ * }
16
+ * }
17
+ * @see [CDK WAF Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_waf-readme.html}
18
+ */
19
+ export class WafManager {
20
+ /**
21
+ * @summary Method to create an ip set
22
+ * @param id scoped id of the resource
23
+ * @param scope scope in which this resource is defined
24
+ * @param props
25
+ */
26
+ createIpSet(id, scope, props) {
27
+ if (!props)
28
+ throw `WAF Ip Set props undefined for ${id}`;
29
+ if (!props.name)
30
+ throw `WAF Ip Set name undefined for ${id}`;
31
+ const ipSet = new CfnIPSet(scope, `${id}`, {
32
+ ...props,
33
+ description: `IP Set for ${id} - ${scope.props.stage} stage`,
34
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.waf),
35
+ });
36
+ createCfnOutput(`${id}-ipSetId`, scope, ipSet.attrId);
37
+ createCfnOutput(`${id}-ipSetArn`, scope, ipSet.attrArn);
38
+ return ipSet;
39
+ }
40
+ /**
41
+ * @summary Method to create a web acl
42
+ * @param id scoped id of the resource
43
+ * @param scope scope in which this resource is defined
44
+ * @param props
45
+ */
46
+ createWebAcl(id, scope, props) {
47
+ if (!props)
48
+ throw `WAF WebACL props undefined for ${id}`;
49
+ if (!props.name)
50
+ throw `WAF WebACL name undefined for ${id}`;
51
+ const webAcl = new CfnWebACL(scope, `${id}`, {
52
+ ...props,
53
+ description: `Web Acl for ${id} - ${scope.props.stage} stage`,
54
+ name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.waf),
55
+ tags: [{ key: 'service', value: scope.props.name }],
56
+ });
57
+ createCfnOutput(`${id}-webAclId`, scope, webAcl.attrId);
58
+ createCfnOutput(`${id}-webAclArn`, scope, webAcl.attrArn);
59
+ return webAcl;
60
+ }
61
+ }
@@ -0,0 +1,9 @@
1
+ import { CfnIPSetProps, CfnWebACLProps } from 'aws-cdk-lib/aws-wafv2';
2
+ /**
3
+ */
4
+ export interface WafIPSetProps extends CfnIPSetProps {
5
+ }
6
+ /**
7
+ */
8
+ export interface WafWebACLProps extends CfnWebACLProps {
9
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ */
3
+ export interface TagProps {
4
+ key: string;
5
+ value: string;
6
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,45 @@
1
+ import { AwsCredentialIdentityProvider } from '@aws-sdk/types';
2
+ import { CfnOutput } from 'aws-cdk-lib';
3
+ import { CommonConstruct } from '../common/index.js';
4
+ /**
5
+ * @summary Helper method to add CloudFormation outputs from the construct
6
+ * @param id scoped id of the resource
7
+ * @param scope scope in which this resource is defined
8
+ * @param value the value of the exported output
9
+ * @param description optional description for the output
10
+ * @param overrideId Flag which indicates whether to override the default logical id of the output
11
+ * @returns The CloudFormation output
12
+ */
13
+ export declare function createCfnOutput(id: string, scope: CommonConstruct, value?: string, description?: string, overrideId?: boolean): CfnOutput;
14
+ /**
15
+ *
16
+ */
17
+ export declare function determineCredentials(): AwsCredentialIdentityProvider;
18
+ /**
19
+ * @param error
20
+ */
21
+ export declare function redirectError(error: any): {
22
+ body: string;
23
+ headers: {
24
+ 'Access-Control-Allow-Origin': string;
25
+ };
26
+ isBase64Encoded: boolean;
27
+ statusCode: number;
28
+ } & {
29
+ body: string;
30
+ statusCode: number;
31
+ };
32
+ /**
33
+ * @param message
34
+ */
35
+ export declare function redirectSuccess(message: any): {
36
+ body: string;
37
+ headers: {
38
+ 'Access-Control-Allow-Origin': string;
39
+ };
40
+ isBase64Encoded: boolean;
41
+ statusCode: number;
42
+ } & {
43
+ body: string;
44
+ statusCode: number;
45
+ };
@@ -0,0 +1,61 @@
1
+ import { fromEnv, fromIni } from '@aws-sdk/credential-providers';
2
+ import { CfnOutput } from 'aws-cdk-lib';
3
+ import _ from 'lodash';
4
+ /**
5
+ * @summary Helper method to add CloudFormation outputs from the construct
6
+ * @param id scoped id of the resource
7
+ * @param scope scope in which this resource is defined
8
+ * @param value the value of the exported output
9
+ * @param description optional description for the output
10
+ * @param overrideId Flag which indicates whether to override the default logical id of the output
11
+ * @returns The CloudFormation output
12
+ */
13
+ export function createCfnOutput(id, scope, value, description, overrideId = true) {
14
+ const camelName = _.camelCase(id);
15
+ const output = new CfnOutput(scope, id, {
16
+ description,
17
+ exportName: `${scope.props.stackName}-${camelName}`,
18
+ value: value ?? '',
19
+ });
20
+ if (overrideId) {
21
+ output.overrideLogicalId(camelName);
22
+ }
23
+ return output;
24
+ }
25
+ /**
26
+ *
27
+ */
28
+ export function determineCredentials() {
29
+ if (process.env.AWS_PROFILE)
30
+ return fromIni();
31
+ return fromEnv();
32
+ }
33
+ /**
34
+ */
35
+ const defaultResponseObject = {
36
+ body: '',
37
+ headers: {
38
+ 'Access-Control-Allow-Origin': '*',
39
+ },
40
+ isBase64Encoded: false,
41
+ statusCode: 200,
42
+ };
43
+ /**
44
+ * @param error
45
+ */
46
+ export function redirectError(error) {
47
+ console.error(error, error.message, error.stack);
48
+ return Object.assign({}, defaultResponseObject, {
49
+ body: JSON.stringify(Object.assign({}, { error: error.message, success: false })),
50
+ statusCode: 500,
51
+ });
52
+ }
53
+ /**
54
+ * @param message
55
+ */
56
+ export function redirectSuccess(message) {
57
+ return Object.assign({}, defaultResponseObject, {
58
+ body: JSON.stringify(Object.assign({}, { error: message, success: true })),
59
+ statusCode: 200,
60
+ });
61
+ }
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@gradientedge/cdk-utils-aws",
3
+ "version": "1.0.0",
4
+ "description": "AWS CDK utilities for @gradientedge/cdk-utils",
5
+ "type": "module",
6
+ "main": "dist/src/index.js",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/src/index.js",
10
+ "types": "./dist/src/index.d.ts"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist/src/"
15
+ ],
16
+ "dependencies": {
17
+ "@aws-sdk/client-secrets-manager": "^3.1021.0",
18
+ "@aws-sdk/credential-providers": "^3.1021.0",
19
+ "@aws-sdk/types": "^3.973.6",
20
+ "@types/lodash": "^4.17.24",
21
+ "app-root-path": "^3.1.0",
22
+ "aws-cdk-lib": "^2.246.0",
23
+ "lodash": "^4.17.23",
24
+ "constructs": "^10.6.0",
25
+ "moment": "^2.30.1",
26
+ "uuid": "^13.0.0",
27
+ "@gradientedge/cdk-utils-common": "1.0.0"
28
+ },
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/gradientedge/cdk-utils.git",
36
+ "directory": "packages/aws"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc",
40
+ "build:production": "tsc -p tsconfig.prd.json",
41
+ "test": "vitest run --coverage",
42
+ "lint": "eslint src/**/*.ts --cache --max-warnings=0 --no-warn-ignored"
43
+ }
44
+ }