@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.
- package/LICENSE +21 -0
- package/dist/src/common/construct.d.ts +85 -0
- package/dist/src/common/construct.js +125 -0
- package/dist/src/common/index.d.ts +4 -0
- package/dist/src/common/index.js +4 -0
- package/dist/src/common/resource-name-formatter.d.ts +13 -0
- package/dist/src/common/resource-name-formatter.js +30 -0
- package/dist/src/common/stack.d.ts +62 -0
- package/dist/src/common/stack.js +139 -0
- package/dist/src/common/types.d.ts +30 -0
- package/dist/src/common/types.js +1 -0
- package/dist/src/construct/api-to-any-target/index.d.ts +3 -0
- package/dist/src/construct/api-to-any-target/index.js +3 -0
- package/dist/src/construct/api-to-any-target/main.d.ts +47 -0
- package/dist/src/construct/api-to-any-target/main.js +154 -0
- package/dist/src/construct/api-to-any-target/target.d.ts +23 -0
- package/dist/src/construct/api-to-any-target/target.js +14 -0
- package/dist/src/construct/api-to-any-target/types.d.ts +60 -0
- package/dist/src/construct/api-to-any-target/types.js +1 -0
- package/dist/src/construct/api-to-eventbridge-target/api.d.ts +34 -0
- package/dist/src/construct/api-to-eventbridge-target/api.js +23 -0
- package/dist/src/construct/api-to-eventbridge-target/event.d.ts +15 -0
- package/dist/src/construct/api-to-eventbridge-target/event.js +12 -0
- package/dist/src/construct/api-to-eventbridge-target/index.d.ts +4 -0
- package/dist/src/construct/api-to-eventbridge-target/index.js +4 -0
- package/dist/src/construct/api-to-eventbridge-target/main.d.ts +121 -0
- package/dist/src/construct/api-to-eventbridge-target/main.js +442 -0
- package/dist/src/construct/api-to-eventbridge-target/types.d.ts +100 -0
- package/dist/src/construct/api-to-eventbridge-target/types.js +1 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/api-destined-lambda.d.ts +16 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/api-destined-lambda.js +12 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/index.d.ts +3 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/index.js +3 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/main.d.ts +159 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/main.js +547 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/types.d.ts +22 -0
- package/dist/src/construct/api-to-eventbridge-target-with-sns/types.js +1 -0
- package/dist/src/construct/api-to-lambda-target/api.d.ts +35 -0
- package/dist/src/construct/api-to-lambda-target/api.js +24 -0
- package/dist/src/construct/api-to-lambda-target/index.d.ts +3 -0
- package/dist/src/construct/api-to-lambda-target/index.js +3 -0
- package/dist/src/construct/api-to-lambda-target/main.d.ts +70 -0
- package/dist/src/construct/api-to-lambda-target/main.js +218 -0
- package/dist/src/construct/api-to-lambda-target/types.d.ts +62 -0
- package/dist/src/construct/api-to-lambda-target/types.js +1 -0
- package/dist/src/construct/application-configuration/index.d.ts +2 -0
- package/dist/src/construct/application-configuration/index.js +2 -0
- package/dist/src/construct/application-configuration/main.d.ts +23 -0
- package/dist/src/construct/application-configuration/main.js +79 -0
- package/dist/src/construct/application-configuration/types.d.ts +6 -0
- package/dist/src/construct/application-configuration/types.js +1 -0
- package/dist/src/construct/event-handler/handler.d.ts +29 -0
- package/dist/src/construct/event-handler/handler.js +21 -0
- package/dist/src/construct/event-handler/index.d.ts +3 -0
- package/dist/src/construct/event-handler/index.js +3 -0
- package/dist/src/construct/event-handler/main.d.ts +91 -0
- package/dist/src/construct/event-handler/main.js +196 -0
- package/dist/src/construct/event-handler/types.d.ts +41 -0
- package/dist/src/construct/event-handler/types.js +1 -0
- package/dist/src/construct/index.d.ts +14 -0
- package/dist/src/construct/index.js +14 -0
- package/dist/src/construct/lambda-with-iam-access/index.d.ts +2 -0
- package/dist/src/construct/lambda-with-iam-access/index.js +2 -0
- package/dist/src/construct/lambda-with-iam-access/main.d.ts +78 -0
- package/dist/src/construct/lambda-with-iam-access/main.js +182 -0
- package/dist/src/construct/lambda-with-iam-access/types.d.ts +20 -0
- package/dist/src/construct/lambda-with-iam-access/types.js +1 -0
- package/dist/src/construct/piped-event-handler/index.d.ts +2 -0
- package/dist/src/construct/piped-event-handler/index.js +2 -0
- package/dist/src/construct/piped-event-handler/main.d.ts +38 -0
- package/dist/src/construct/piped-event-handler/main.js +62 -0
- package/dist/src/construct/piped-event-handler/types.d.ts +9 -0
- package/dist/src/construct/piped-event-handler/types.js +1 -0
- package/dist/src/construct/rest-api-lambda/index.d.ts +2 -0
- package/dist/src/construct/rest-api-lambda/index.js +2 -0
- package/dist/src/construct/rest-api-lambda/main.d.ts +96 -0
- package/dist/src/construct/rest-api-lambda/main.js +170 -0
- package/dist/src/construct/rest-api-lambda/types.d.ts +23 -0
- package/dist/src/construct/rest-api-lambda/types.js +1 -0
- package/dist/src/construct/rest-api-lambda-with-cache/index.d.ts +2 -0
- package/dist/src/construct/rest-api-lambda-with-cache/index.js +2 -0
- package/dist/src/construct/rest-api-lambda-with-cache/main.d.ts +56 -0
- package/dist/src/construct/rest-api-lambda-with-cache/main.js +118 -0
- package/dist/src/construct/rest-api-lambda-with-cache/types.d.ts +11 -0
- package/dist/src/construct/rest-api-lambda-with-cache/types.js +1 -0
- package/dist/src/construct/site-with-ecs-backend/constants.d.ts +4 -0
- package/dist/src/construct/site-with-ecs-backend/constants.js +5 -0
- package/dist/src/construct/site-with-ecs-backend/index.d.ts +3 -0
- package/dist/src/construct/site-with-ecs-backend/index.js +3 -0
- package/dist/src/construct/site-with-ecs-backend/main.d.ts +154 -0
- package/dist/src/construct/site-with-ecs-backend/main.js +437 -0
- package/dist/src/construct/site-with-ecs-backend/types.d.ts +49 -0
- package/dist/src/construct/site-with-ecs-backend/types.js +1 -0
- package/dist/src/construct/site-with-lambda-backend/constants.d.ts +5 -0
- package/dist/src/construct/site-with-lambda-backend/constants.js +6 -0
- package/dist/src/construct/site-with-lambda-backend/index.d.ts +3 -0
- package/dist/src/construct/site-with-lambda-backend/index.js +3 -0
- package/dist/src/construct/site-with-lambda-backend/main.d.ts +116 -0
- package/dist/src/construct/site-with-lambda-backend/main.js +316 -0
- package/dist/src/construct/site-with-lambda-backend/types.d.ts +45 -0
- package/dist/src/construct/site-with-lambda-backend/types.js +1 -0
- package/dist/src/construct/static-asset-deployment/index.d.ts +2 -0
- package/dist/src/construct/static-asset-deployment/index.js +2 -0
- package/dist/src/construct/static-asset-deployment/main.d.ts +41 -0
- package/dist/src/construct/static-asset-deployment/main.js +113 -0
- package/dist/src/construct/static-asset-deployment/types.d.ts +41 -0
- package/dist/src/construct/static-asset-deployment/types.js +1 -0
- package/dist/src/construct/static-site/index.d.ts +2 -0
- package/dist/src/construct/static-site/index.js +2 -0
- package/dist/src/construct/static-site/main.d.ts +84 -0
- package/dist/src/construct/static-site/main.js +136 -0
- package/dist/src/construct/static-site/types.d.ts +30 -0
- package/dist/src/construct/static-site/types.js +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +5 -0
- package/dist/src/services/api-gateway/index.d.ts +2 -0
- package/dist/src/services/api-gateway/index.js +2 -0
- package/dist/src/services/api-gateway/main.d.ts +68 -0
- package/dist/src/services/api-gateway/main.js +173 -0
- package/dist/src/services/api-gateway/types.d.ts +10 -0
- package/dist/src/services/api-gateway/types.js +1 -0
- package/dist/src/services/appconfig/constants.d.ts +12 -0
- package/dist/src/services/appconfig/constants.js +51 -0
- package/dist/src/services/appconfig/index.d.ts +3 -0
- package/dist/src/services/appconfig/index.js +3 -0
- package/dist/src/services/appconfig/main.d.ts +63 -0
- package/dist/src/services/appconfig/main.js +119 -0
- package/dist/src/services/appconfig/types.d.ts +17 -0
- package/dist/src/services/appconfig/types.js +1 -0
- package/dist/src/services/certificate-manager/index.d.ts +2 -0
- package/dist/src/services/certificate-manager/index.js +2 -0
- package/dist/src/services/certificate-manager/main.d.ts +41 -0
- package/dist/src/services/certificate-manager/main.js +62 -0
- package/dist/src/services/certificate-manager/types.d.ts +11 -0
- package/dist/src/services/certificate-manager/types.js +1 -0
- package/dist/src/services/cloudfront/index.d.ts +2 -0
- package/dist/src/services/cloudfront/index.js +2 -0
- package/dist/src/services/cloudfront/main.d.ts +96 -0
- package/dist/src/services/cloudfront/main.js +233 -0
- package/dist/src/services/cloudfront/types.d.ts +13 -0
- package/dist/src/services/cloudfront/types.js +1 -0
- package/dist/src/services/cloudtrail/index.d.ts +2 -0
- package/dist/src/services/cloudtrail/index.js +2 -0
- package/dist/src/services/cloudtrail/main.d.ts +44 -0
- package/dist/src/services/cloudtrail/main.js +71 -0
- package/dist/src/services/cloudtrail/types.d.ts +5 -0
- package/dist/src/services/cloudtrail/types.js +1 -0
- package/dist/src/services/cloudwatch/index.d.ts +3 -0
- package/dist/src/services/cloudwatch/index.js +3 -0
- package/dist/src/services/cloudwatch/logs.d.ts +47 -0
- package/dist/src/services/cloudwatch/logs.js +98 -0
- package/dist/src/services/cloudwatch/main.d.ts +207 -0
- package/dist/src/services/cloudwatch/main.js +552 -0
- package/dist/src/services/cloudwatch/types.d.ts +89 -0
- package/dist/src/services/cloudwatch/types.js +1 -0
- package/dist/src/services/codebuild/index.d.ts +1 -0
- package/dist/src/services/codebuild/index.js +1 -0
- package/dist/src/services/codebuild/main.d.ts +36 -0
- package/dist/src/services/codebuild/main.js +67 -0
- package/dist/src/services/constants.d.ts +4 -0
- package/dist/src/services/constants.js +5 -0
- package/dist/src/services/dynamodb/index.d.ts +2 -0
- package/dist/src/services/dynamodb/index.js +2 -0
- package/dist/src/services/dynamodb/main.d.ts +35 -0
- package/dist/src/services/dynamodb/main.js +72 -0
- package/dist/src/services/dynamodb/types.d.ts +10 -0
- package/dist/src/services/dynamodb/types.js +1 -0
- package/dist/src/services/elastic-container-registry/index.d.ts +1 -0
- package/dist/src/services/elastic-container-registry/index.js +1 -0
- package/dist/src/services/elastic-container-registry/main.d.ts +27 -0
- package/dist/src/services/elastic-container-registry/main.js +33 -0
- package/dist/src/services/elastic-container-service/index.d.ts +2 -0
- package/dist/src/services/elastic-container-service/index.js +2 -0
- package/dist/src/services/elastic-container-service/main.d.ts +56 -0
- package/dist/src/services/elastic-container-service/main.js +149 -0
- package/dist/src/services/elastic-container-service/types.d.ts +45 -0
- package/dist/src/services/elastic-container-service/types.js +1 -0
- package/dist/src/services/elastic-file-system/index.d.ts +2 -0
- package/dist/src/services/elastic-file-system/index.js +2 -0
- package/dist/src/services/elastic-file-system/main.d.ts +42 -0
- package/dist/src/services/elastic-file-system/main.js +76 -0
- package/dist/src/services/elastic-file-system/types.d.ts +15 -0
- package/dist/src/services/elastic-file-system/types.js +1 -0
- package/dist/src/services/elastic-kubernetes-service/index.d.ts +2 -0
- package/dist/src/services/elastic-kubernetes-service/index.js +2 -0
- package/dist/src/services/elastic-kubernetes-service/main.d.ts +32 -0
- package/dist/src/services/elastic-kubernetes-service/main.js +85 -0
- package/dist/src/services/elastic-kubernetes-service/types.d.ts +7 -0
- package/dist/src/services/elastic-kubernetes-service/types.js +1 -0
- package/dist/src/services/elasticache/index.d.ts +2 -0
- package/dist/src/services/elasticache/index.js +2 -0
- package/dist/src/services/elasticache/main.d.ts +47 -0
- package/dist/src/services/elasticache/main.js +90 -0
- package/dist/src/services/elasticache/types.d.ts +9 -0
- package/dist/src/services/elasticache/types.js +1 -0
- package/dist/src/services/eventbridge/index.d.ts +3 -0
- package/dist/src/services/eventbridge/index.js +3 -0
- package/dist/src/services/eventbridge/main.d.ts +93 -0
- package/dist/src/services/eventbridge/main.js +295 -0
- package/dist/src/services/eventbridge/target.d.ts +57 -0
- package/dist/src/services/eventbridge/target.js +61 -0
- package/dist/src/services/eventbridge/types.d.ts +43 -0
- package/dist/src/services/eventbridge/types.js +1 -0
- package/dist/src/services/evidently/index.d.ts +2 -0
- package/dist/src/services/evidently/index.js +2 -0
- package/dist/src/services/evidently/main.d.ts +56 -0
- package/dist/src/services/evidently/main.js +114 -0
- package/dist/src/services/evidently/types.d.ts +21 -0
- package/dist/src/services/evidently/types.js +1 -0
- package/dist/src/services/identity-access-management/index.d.ts +1 -0
- package/dist/src/services/identity-access-management/index.js +1 -0
- package/dist/src/services/identity-access-management/main.d.ts +263 -0
- package/dist/src/services/identity-access-management/main.js +609 -0
- package/dist/src/services/index.d.ts +28 -0
- package/dist/src/services/index.js +28 -0
- package/dist/src/services/key-management-service/index.d.ts +2 -0
- package/dist/src/services/key-management-service/index.js +2 -0
- package/dist/src/services/key-management-service/main.d.ts +28 -0
- package/dist/src/services/key-management-service/main.js +39 -0
- package/dist/src/services/key-management-service/types.d.ts +5 -0
- package/dist/src/services/key-management-service/types.js +1 -0
- package/dist/src/services/lambda/index.d.ts +2 -0
- package/dist/src/services/lambda/index.js +2 -0
- package/dist/src/services/lambda/main.d.ts +89 -0
- package/dist/src/services/lambda/main.js +232 -0
- package/dist/src/services/lambda/types.d.ts +54 -0
- package/dist/src/services/lambda/types.js +1 -0
- package/dist/src/services/route53/index.d.ts +2 -0
- package/dist/src/services/route53/index.js +2 -0
- package/dist/src/services/route53/main.d.ts +66 -0
- package/dist/src/services/route53/main.js +136 -0
- package/dist/src/services/route53/types.d.ts +6 -0
- package/dist/src/services/route53/types.js +1 -0
- package/dist/src/services/secrets-manager/index.d.ts +2 -0
- package/dist/src/services/secrets-manager/index.js +2 -0
- package/dist/src/services/secrets-manager/main.d.ts +43 -0
- package/dist/src/services/secrets-manager/main.js +71 -0
- package/dist/src/services/secrets-manager/types.d.ts +3 -0
- package/dist/src/services/secrets-manager/types.js +1 -0
- package/dist/src/services/simple-notification-service/index.d.ts +2 -0
- package/dist/src/services/simple-notification-service/index.js +2 -0
- package/dist/src/services/simple-notification-service/main.d.ts +38 -0
- package/dist/src/services/simple-notification-service/main.js +68 -0
- package/dist/src/services/simple-notification-service/types.d.ts +5 -0
- package/dist/src/services/simple-notification-service/types.js +1 -0
- package/dist/src/services/simple-queue-service/index.d.ts +2 -0
- package/dist/src/services/simple-queue-service/index.js +2 -0
- package/dist/src/services/simple-queue-service/main.d.ts +45 -0
- package/dist/src/services/simple-queue-service/main.js +101 -0
- package/dist/src/services/simple-queue-service/types.d.ts +15 -0
- package/dist/src/services/simple-queue-service/types.js +1 -0
- package/dist/src/services/simple-storage-service/index.d.ts +2 -0
- package/dist/src/services/simple-storage-service/index.js +2 -0
- package/dist/src/services/simple-storage-service/main.d.ts +79 -0
- package/dist/src/services/simple-storage-service/main.js +191 -0
- package/dist/src/services/simple-storage-service/types.d.ts +25 -0
- package/dist/src/services/simple-storage-service/types.js +1 -0
- package/dist/src/services/step-function/index.d.ts +2 -0
- package/dist/src/services/step-function/index.js +2 -0
- package/dist/src/services/step-function/main.d.ts +161 -0
- package/dist/src/services/step-function/main.js +380 -0
- package/dist/src/services/step-function/types.d.ts +88 -0
- package/dist/src/services/step-function/types.js +1 -0
- package/dist/src/services/systems-manager/index.d.ts +2 -0
- package/dist/src/services/systems-manager/index.js +2 -0
- package/dist/src/services/systems-manager/main.d.ts +55 -0
- package/dist/src/services/systems-manager/main.js +97 -0
- package/dist/src/services/systems-manager/types.d.ts +9 -0
- package/dist/src/services/systems-manager/types.js +1 -0
- package/dist/src/services/virtual-private-cloud/index.d.ts +2 -0
- package/dist/src/services/virtual-private-cloud/index.js +2 -0
- package/dist/src/services/virtual-private-cloud/ipv6.d.ts +7 -0
- package/dist/src/services/virtual-private-cloud/ipv6.js +38 -0
- package/dist/src/services/virtual-private-cloud/main.d.ts +43 -0
- package/dist/src/services/virtual-private-cloud/main.js +87 -0
- package/dist/src/services/virtual-private-cloud/types.d.ts +4 -0
- package/dist/src/services/virtual-private-cloud/types.js +1 -0
- package/dist/src/services/web-application-firewall/index.d.ts +2 -0
- package/dist/src/services/web-application-firewall/index.js +2 -0
- package/dist/src/services/web-application-firewall/main.d.ts +35 -0
- package/dist/src/services/web-application-firewall/main.js +61 -0
- package/dist/src/services/web-application-firewall/types.d.ts +9 -0
- package/dist/src/services/web-application-firewall/types.js +1 -0
- package/dist/src/types/index.d.ts +6 -0
- package/dist/src/types/index.js +1 -0
- package/dist/src/utils/index.d.ts +45 -0
- package/dist/src/utils/index.js +61 -0
- 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,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,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
|
+
}
|