@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,63 @@
1
+ import { CfnApplication, CfnConfigurationProfile, CfnEnvironment, DeploymentStrategy } from 'aws-cdk-lib/aws-appconfig';
2
+ import { CommonConstruct } from '../../common/index.js';
3
+ import { Architecture } from '../constants.js';
4
+ import { AppConfigProps } from './types.js';
5
+ /**
6
+ * @classdesc Provides operations on AWS
7
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
8
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
9
+ * @example
10
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
11
+ *
12
+ * class CustomConstruct extends CommonConstruct {
13
+ * constructor(parent: Construct, id: string, props: common.CommonStackProps) {
14
+ * super(parent, id, props)
15
+ * this.props = props
16
+ * this.appConfigManager.createApplication('MyApplication', this)
17
+ * }
18
+ * }
19
+ * @see [CDK AppConfig Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appconfig-readme.html}
20
+ */
21
+ export declare class AppConfigManager {
22
+ /**
23
+ * Method to get static ARNs for AppConfig extensions
24
+ * @param scope scope in which this resource is defined
25
+ * @param type type of the architecture
26
+ */
27
+ getArnForAppConfigExtension(scope: CommonConstruct, type: Architecture): string;
28
+ /**
29
+ * @summary Method to create an AppConfig Application
30
+ * @param id scoped id of the resource
31
+ * @param scope scope in which this resource is defined
32
+ * @param props
33
+ * @returns the appconfig application
34
+ */
35
+ createApplication(id: string, scope: CommonConstruct, props: AppConfigProps): CfnApplication;
36
+ /**
37
+ * @summary Method to create an AppConfig Environment for a given application
38
+ * @param id scoped id of the resource
39
+ * @param scope scope in which this resource is defined
40
+ * @param applicationId id of the application
41
+ * @param props
42
+ * @returns the appconfig environment
43
+ */
44
+ createEnvironment(id: string, scope: CommonConstruct, applicationId: string, props: AppConfigProps): CfnEnvironment;
45
+ /**
46
+ * @summary Method to create an AppConfig Configuration Profile for a given application
47
+ * - The <b>locationUri</b> is defaulted to <i>hosted</i> if undefined</p>
48
+ * @param id scoped id of the resource
49
+ * @param scope scope in which this resource is defined
50
+ * @param applicationId id of the application
51
+ * @param props
52
+ * @returns the appconfig configuration profile
53
+ */
54
+ createConfigurationProfile(id: string, scope: CommonConstruct, applicationId: string, props: AppConfigProps): CfnConfigurationProfile;
55
+ /**
56
+ * @summary Method to create an AppConfig Deployment Strategy
57
+ * @param id scoped id of the resource
58
+ * @param scope scope in which this resource is defined
59
+ * @param props
60
+ * @returns the appconfig deployment strategy
61
+ */
62
+ createDeploymentStrategy(id: string, scope: CommonConstruct, props: AppConfigProps): DeploymentStrategy;
63
+ }
@@ -0,0 +1,119 @@
1
+ import { Fn } from 'aws-cdk-lib';
2
+ import { CfnApplication, CfnConfigurationProfile, CfnEnvironment, DeploymentStrategy, RolloutStrategy, } from 'aws-cdk-lib/aws-appconfig';
3
+ import { createCfnOutput } from '../../utils/index.js';
4
+ import { Architecture } from '../constants.js';
5
+ import { ArnsByRegionForArm64, ArnsByRegionForX86_64 } from './constants.js';
6
+ /**
7
+ * @classdesc Provides operations on AWS
8
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
9
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
10
+ * @example
11
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
12
+ *
13
+ * class CustomConstruct extends CommonConstruct {
14
+ * constructor(parent: Construct, id: string, props: common.CommonStackProps) {
15
+ * super(parent, id, props)
16
+ * this.props = props
17
+ * this.appConfigManager.createApplication('MyApplication', this)
18
+ * }
19
+ * }
20
+ * @see [CDK AppConfig Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appconfig-readme.html}
21
+ */
22
+ export class AppConfigManager {
23
+ /**
24
+ * Method to get static ARNs for AppConfig extensions
25
+ * @param scope scope in which this resource is defined
26
+ * @param type type of the architecture
27
+ */
28
+ getArnForAppConfigExtension(scope, type) {
29
+ switch (type) {
30
+ case Architecture.ARM_64:
31
+ return ArnsByRegionForArm64[scope.props.region];
32
+ case Architecture.X86_64:
33
+ return ArnsByRegionForX86_64[scope.props.region];
34
+ default:
35
+ throw `Invalid type ${type} specified`;
36
+ }
37
+ }
38
+ /**
39
+ * @summary Method to create an AppConfig Application
40
+ * @param id scoped id of the resource
41
+ * @param scope scope in which this resource is defined
42
+ * @param props
43
+ * @returns the appconfig application
44
+ */
45
+ createApplication(id, scope, props) {
46
+ if (!props)
47
+ throw `AppConfig props undefined for ${id}`;
48
+ const application = new CfnApplication(scope, `${id}`, {
49
+ ...props.application,
50
+ name: scope.resourceNameFormatter.format(props.application.name, scope.props.resourceNameOptions?.appconfig),
51
+ });
52
+ createCfnOutput(`${id}-ApplicationId`, scope, Fn.ref(application.logicalId));
53
+ createCfnOutput(`${id}-ApplicationName`, scope, application.name);
54
+ return application;
55
+ }
56
+ /**
57
+ * @summary Method to create an AppConfig Environment for a given application
58
+ * @param id scoped id of the resource
59
+ * @param scope scope in which this resource is defined
60
+ * @param applicationId id of the application
61
+ * @param props
62
+ * @returns the appconfig environment
63
+ */
64
+ createEnvironment(id, scope, applicationId, props) {
65
+ if (!props)
66
+ throw `AppConfig props undefined for ${id}`;
67
+ const environment = new CfnEnvironment(scope, `${id}`, {
68
+ ...props.environment,
69
+ applicationId,
70
+ name: props.environment.name ?? scope.props.stage,
71
+ });
72
+ createCfnOutput(`${id}-configurationEnvironmentId`, scope, Fn.ref(environment.logicalId));
73
+ createCfnOutput(`${id}-configurationEnvironmentName`, scope, environment.name);
74
+ return environment;
75
+ }
76
+ /**
77
+ * @summary Method to create an AppConfig Configuration Profile for a given application
78
+ * - The <b>locationUri</b> is defaulted to <i>hosted</i> if undefined</p>
79
+ * @param id scoped id of the resource
80
+ * @param scope scope in which this resource is defined
81
+ * @param applicationId id of the application
82
+ * @param props
83
+ * @returns the appconfig configuration profile
84
+ */
85
+ createConfigurationProfile(id, scope, applicationId, props) {
86
+ if (!props)
87
+ throw `AppConfig props undefined for ${id}`;
88
+ const profile = new CfnConfigurationProfile(scope, `${id}`, {
89
+ ...props.configurationProfile,
90
+ applicationId,
91
+ locationUri: props.configurationProfile.locationUri || 'hosted',
92
+ name: scope.resourceNameFormatter.format(props.configurationProfile.name, scope.props.resourceNameOptions?.appconfig),
93
+ });
94
+ createCfnOutput(`${id}-configurationProfileId`, scope, Fn.ref(profile.logicalId));
95
+ createCfnOutput(`${id}-configurationProfileName`, scope, profile.name);
96
+ return profile;
97
+ }
98
+ /**
99
+ * @summary Method to create an AppConfig Deployment Strategy
100
+ * @param id scoped id of the resource
101
+ * @param scope scope in which this resource is defined
102
+ * @param props
103
+ * @returns the appconfig deployment strategy
104
+ */
105
+ createDeploymentStrategy(id, scope, props) {
106
+ if (!props)
107
+ throw `AppConfig props undefined for ${id}`;
108
+ if (!props.deploymentStrategy)
109
+ throw `AppConfig deploymentStrategy props undefined for ${id}`;
110
+ const deploymentStrategy = new DeploymentStrategy(scope, `${id}`, {
111
+ ...props,
112
+ deploymentStrategyName: scope.resourceNameFormatter.format(props.deploymentStrategy.deploymentStrategyName ?? 'common-deployment-strategy', scope.props.resourceNameOptions?.appconfig),
113
+ rolloutStrategy: props.deploymentStrategy.rolloutStrategy ?? RolloutStrategy.ALL_AT_ONCE,
114
+ });
115
+ createCfnOutput(`${id}-deploymentStrategyId`, scope, deploymentStrategy.deploymentStrategyId);
116
+ createCfnOutput(`${id}-deploymentStrategyArn`, scope, deploymentStrategy.deploymentStrategyArn);
117
+ return deploymentStrategy;
118
+ }
119
+ }
@@ -0,0 +1,17 @@
1
+ import { CfnApplicationProps, CfnConfigurationProfileProps, CfnDeploymentProps, CfnEnvironmentProps, DeploymentStrategyProps } from 'aws-cdk-lib/aws-appconfig';
2
+ /**
3
+ *
4
+ */
5
+ export interface AppConfigDeploymentStrategyProps extends DeploymentStrategyProps {
6
+ deploymentStrategyArn?: string;
7
+ }
8
+ /**
9
+ */
10
+ export interface AppConfigProps {
11
+ application: CfnApplicationProps;
12
+ configurationProfile: CfnConfigurationProfileProps;
13
+ deployment: CfnDeploymentProps;
14
+ deploymentStrategy: AppConfigDeploymentStrategyProps;
15
+ environment: CfnEnvironmentProps;
16
+ id: string;
17
+ }
@@ -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,41 @@
1
+ import { ICertificate } from 'aws-cdk-lib/aws-certificatemanager';
2
+ import { IHostedZone } from 'aws-cdk-lib/aws-route53';
3
+ import { CommonConstruct } from '../../common/index.js';
4
+ import { AcmProps } from './types.js';
5
+ /**
6
+ * @classdesc Provides operations on AWS Certificates.
7
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
8
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
9
+ * @example
10
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
11
+ *
12
+ * class CustomConstruct extends CommonConstruct {
13
+ * constructor(parent: Construct, id: string, props: common.CommonStackProps) {
14
+ * super(parent, id, props)
15
+ * this.props = props
16
+ * this.acmManager.createCertificate('MyCertificate', this)
17
+ * }
18
+ * }
19
+ * @see [CDK Certificate Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_certificatemanager-readme.html}
20
+ */
21
+ export declare class AcmManager {
22
+ /**
23
+ * @summary Method to create/import a certificate
24
+ * @param id scoped id of the resource
25
+ * @param scope scope in which this resource is defined
26
+ * @param props certificate props
27
+ * @param hostedZone optional hosted zone to perform DNS validation
28
+ * @returns the resolved certificate
29
+ * @mermaid
30
+ * graph LR;
31
+ * A((Start)) --> B{Valid Properties?};
32
+ * B -- Yes --> C(Fetch By ARN);
33
+ * B -- No --> D[Throw Error];
34
+ * D --> G((Stop));
35
+ * C --> E{Valid ARN?};
36
+ * E -- Yes --> F(Return Certificate);
37
+ * E -- No --> D;
38
+ * F --> G;
39
+ */
40
+ resolveCertificate(id: string, scope: CommonConstruct, props: AcmProps, hostedZone?: IHostedZone): ICertificate;
41
+ }
@@ -0,0 +1,62 @@
1
+ import { Stack } from 'aws-cdk-lib';
2
+ import { Certificate, CertificateValidation } from 'aws-cdk-lib/aws-certificatemanager';
3
+ import { createCfnOutput } from '../../utils/index.js';
4
+ /**
5
+ * @classdesc Provides operations on AWS Certificates.
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: Construct, id: string, props: common.CommonStackProps) {
13
+ * super(parent, id, props)
14
+ * this.props = props
15
+ * this.acmManager.createCertificate('MyCertificate', this)
16
+ * }
17
+ * }
18
+ * @see [CDK Certificate Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_certificatemanager-readme.html}
19
+ */
20
+ export class AcmManager {
21
+ /**
22
+ * @summary Method to create/import a certificate
23
+ * @param id scoped id of the resource
24
+ * @param scope scope in which this resource is defined
25
+ * @param props certificate props
26
+ * @param hostedZone optional hosted zone to perform DNS validation
27
+ * @returns the resolved certificate
28
+ * @mermaid
29
+ * graph LR;
30
+ * A((Start)) --> B{Valid Properties?};
31
+ * B -- Yes --> C(Fetch By ARN);
32
+ * B -- No --> D[Throw Error];
33
+ * D --> G((Stop));
34
+ * C --> E{Valid ARN?};
35
+ * E -- Yes --> F(Return Certificate);
36
+ * E -- No --> D;
37
+ * F --> G;
38
+ */
39
+ resolveCertificate(id, scope, props, hostedZone) {
40
+ if (!props)
41
+ throw `Certificate props undefined for ${id}`;
42
+ let certificate;
43
+ if (props.useExistingCertificate) {
44
+ let certificateArn = props.certificateArn;
45
+ if (!certificateArn) {
46
+ const certificateAccount = props.certificateAccount ? props.certificateAccount : Stack.of(scope).account;
47
+ const certificateRegion = props.certificateRegion ? props.certificateRegion : Stack.of(scope).region;
48
+ certificateArn = `arn:aws:acm:${certificateRegion}:${certificateAccount}:certificate/${props.certificateId}`;
49
+ }
50
+ certificate = Certificate.fromCertificateArn(scope, `${id}`, certificateArn);
51
+ }
52
+ else {
53
+ certificate = new Certificate(scope, `${id}`, {
54
+ domainName: props.domainName,
55
+ subjectAlternativeNames: props.subjectAlternativeNames,
56
+ validation: CertificateValidation.fromDns(hostedZone),
57
+ });
58
+ }
59
+ createCfnOutput(`${id}-certificateArn`, scope, certificate.certificateArn);
60
+ return certificate;
61
+ }
62
+ }
@@ -0,0 +1,11 @@
1
+ import { CertificateProps } from 'aws-cdk-lib/aws-certificatemanager';
2
+ /**
3
+ */
4
+ export interface AcmProps extends CertificateProps {
5
+ certificateAccount?: string;
6
+ certificateArn?: string;
7
+ certificateId?: string;
8
+ certificateRegion?: string;
9
+ certificateSsmName?: string;
10
+ useExistingCertificate: boolean;
11
+ }
@@ -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 { ICertificate } from 'aws-cdk-lib/aws-certificatemanager';
2
+ import * as cf from 'aws-cdk-lib/aws-cloudfront';
3
+ import { DistributionAttributes, FunctionAssociation, IDistribution, IResponseHeadersPolicyRef, OriginAccessIdentity } from 'aws-cdk-lib/aws-cloudfront';
4
+ import { HttpOrigin } from 'aws-cdk-lib/aws-cloudfront-origins';
5
+ import { ISecurityGroup, IVpc } from 'aws-cdk-lib/aws-ec2';
6
+ import { IAccessPoint } from 'aws-cdk-lib/aws-efs';
7
+ import { Role } from 'aws-cdk-lib/aws-iam';
8
+ import { AssetCode, ILayerVersion } from 'aws-cdk-lib/aws-lambda';
9
+ import { IBucket } from 'aws-cdk-lib/aws-s3';
10
+ import { CommonConstruct } from '../../common/index.js';
11
+ import { LambdaEdgeProps } from '../lambda/index.js';
12
+ import { CloudfrontFunctionProps, DistributionProps } from './types.js';
13
+ /**
14
+ * @classdesc Provides operations on AWS
15
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
16
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
17
+ * @example
18
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
19
+ *
20
+ * class CustomConstruct extends CommonConstruct {
21
+ * constructor(parent: Construct, id: string, props: common.CommonStackProps) {
22
+ * super(parent, id, props)
23
+ * this.props = props
24
+ * this.cloudFrontManager.createCloudFrontDistribution(
25
+ * 'MyDistribution',
26
+ * this,
27
+ * siteBucket,
28
+ * logBucket,
29
+ * originAccessIdentity,
30
+ * certificate
31
+ * )
32
+ * }
33
+ * }
34
+ * @see [CDK CloudFront Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_cloudfront-readme.html}
35
+ */
36
+ export declare class CloudFrontManager {
37
+ createOriginAccessIdentity(id: string, scope: CommonConstruct, accessBucket?: IBucket): cf.OriginAccessIdentity;
38
+ /**
39
+ * Method to create a CloudFront distribution with S3 Origin
40
+ * @param id scoped id of the resource
41
+ * @param scope scope in which this resource is defined
42
+ * @param props distribution properties
43
+ * @param siteBucket
44
+ * @param logBucket
45
+ * @param oai
46
+ * @param certificate
47
+ * @param aliases
48
+ * @param defaultFunctionAssociations
49
+ */
50
+ createDistributionWithS3Origin(id: string, scope: CommonConstruct, props: DistributionProps, siteBucket: IBucket, logBucket?: IBucket, oai?: OriginAccessIdentity, certificate?: ICertificate, aliases?: string[], defaultFunctionAssociations?: FunctionAssociation[]): cf.Distribution;
51
+ /**
52
+ * Method to create a CloudFront distribution with HTTP Origin
53
+ * @param id scoped id of the resource
54
+ * @param scope scope in which this resource is defined
55
+ * @param props distribution properties
56
+ * @param origin
57
+ * @param domainNames
58
+ * @param logBucket
59
+ * @param certificate
60
+ * @param defaultFunctionAssociations
61
+ * @param responseHeadersPolicy
62
+ */
63
+ createDistributionWithHttpOrigin(id: string, scope: CommonConstruct, props: DistributionProps, origin: HttpOrigin, domainNames: string[], logBucket?: IBucket, certificate?: ICertificate, defaultFunctionAssociations?: FunctionAssociation[], responseHeadersPolicy?: IResponseHeadersPolicyRef): cf.Distribution;
64
+ /**
65
+ * @summary Method to provision a Lambda@Edge function
66
+ * @param id scoped id of the resource
67
+ * @param scope scope in which this resource is defined
68
+ * @param props lambda@edge properties
69
+ * @param layers
70
+ * @param code
71
+ * @param role
72
+ * @param environment
73
+ * @param vpc
74
+ * @param securityGroups
75
+ * @param accessPoint
76
+ * @param mountPath
77
+ */
78
+ createEdgeFunction(id: string, scope: CommonConstruct, props: LambdaEdgeProps, layers: ILayerVersion[], code: AssetCode, role: Role, environment?: any, vpc?: IVpc, securityGroups?: ISecurityGroup[], accessPoint?: IAccessPoint, mountPath?: string): cf.experimental.EdgeFunction;
79
+ /**
80
+ *
81
+ * @param id
82
+ * @param scope
83
+ * @param dockerFilePath
84
+ * @param distributionId
85
+ * @param paths
86
+ */
87
+ invalidateCache(id: string, scope: CommonConstruct, dockerFilePath: string, distributionId: string, paths?: string): void;
88
+ /**
89
+ * @summary Method to provision a Cloudfront function
90
+ * @param id scoped id of the resource
91
+ * @param scope scope in which this resource is defined
92
+ * @param props
93
+ */
94
+ createCloudfrontFunction(id: string, scope: CommonConstruct, props: CloudfrontFunctionProps): cf.Function;
95
+ resolveDistribution(scope: CommonConstruct, props: DistributionAttributes): IDistribution;
96
+ }
@@ -0,0 +1,233 @@
1
+ import { Duration, RemovalPolicy, Tags } from 'aws-cdk-lib';
2
+ import * as cf from 'aws-cdk-lib/aws-cloudfront';
3
+ import { Distribution, Function, FunctionCode, HttpVersion, OriginAccessIdentity, PriceClass, SecurityPolicyProtocol, } from 'aws-cdk-lib/aws-cloudfront';
4
+ import { S3BucketOrigin } from 'aws-cdk-lib/aws-cloudfront-origins';
5
+ import { FileSystem } from 'aws-cdk-lib/aws-lambda';
6
+ import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from 'aws-cdk-lib/custom-resources';
7
+ import _ from 'lodash';
8
+ import { CommonStack } from '../../common/index.js';
9
+ import { createCfnOutput } from '../../utils/index.js';
10
+ /**
11
+ * @classdesc Provides operations on AWS
12
+ * - A new instance of this class is injected into {@link CommonConstruct} constructor.
13
+ * - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
14
+ * @example
15
+ * import { CommonConstruct } from '@gradientedge/cdk-utils'
16
+ *
17
+ * class CustomConstruct extends CommonConstruct {
18
+ * constructor(parent: Construct, id: string, props: common.CommonStackProps) {
19
+ * super(parent, id, props)
20
+ * this.props = props
21
+ * this.cloudFrontManager.createCloudFrontDistribution(
22
+ * 'MyDistribution',
23
+ * this,
24
+ * siteBucket,
25
+ * logBucket,
26
+ * originAccessIdentity,
27
+ * certificate
28
+ * )
29
+ * }
30
+ * }
31
+ * @see [CDK CloudFront Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_cloudfront-readme.html}
32
+ */
33
+ export class CloudFrontManager {
34
+ createOriginAccessIdentity(id, scope, accessBucket) {
35
+ const oai = new OriginAccessIdentity(scope, `${id}`, {
36
+ comment: `${id} - ${scope.props.stage} stage`,
37
+ });
38
+ if (accessBucket)
39
+ accessBucket.grantRead(oai);
40
+ return oai;
41
+ }
42
+ /**
43
+ * Method to create a CloudFront distribution with S3 Origin
44
+ * @param id scoped id of the resource
45
+ * @param scope scope in which this resource is defined
46
+ * @param props distribution properties
47
+ * @param siteBucket
48
+ * @param logBucket
49
+ * @param oai
50
+ * @param certificate
51
+ * @param aliases
52
+ * @param defaultFunctionAssociations
53
+ */
54
+ createDistributionWithS3Origin(id, scope, props, siteBucket, logBucket, oai, certificate, aliases, defaultFunctionAssociations) {
55
+ const distribution = new Distribution(scope, `${id}`, {
56
+ ...props,
57
+ certificate,
58
+ comment: `${id} - ${scope.props.stage} stage`,
59
+ defaultBehavior: {
60
+ ...props.defaultBehavior,
61
+ functionAssociations: defaultFunctionAssociations ?? undefined,
62
+ origin: S3BucketOrigin.withOriginAccessIdentity(siteBucket, { originAccessIdentity: oai }),
63
+ },
64
+ domainNames: aliases,
65
+ enableLogging: props.enableLogging ?? true,
66
+ enabled: props.enabled ?? true,
67
+ httpVersion: props.httpVersion ?? HttpVersion.HTTP2,
68
+ logBucket,
69
+ logFilePrefix: props.logFilePrefix ?? `edge/`,
70
+ logIncludesCookies: props.logIncludesCookies ?? true,
71
+ minimumProtocolVersion: props.minimumProtocolVersion ?? SecurityPolicyProtocol.TLS_V1_2_2021,
72
+ priceClass: props.priceClass ?? PriceClass.PRICE_CLASS_ALL,
73
+ });
74
+ if (props.tags && !_.isEmpty(props.tags)) {
75
+ _.forEach(props.tags, tag => {
76
+ Tags.of(distribution).add(tag.key, tag.value);
77
+ });
78
+ }
79
+ createCfnOutput(`${id}-distributionId`, scope, distribution.distributionId);
80
+ createCfnOutput(`${id}-distributionDomainName`, scope, distribution.distributionDomainName);
81
+ return distribution;
82
+ }
83
+ /**
84
+ * Method to create a CloudFront distribution with HTTP Origin
85
+ * @param id scoped id of the resource
86
+ * @param scope scope in which this resource is defined
87
+ * @param props distribution properties
88
+ * @param origin
89
+ * @param domainNames
90
+ * @param logBucket
91
+ * @param certificate
92
+ * @param defaultFunctionAssociations
93
+ * @param responseHeadersPolicy
94
+ */
95
+ createDistributionWithHttpOrigin(id, scope, props, origin, domainNames, logBucket, certificate, defaultFunctionAssociations, responseHeadersPolicy) {
96
+ const distribution = new Distribution(scope, `${id}`, {
97
+ additionalBehaviors: props.additionalBehaviors,
98
+ certificate: certificate,
99
+ comment: `${id} - ${scope.props.stage} stage`,
100
+ defaultBehavior: {
101
+ cachePolicy: props.defaultBehavior ? props.defaultBehavior.cachePolicy : undefined,
102
+ edgeLambdas: props.defaultBehavior ? props.defaultBehavior.edgeLambdas : undefined,
103
+ functionAssociations: defaultFunctionAssociations ?? undefined,
104
+ origin: origin,
105
+ originRequestPolicy: props.defaultBehavior ? props.defaultBehavior.originRequestPolicy : undefined,
106
+ responseHeadersPolicy: responseHeadersPolicy ?? undefined,
107
+ viewerProtocolPolicy: props.defaultBehavior ? props.defaultBehavior.viewerProtocolPolicy : undefined,
108
+ },
109
+ defaultRootObject: props.defaultRootObject,
110
+ domainNames: domainNames,
111
+ enableIpv6: props.enableIpv6,
112
+ enableLogging: props.enableLogging ?? true,
113
+ enabled: props.enabled ?? true,
114
+ errorResponses: props.errorResponses,
115
+ geoRestriction: props.geoRestriction,
116
+ httpVersion: props.httpVersion ?? HttpVersion.HTTP2,
117
+ logBucket: logBucket,
118
+ logFilePrefix: props.logFilePrefix ?? `edge/`,
119
+ logIncludesCookies: props.logIncludesCookies ?? true,
120
+ minimumProtocolVersion: props.minimumProtocolVersion ?? SecurityPolicyProtocol.TLS_V1_2_2021,
121
+ priceClass: props.priceClass ?? PriceClass.PRICE_CLASS_ALL,
122
+ webAclId: props.webAclId,
123
+ });
124
+ if (props.tags && !_.isEmpty(props.tags)) {
125
+ _.forEach(props.tags, tag => {
126
+ Tags.of(distribution).add(tag.key, tag.value);
127
+ });
128
+ }
129
+ createCfnOutput(`${id}-distributionId`, scope, distribution.distributionId);
130
+ createCfnOutput(`${id}-distributionDomainName`, scope, distribution.distributionDomainName);
131
+ return distribution;
132
+ }
133
+ /**
134
+ * @summary Method to provision a Lambda@Edge function
135
+ * @param id scoped id of the resource
136
+ * @param scope scope in which this resource is defined
137
+ * @param props lambda@edge properties
138
+ * @param layers
139
+ * @param code
140
+ * @param role
141
+ * @param environment
142
+ * @param vpc
143
+ * @param securityGroups
144
+ * @param accessPoint
145
+ * @param mountPath
146
+ */
147
+ createEdgeFunction(id, scope, props, layers, code, role, environment, vpc, securityGroups, accessPoint, mountPath) {
148
+ if (!props)
149
+ throw `EdgeFunction props undefined for ${id}`;
150
+ if (!props.functionName)
151
+ throw `EdgeFunction functionName undefined for ${id}`;
152
+ const functionName = scope.resourceNameFormatter.format(props.functionName, scope.props.resourceNameOptions?.cloudfront);
153
+ const edgeFunction = new cf.experimental.EdgeFunction(scope, `${id}`, {
154
+ code: code,
155
+ description: props.description,
156
+ environment: {
157
+ ...environment,
158
+ },
159
+ filesystem: accessPoint ? FileSystem.fromEfsAccessPoint(accessPoint, mountPath ?? '/mnt/msg') : undefined,
160
+ functionName,
161
+ handler: props.handler ?? 'index.handler',
162
+ layers: layers,
163
+ logGroup: scope.logManager.createLogGroup(`${id}-log-group`, scope, {
164
+ logGroupName: functionName,
165
+ removalPolicy: RemovalPolicy.DESTROY,
166
+ retention: scope.props.logRetention,
167
+ }),
168
+ memorySize: props.memorySize,
169
+ reservedConcurrentExecutions: props.reservedConcurrentExecutions,
170
+ role: role,
171
+ runtime: props.runtime ?? scope.props.nodejsRuntime ?? CommonStack.NODEJS_RUNTIME,
172
+ securityGroups: securityGroups,
173
+ stackId: `${id}-stack-id-${scope.props.stage}`,
174
+ timeout: props.timeoutInSecs ? Duration.seconds(props.timeoutInSecs) : Duration.minutes(1),
175
+ vpc: vpc,
176
+ });
177
+ if (props.tags && !_.isEmpty(props.tags)) {
178
+ props.tags.forEach(tag => {
179
+ Tags.of(edgeFunction).add(tag.key, tag.value);
180
+ });
181
+ }
182
+ createCfnOutput(`${id}-edgeArn`, scope, edgeFunction.edgeArn);
183
+ createCfnOutput(`${id}-edgeFunctionArn`, scope, edgeFunction.functionArn);
184
+ createCfnOutput(`${id}-edgeFunctionName`, scope, edgeFunction.functionName);
185
+ return edgeFunction;
186
+ }
187
+ /**
188
+ *
189
+ * @param id
190
+ * @param scope
191
+ * @param dockerFilePath
192
+ * @param distributionId
193
+ * @param paths
194
+ */
195
+ invalidateCache(id, scope, dockerFilePath, distributionId, paths) {
196
+ new AwsCustomResource(scope, `${id}-trigger-codebuild-${new Date().getTime()}`, {
197
+ onCreate: {
198
+ action: 'startBuild',
199
+ parameters: {
200
+ projectName: scope.codeBuildManager.createProjectForCloudfrontInvalidation(id, scope, dockerFilePath, distributionId, paths).projectName,
201
+ },
202
+ physicalResourceId: PhysicalResourceId.fromResponse('build.id'),
203
+ service: 'CodeBuild',
204
+ },
205
+ policy: AwsCustomResourcePolicy.fromSdkCalls({ resources: AwsCustomResourcePolicy.ANY_RESOURCE }),
206
+ });
207
+ }
208
+ /**
209
+ * @summary Method to provision a Cloudfront function
210
+ * @param id scoped id of the resource
211
+ * @param scope scope in which this resource is defined
212
+ * @param props
213
+ */
214
+ createCloudfrontFunction(id, scope, props) {
215
+ if (!props)
216
+ throw `CloudFront Function props undefined for ${id}`;
217
+ if (!props.functionName)
218
+ throw `CloudFront Function functionName undefined for ${id}`;
219
+ const cloudfrontFunction = new Function(scope, `${id}`, {
220
+ ...props,
221
+ code: FunctionCode.fromFile({
222
+ filePath: props.functionFilePath,
223
+ }),
224
+ functionName: scope.resourceNameFormatter.format(props.functionName, scope.props.resourceNameOptions?.cloudfront),
225
+ });
226
+ createCfnOutput(`${id}-functionArn`, scope, cloudfrontFunction.functionArn);
227
+ createCfnOutput(`${id}-functionName`, scope, cloudfrontFunction.functionName);
228
+ return cloudfrontFunction;
229
+ }
230
+ resolveDistribution(scope, props) {
231
+ return Distribution.fromDistributionAttributes(scope, `${scope.node.id}-sa-distribution`, props);
232
+ }
233
+ }