@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,295 @@
|
|
|
1
|
+
import { Tags } from 'aws-cdk-lib';
|
|
2
|
+
import { CfnRule, EventBus, Rule } from 'aws-cdk-lib/aws-events';
|
|
3
|
+
import { Role } from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import { CfnPermission } from 'aws-cdk-lib/aws-lambda';
|
|
5
|
+
import { CfnPipe } from 'aws-cdk-lib/aws-pipes';
|
|
6
|
+
import _ from 'lodash';
|
|
7
|
+
import { createCfnOutput } from '../../utils/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* @classdesc Provides operations on AWS EventBridge.
|
|
10
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
11
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
12
|
+
* @example
|
|
13
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
14
|
+
*
|
|
15
|
+
* class CustomConstruct extends CommonConstruct {
|
|
16
|
+
* constructor(parent: Construct, id: string, props: common.CommonStackProps) {
|
|
17
|
+
* super(parent, id, props)
|
|
18
|
+
* this.props = props
|
|
19
|
+
* this.eventManager.createLambdaRule('MyLambdaRule', this, lambdaFunction)
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* @see [CDK EventBridge Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_events-readme.html}
|
|
23
|
+
*/
|
|
24
|
+
export class EventManager {
|
|
25
|
+
/**
|
|
26
|
+
* Method to create an event bus
|
|
27
|
+
* @param id scoped id of the resource
|
|
28
|
+
* @param scope scope in which this resource is defined
|
|
29
|
+
* @param props event bus properties
|
|
30
|
+
*/
|
|
31
|
+
createEventBus(id, scope, props) {
|
|
32
|
+
if (!props)
|
|
33
|
+
throw `EventBus props undefined for ${id}`;
|
|
34
|
+
if (!props.eventBusName)
|
|
35
|
+
throw `EventBus eventBusName undefined for ${id}`;
|
|
36
|
+
let eventBusName = props.eventBusName;
|
|
37
|
+
if (eventBusName != 'default') {
|
|
38
|
+
eventBusName = scope.resourceNameFormatter.format(props.eventBusName, scope.props.resourceNameOptions?.eventbridgeBus);
|
|
39
|
+
}
|
|
40
|
+
const eventBus = new EventBus(scope, `${id}`, {
|
|
41
|
+
...props,
|
|
42
|
+
eventBusName,
|
|
43
|
+
});
|
|
44
|
+
createCfnOutput(`${id}-eventBusName`, scope, eventBusName);
|
|
45
|
+
createCfnOutput(`${id}-eventBusArn`, scope, eventBus.eventBusArn);
|
|
46
|
+
return eventBus;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Method to create an event rule
|
|
50
|
+
* @param id scoped id of the resource
|
|
51
|
+
* @param scope scope in which this resource is defined
|
|
52
|
+
* @param props event rule properties
|
|
53
|
+
* @param eventBus optional custom event bus
|
|
54
|
+
* @param targets optional event targets
|
|
55
|
+
*/
|
|
56
|
+
createRule(id, scope, props, eventBus, targets) {
|
|
57
|
+
if (!props)
|
|
58
|
+
throw `EventRule props undefined for ${id}`;
|
|
59
|
+
if (!props.ruleName)
|
|
60
|
+
throw `EventRule ruleName undefined for ${id}`;
|
|
61
|
+
const rule = new Rule(scope, `${id}`, {
|
|
62
|
+
...props,
|
|
63
|
+
eventBus,
|
|
64
|
+
ruleName: scope.resourceNameFormatter.format(props.ruleName, scope.props.resourceNameOptions?.eventbridgeRule),
|
|
65
|
+
});
|
|
66
|
+
if (targets && !_.isEmpty(targets)) {
|
|
67
|
+
_.forEach(targets, target => {
|
|
68
|
+
rule.addTarget(target);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (props.tags && !_.isEmpty(props.tags)) {
|
|
72
|
+
_.forEach(props.tags, tag => {
|
|
73
|
+
Tags.of(rule).add(tag.key, tag.value);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
createCfnOutput(`${id}-ruleArn`, scope, rule.ruleArn);
|
|
77
|
+
createCfnOutput(`${id}-ruleName`, scope, rule.ruleName);
|
|
78
|
+
return rule;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* @summary Method to create an eventbridge rule with lambda target
|
|
82
|
+
* @param id scoped id of the resource
|
|
83
|
+
* @param scope scope in which this resource is defined
|
|
84
|
+
* @param props
|
|
85
|
+
* @param lambdaFunction
|
|
86
|
+
* @param eventBusName
|
|
87
|
+
* @param eventPattern
|
|
88
|
+
* @param scheduleExpression
|
|
89
|
+
*/
|
|
90
|
+
createLambdaRule(id, scope, props, lambdaFunction, eventBusName, eventPattern, scheduleExpression) {
|
|
91
|
+
if (!props)
|
|
92
|
+
throw `EventRule props undefined for ${id}`;
|
|
93
|
+
if (!props.name)
|
|
94
|
+
throw `EventRule name undefined for ${id}`;
|
|
95
|
+
const eventRule = new CfnRule(scope, `${id}`, {
|
|
96
|
+
...props,
|
|
97
|
+
description: 'Rule to send notification to lambda function target',
|
|
98
|
+
eventBusName,
|
|
99
|
+
eventPattern,
|
|
100
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgeRule),
|
|
101
|
+
scheduleExpression,
|
|
102
|
+
targets: [
|
|
103
|
+
{
|
|
104
|
+
arn: lambdaFunction.functionArn,
|
|
105
|
+
id: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgeRule),
|
|
106
|
+
input: props.input ?? undefined,
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
});
|
|
110
|
+
if (props.tags && !_.isEmpty(props.tags)) {
|
|
111
|
+
_.forEach(props.tags, tag => {
|
|
112
|
+
Tags.of(eventRule).add(tag.key, tag.value);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
new CfnPermission(scope, `${id}LambdaPermission`, {
|
|
116
|
+
action: 'lambda:InvokeFunction',
|
|
117
|
+
functionName: lambdaFunction.functionName,
|
|
118
|
+
principal: 'events.amazonaws.com',
|
|
119
|
+
sourceArn: eventRule.attrArn,
|
|
120
|
+
});
|
|
121
|
+
createCfnOutput(`${id}-ruleArn`, scope, eventRule.attrArn);
|
|
122
|
+
createCfnOutput(`${id}-ruleName`, scope, eventRule.name);
|
|
123
|
+
return eventRule;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* @summary Method to create an eventbridge rule with fargate task target
|
|
127
|
+
* @param id scoped id of the resource
|
|
128
|
+
* @param scope scope in which this resource is defined
|
|
129
|
+
* @param props
|
|
130
|
+
* @param cluster
|
|
131
|
+
* @param task
|
|
132
|
+
* @param subnetIds
|
|
133
|
+
* @param role
|
|
134
|
+
* @param eventPattern
|
|
135
|
+
*/
|
|
136
|
+
createFargateTaskRule(id, scope, props, cluster, task, subnetIds, role, eventPattern) {
|
|
137
|
+
if (!props)
|
|
138
|
+
throw `EventRule props undefined for ${id}`;
|
|
139
|
+
if (!props.name)
|
|
140
|
+
throw `EventRule name undefined for ${id}`;
|
|
141
|
+
const eventRule = new CfnRule(scope, `${id}`, {
|
|
142
|
+
...props,
|
|
143
|
+
description: 'Rule to send notification on new objects in data bucket to ecs task target',
|
|
144
|
+
eventPattern,
|
|
145
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgeRule),
|
|
146
|
+
targets: [
|
|
147
|
+
{
|
|
148
|
+
arn: cluster.clusterArn,
|
|
149
|
+
ecsParameters: {
|
|
150
|
+
launchType: 'FARGATE',
|
|
151
|
+
networkConfiguration: {
|
|
152
|
+
awsVpcConfiguration: { assignPublicIp: 'ENABLED', subnets: subnetIds },
|
|
153
|
+
},
|
|
154
|
+
taskCount: 1,
|
|
155
|
+
taskDefinitionArn: task.taskDefinitionArn,
|
|
156
|
+
},
|
|
157
|
+
id: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgeRule),
|
|
158
|
+
roleArn: role instanceof Role ? role.roleArn : role.attrArn,
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
});
|
|
162
|
+
createCfnOutput(`${id}-ruleArn`, scope, eventRule.attrArn);
|
|
163
|
+
createCfnOutput(`${id}-ruleName`, scope, eventRule.name);
|
|
164
|
+
return eventRule;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* @summary Method to create an eventbridge pipe with sqs queue as source and step function as target
|
|
168
|
+
* @param id scoped id of the resource
|
|
169
|
+
* @param scope scope in which this resource is defined
|
|
170
|
+
* @param props the props for the pipe
|
|
171
|
+
* @param sourceQueue the source sqs queue
|
|
172
|
+
* @param targetStepFunction the target step function
|
|
173
|
+
*/
|
|
174
|
+
createSqsToSfnCfnPipe(id, scope, props, sourceQueue, targetStepFunction) {
|
|
175
|
+
if (!props)
|
|
176
|
+
throw `Pipe props undefined for ${id}`;
|
|
177
|
+
if (!props.name)
|
|
178
|
+
throw `Pipe name undefined for ${id}`;
|
|
179
|
+
const pipeRole = scope.iamManager.createRoleForSqsToSfnPipe(`${id}-role`, scope, sourceQueue.queueArn, targetStepFunction.stateMachineArn);
|
|
180
|
+
const pipe = new CfnPipe(scope, `${id}`, {
|
|
181
|
+
...props,
|
|
182
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgePipe),
|
|
183
|
+
roleArn: pipeRole.roleArn,
|
|
184
|
+
source: sourceQueue.queueArn,
|
|
185
|
+
sourceParameters: {
|
|
186
|
+
filterCriteria: props.pipeFilterPattern
|
|
187
|
+
? {
|
|
188
|
+
filters: [
|
|
189
|
+
{
|
|
190
|
+
pattern: JSON.stringify(props.pipeFilterPattern),
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
}
|
|
194
|
+
: undefined,
|
|
195
|
+
sqsQueueParameters: {
|
|
196
|
+
batchSize: props.sqsBatchSize,
|
|
197
|
+
maximumBatchingWindowInSeconds: props.sqsMaximumBatchingWindowInSeconds,
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
target: targetStepFunction.stateMachineArn,
|
|
201
|
+
targetParameters: {
|
|
202
|
+
inputTemplate: props.sfnInputTemplate,
|
|
203
|
+
stepFunctionStateMachineParameters: {
|
|
204
|
+
invocationType: props.sfnInvocationType ?? 'FIRE_AND_FORGET',
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
createCfnOutput(`${id}-pipeArn`, scope, pipe.attrArn);
|
|
209
|
+
createCfnOutput(`${id}-pipeName`, scope, pipe.name);
|
|
210
|
+
return pipe;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* @summary Method to create an eventbridge pipe with sqs queue as source and lambda function as target
|
|
214
|
+
* @param id scoped id of the resource
|
|
215
|
+
* @param scope scope in which this resource is defined
|
|
216
|
+
* @param props the props for the pipe
|
|
217
|
+
* @param sourceQueue the source sqs queue
|
|
218
|
+
* @param targetLambdaFunction the target lambda function
|
|
219
|
+
*/
|
|
220
|
+
createSqsToLambdaCfnPipe(id, scope, props, sourceQueue, targetLambdaFunction) {
|
|
221
|
+
if (!props)
|
|
222
|
+
throw `Pipe props undefined for ${id}`;
|
|
223
|
+
if (!props.name)
|
|
224
|
+
throw `Pipe name undefined for ${id}`;
|
|
225
|
+
const pipeRole = scope.iamManager.createRoleForSqsToLambdaPipe(`${id}-role`, scope, sourceQueue.queueArn, targetLambdaFunction.functionArn);
|
|
226
|
+
const pipe = new CfnPipe(scope, `${id}`, {
|
|
227
|
+
...props,
|
|
228
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgePipe),
|
|
229
|
+
roleArn: pipeRole.roleArn,
|
|
230
|
+
source: sourceQueue.queueArn,
|
|
231
|
+
sourceParameters: {
|
|
232
|
+
filterCriteria: props.pipeFilterPattern
|
|
233
|
+
? {
|
|
234
|
+
filters: [
|
|
235
|
+
{
|
|
236
|
+
pattern: JSON.stringify(props.pipeFilterPattern),
|
|
237
|
+
},
|
|
238
|
+
],
|
|
239
|
+
}
|
|
240
|
+
: undefined,
|
|
241
|
+
sqsQueueParameters: {
|
|
242
|
+
batchSize: props.sqsBatchSize,
|
|
243
|
+
maximumBatchingWindowInSeconds: props.sqsMaximumBatchingWindowInSeconds,
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
target: targetLambdaFunction.functionArn,
|
|
247
|
+
targetParameters: {
|
|
248
|
+
inputTemplate: props.lambdaInputTemplate,
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
createCfnOutput(`${id}-pipeArn`, scope, pipe.attrArn);
|
|
252
|
+
createCfnOutput(`${id}-pipeName`, scope, pipe.name);
|
|
253
|
+
return pipe;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* @summary Method to create an eventbridge pipe with DynamoDb stream as source and lambda function as target
|
|
257
|
+
* @param id scoped id of the resource
|
|
258
|
+
* @param scope scope in which this resource is defined
|
|
259
|
+
* @param props the props for the pipe
|
|
260
|
+
* @param dynamoDbStream the source dynamoDb stream
|
|
261
|
+
* @param targetLambdaFunction the target lambda function
|
|
262
|
+
*/
|
|
263
|
+
createDynamoDbToLambdaCfnPipe(id, scope, props, sourceDynamoDbStreamArn, targetLambdaFunction) {
|
|
264
|
+
if (!props)
|
|
265
|
+
throw `Pipe props undefined for ${id}`;
|
|
266
|
+
if (!props.name)
|
|
267
|
+
throw `Pipe name undefined for ${id}`;
|
|
268
|
+
const pipeRole = scope.iamManager.createRoleForDynamoDbToLambdaPipe(`${id}-role`, scope, sourceDynamoDbStreamArn, targetLambdaFunction.functionArn);
|
|
269
|
+
const pipe = new CfnPipe(scope, `${id}`, {
|
|
270
|
+
...props,
|
|
271
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.eventbridgePipe),
|
|
272
|
+
roleArn: pipeRole.roleArn,
|
|
273
|
+
source: sourceDynamoDbStreamArn,
|
|
274
|
+
sourceParameters: {
|
|
275
|
+
filterCriteria: props.pipeFilterPattern
|
|
276
|
+
? {
|
|
277
|
+
filters: [
|
|
278
|
+
{
|
|
279
|
+
pattern: JSON.stringify(props.pipeFilterPattern),
|
|
280
|
+
},
|
|
281
|
+
],
|
|
282
|
+
}
|
|
283
|
+
: undefined,
|
|
284
|
+
dynamoDbStreamParameters: {
|
|
285
|
+
startingPosition: props.dynamoDbStartingPosition,
|
|
286
|
+
batchSize: props.dynamoDbBatchSize,
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
target: targetLambdaFunction.functionArn,
|
|
290
|
+
});
|
|
291
|
+
createCfnOutput(`${id}-pipeArn`, scope, pipe.attrArn);
|
|
292
|
+
createCfnOutput(`${id}-pipeName`, scope, pipe.name);
|
|
293
|
+
return pipe;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { IRule, IRuleTarget, RuleTargetConfig, RuleTargetInput } from 'aws-cdk-lib/aws-events';
|
|
2
|
+
import { TargetBaseProps } from 'aws-cdk-lib/aws-events-targets';
|
|
3
|
+
import { ILogGroup } from 'aws-cdk-lib/aws-logs';
|
|
4
|
+
import { CommonConstruct } from '../../common/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* @classdesc Provides operations on AWS EventBridge Targets
|
|
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: cdk.Construct, id: string, props: common.CommonStackProps) {
|
|
14
|
+
* super(parent, id, props)
|
|
15
|
+
* this.props = props
|
|
16
|
+
* this.eventTargetManager.createCloudWatchLogGroupNoPolicy('MyLogGrouptarget', this, myLogGroup)
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* @see [CDK EventBridge Target Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_events_targets-readme.html}
|
|
20
|
+
*/
|
|
21
|
+
export declare class EventTargetManager {
|
|
22
|
+
/**
|
|
23
|
+
* @summary Method to create a cloud watch log group target without a policy.
|
|
24
|
+
* - This method is created as a workaround for cdk issue - https://github.com/aws/aws-cdk/issues/17002
|
|
25
|
+
* @param id scoped id of the resource
|
|
26
|
+
* @param scope scope in which this resource is defined
|
|
27
|
+
* @param logGroup the log group
|
|
28
|
+
* @param props the log group target properties
|
|
29
|
+
*/
|
|
30
|
+
createCloudWatchLogGroupNoPolicy(id: string, scope: CommonConstruct, logGroup: ILogGroup, props?: LogGroupNoPolicyProps): CloudWatchLogGroupNoPolicy;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Customize the CloudWatch LogGroup Event Target
|
|
34
|
+
*/
|
|
35
|
+
export interface LogGroupNoPolicyProps extends TargetBaseProps {
|
|
36
|
+
/**
|
|
37
|
+
* The event to send to the CloudWatch LogGroup
|
|
38
|
+
*
|
|
39
|
+
* This will be the event logged into the CloudWatch LogGroup
|
|
40
|
+
* @default - the entire EventBridge event
|
|
41
|
+
*/
|
|
42
|
+
readonly event?: RuleTargetInput;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Use an AWS CloudWatch LogGroup as an event rule target, but don't apply a policy.
|
|
46
|
+
*/
|
|
47
|
+
export declare class CloudWatchLogGroupNoPolicy implements IRuleTarget {
|
|
48
|
+
private readonly logGroup;
|
|
49
|
+
private readonly props;
|
|
50
|
+
constructor(logGroup: ILogGroup, props?: LogGroupNoPolicyProps);
|
|
51
|
+
/**
|
|
52
|
+
* Returns a RuleTarget that can be used to log an event into a CloudWatch LogGroup
|
|
53
|
+
* @param _rule
|
|
54
|
+
* @param _id
|
|
55
|
+
*/
|
|
56
|
+
bind(_rule: IRule, _id?: string): RuleTargetConfig;
|
|
57
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ArnFormat, Stack } from 'aws-cdk-lib';
|
|
2
|
+
import { bindBaseTargetConfig } from 'aws-cdk-lib/aws-events-targets';
|
|
3
|
+
/**
|
|
4
|
+
* @classdesc Provides operations on AWS EventBridge Targets
|
|
5
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
6
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
7
|
+
* @example
|
|
8
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
9
|
+
*
|
|
10
|
+
* class CustomConstruct extends CommonConstruct {
|
|
11
|
+
* constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
|
|
12
|
+
* super(parent, id, props)
|
|
13
|
+
* this.props = props
|
|
14
|
+
* this.eventTargetManager.createCloudWatchLogGroupNoPolicy('MyLogGrouptarget', this, myLogGroup)
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* @see [CDK EventBridge Target Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_events_targets-readme.html}
|
|
18
|
+
*/
|
|
19
|
+
export class EventTargetManager {
|
|
20
|
+
/**
|
|
21
|
+
* @summary Method to create a cloud watch log group target without a policy.
|
|
22
|
+
* - This method is created as a workaround for cdk issue - https://github.com/aws/aws-cdk/issues/17002
|
|
23
|
+
* @param id scoped id of the resource
|
|
24
|
+
* @param scope scope in which this resource is defined
|
|
25
|
+
* @param logGroup the log group
|
|
26
|
+
* @param props the log group target properties
|
|
27
|
+
*/
|
|
28
|
+
createCloudWatchLogGroupNoPolicy(id, scope, logGroup, props) {
|
|
29
|
+
return new CloudWatchLogGroupNoPolicy(logGroup, props);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Use an AWS CloudWatch LogGroup as an event rule target, but don't apply a policy.
|
|
34
|
+
*/
|
|
35
|
+
export class CloudWatchLogGroupNoPolicy {
|
|
36
|
+
logGroup;
|
|
37
|
+
props;
|
|
38
|
+
constructor(logGroup, props = {}) {
|
|
39
|
+
this.logGroup = logGroup;
|
|
40
|
+
this.props = props;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns a RuleTarget that can be used to log an event into a CloudWatch LogGroup
|
|
44
|
+
* @param _rule
|
|
45
|
+
* @param _id
|
|
46
|
+
*/
|
|
47
|
+
bind(_rule, _id) {
|
|
48
|
+
const logGroupStack = Stack.of(this.logGroup);
|
|
49
|
+
return {
|
|
50
|
+
...bindBaseTargetConfig(this.props),
|
|
51
|
+
arn: logGroupStack.formatArn({
|
|
52
|
+
arnFormat: ArnFormat.COLON_RESOURCE_NAME,
|
|
53
|
+
resource: 'log-group',
|
|
54
|
+
resourceName: this.logGroup.logGroupName,
|
|
55
|
+
service: 'logs',
|
|
56
|
+
}),
|
|
57
|
+
input: this.props.event,
|
|
58
|
+
targetResource: this.logGroup,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { CfnRuleProps, EventBusProps as EBProps, RuleProps as EBRuleProps } from 'aws-cdk-lib/aws-events';
|
|
2
|
+
import { CfnPipeProps } from 'aws-cdk-lib/aws-pipes';
|
|
3
|
+
import { TagProps } from '../../types/index.js';
|
|
4
|
+
/**
|
|
5
|
+
*/
|
|
6
|
+
export interface SqsToSfnPipeProps extends CfnPipeProps {
|
|
7
|
+
pipeFilterPattern?: any;
|
|
8
|
+
sfnInputTemplate?: string;
|
|
9
|
+
sfnInvocationType?: string;
|
|
10
|
+
sqsBatchSize?: number;
|
|
11
|
+
sqsMaximumBatchingWindowInSeconds?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
*/
|
|
15
|
+
export interface SqsToLambdaPipeProps extends CfnPipeProps {
|
|
16
|
+
pipeFilterPattern?: any;
|
|
17
|
+
sqsBatchSize?: number;
|
|
18
|
+
lambdaInputTemplate?: string;
|
|
19
|
+
sqsMaximumBatchingWindowInSeconds?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
*/
|
|
23
|
+
export interface EventRuleProps extends EBRuleProps {
|
|
24
|
+
tags?: TagProps[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
*/
|
|
28
|
+
export interface RuleProps extends CfnRuleProps {
|
|
29
|
+
input?: string;
|
|
30
|
+
tags?: TagProps[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
*/
|
|
34
|
+
export interface EventBusProps extends EBProps {
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
}
|
|
38
|
+
*/
|
|
39
|
+
export interface DynamoDbToLambdaPipeProps extends CfnPipeProps {
|
|
40
|
+
pipeFilterPattern?: any;
|
|
41
|
+
dynamoDbBatchSize?: number;
|
|
42
|
+
dynamoDbStartingPosition: string;
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { CfnExperiment, CfnFeature, CfnLaunch, CfnProject, CfnSegment } from 'aws-cdk-lib/aws-evidently';
|
|
2
|
+
import { CommonConstruct } from '../../common/index.js';
|
|
3
|
+
import { EvidentlyExperimentProps, EvidentlyFeatureProps, EvidentlyLaunchProps, EvidentlyProjectProps, EvidentlySegmentProps } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* @classdesc Provides operations on AWS Evidently
|
|
6
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
7
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
8
|
+
* @example
|
|
9
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
10
|
+
*
|
|
11
|
+
* class CustomConstruct extends CommonConstruct {
|
|
12
|
+
* constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
|
|
13
|
+
* super(parent, id, props)
|
|
14
|
+
* this.props = props
|
|
15
|
+
* this.evidentlyManager.createProject('MyNewProhect', this, props)
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* @see [CDK Evidently Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_evidently-readme.html}
|
|
19
|
+
*/
|
|
20
|
+
export declare class EvidentlyManager {
|
|
21
|
+
/**
|
|
22
|
+
* @summary Method to create a project
|
|
23
|
+
* @param id scoped id of the resource
|
|
24
|
+
* @param scope scope in which this resource is defined
|
|
25
|
+
* @param props the project properties
|
|
26
|
+
*/
|
|
27
|
+
createProject(id: string, scope: CommonConstruct, props: EvidentlyProjectProps): CfnProject;
|
|
28
|
+
/**
|
|
29
|
+
* @summary Method to create a feature
|
|
30
|
+
* @param id scoped id of the resource
|
|
31
|
+
* @param scope scope in which this resource is defined
|
|
32
|
+
* @param props the feature properties
|
|
33
|
+
*/
|
|
34
|
+
createFeature(id: string, scope: CommonConstruct, props: EvidentlyFeatureProps): CfnFeature;
|
|
35
|
+
/**
|
|
36
|
+
* @summary Method to create a launch
|
|
37
|
+
* @param id scoped id of the resource
|
|
38
|
+
* @param scope scope in which this resource is defined
|
|
39
|
+
* @param props the launch properties
|
|
40
|
+
*/
|
|
41
|
+
createLaunch(id: string, scope: CommonConstruct, props: EvidentlyLaunchProps): CfnLaunch;
|
|
42
|
+
/**
|
|
43
|
+
* @summary Method to create an experiment
|
|
44
|
+
* @param id scoped id of the resource
|
|
45
|
+
* @param scope scope in which this resource is defined
|
|
46
|
+
* @param props the experiment properties
|
|
47
|
+
*/
|
|
48
|
+
createExperiment(id: string, scope: CommonConstruct, props: EvidentlyExperimentProps): CfnExperiment;
|
|
49
|
+
/**
|
|
50
|
+
* @summary Method to create a segment
|
|
51
|
+
* @param id scoped id of the resource
|
|
52
|
+
* @param scope scope in which this resource is defined
|
|
53
|
+
* @param props the segment properties
|
|
54
|
+
*/
|
|
55
|
+
createSegment(id: string, scope: CommonConstruct, props: EvidentlySegmentProps): CfnSegment;
|
|
56
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { CfnExperiment, CfnFeature, CfnLaunch, CfnProject, CfnSegment } from 'aws-cdk-lib/aws-evidently';
|
|
2
|
+
import { createCfnOutput } from '../../utils/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* @classdesc Provides operations on AWS Evidently
|
|
5
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
6
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
7
|
+
* @example
|
|
8
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
9
|
+
*
|
|
10
|
+
* class CustomConstruct extends CommonConstruct {
|
|
11
|
+
* constructor(parent: cdk.Construct, id: string, props: common.CommonStackProps) {
|
|
12
|
+
* super(parent, id, props)
|
|
13
|
+
* this.props = props
|
|
14
|
+
* this.evidentlyManager.createProject('MyNewProhect', this, props)
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* @see [CDK Evidently Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_evidently-readme.html}
|
|
18
|
+
*/
|
|
19
|
+
export class EvidentlyManager {
|
|
20
|
+
/**
|
|
21
|
+
* @summary Method to create a project
|
|
22
|
+
* @param id scoped id of the resource
|
|
23
|
+
* @param scope scope in which this resource is defined
|
|
24
|
+
* @param props the project properties
|
|
25
|
+
*/
|
|
26
|
+
createProject(id, scope, props) {
|
|
27
|
+
if (!props)
|
|
28
|
+
throw `EvidentlyProject props undefined for ${id}`;
|
|
29
|
+
if (!props.name)
|
|
30
|
+
throw `EvidentlyProject name undefined for ${id}`;
|
|
31
|
+
const project = new CfnProject(scope, `${id}`, {
|
|
32
|
+
...props,
|
|
33
|
+
description: `${props.description} ${scope.props.stage}`,
|
|
34
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.evidentlyProject),
|
|
35
|
+
});
|
|
36
|
+
createCfnOutput(`${id}-projectArn`, scope, project.attrArn);
|
|
37
|
+
createCfnOutput(`${id}-projectName`, scope, project.name);
|
|
38
|
+
return project;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @summary Method to create a feature
|
|
42
|
+
* @param id scoped id of the resource
|
|
43
|
+
* @param scope scope in which this resource is defined
|
|
44
|
+
* @param props the feature properties
|
|
45
|
+
*/
|
|
46
|
+
createFeature(id, scope, props) {
|
|
47
|
+
if (!props)
|
|
48
|
+
throw `EvidentlyFeature props undefined for ${id}`;
|
|
49
|
+
const feature = new CfnFeature(scope, `${id}`, props);
|
|
50
|
+
createCfnOutput(`${id}-featureArn`, scope, feature.attrArn);
|
|
51
|
+
createCfnOutput(`${id}-featureName`, scope, feature.name);
|
|
52
|
+
return feature;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @summary Method to create a launch
|
|
56
|
+
* @param id scoped id of the resource
|
|
57
|
+
* @param scope scope in which this resource is defined
|
|
58
|
+
* @param props the launch properties
|
|
59
|
+
*/
|
|
60
|
+
createLaunch(id, scope, props) {
|
|
61
|
+
if (!props)
|
|
62
|
+
throw `EvidentlyLaunch props undefined for ${id}`;
|
|
63
|
+
if (!props.name)
|
|
64
|
+
throw `EvidentlyLaunch name undefined for ${id}`;
|
|
65
|
+
const launch = new CfnLaunch(scope, `${id}`, {
|
|
66
|
+
...props,
|
|
67
|
+
description: `${props.description} ${scope.props.stage}`,
|
|
68
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.evidentlyLaunch),
|
|
69
|
+
});
|
|
70
|
+
createCfnOutput(`${id}-launchArn`, scope, launch.attrArn);
|
|
71
|
+
createCfnOutput(`${id}-launchName`, scope, launch.name);
|
|
72
|
+
return launch;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @summary Method to create an experiment
|
|
76
|
+
* @param id scoped id of the resource
|
|
77
|
+
* @param scope scope in which this resource is defined
|
|
78
|
+
* @param props the experiment properties
|
|
79
|
+
*/
|
|
80
|
+
createExperiment(id, scope, props) {
|
|
81
|
+
if (!props)
|
|
82
|
+
throw `EvidentlyExperiment props undefined for ${id}`;
|
|
83
|
+
if (!props.name)
|
|
84
|
+
throw `EvidentlyExperiment name undefined for ${id}`;
|
|
85
|
+
const experiment = new CfnExperiment(scope, `${id}`, {
|
|
86
|
+
...props,
|
|
87
|
+
description: `${props.description} ${scope.props.stage}`,
|
|
88
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.evidentlyExperiment),
|
|
89
|
+
});
|
|
90
|
+
createCfnOutput(`${id}-experimentArn`, scope, experiment.attrArn);
|
|
91
|
+
createCfnOutput(`${id}-experimentName`, scope, experiment.name);
|
|
92
|
+
return experiment;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @summary Method to create a segment
|
|
96
|
+
* @param id scoped id of the resource
|
|
97
|
+
* @param scope scope in which this resource is defined
|
|
98
|
+
* @param props the segment properties
|
|
99
|
+
*/
|
|
100
|
+
createSegment(id, scope, props) {
|
|
101
|
+
if (!props)
|
|
102
|
+
throw `EvidentlySegment props undefined for ${id}`;
|
|
103
|
+
if (!props.name)
|
|
104
|
+
throw `EvidentlySegment name undefined for ${id}`;
|
|
105
|
+
const segment = new CfnSegment(scope, `${id}`, {
|
|
106
|
+
...props,
|
|
107
|
+
description: `${props.description} ${scope.props.stage}`,
|
|
108
|
+
name: scope.resourceNameFormatter.format(props.name, scope.props.resourceNameOptions?.evidentlySegment),
|
|
109
|
+
});
|
|
110
|
+
createCfnOutput(`${id}-segmentArn`, scope, segment.attrArn);
|
|
111
|
+
createCfnOutput(`${id}-segmentName`, scope, segment.name);
|
|
112
|
+
return segment;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CfnExperimentProps, CfnFeatureProps, CfnLaunchProps, CfnProjectProps, CfnSegmentProps } from 'aws-cdk-lib/aws-evidently';
|
|
2
|
+
/**
|
|
3
|
+
*/
|
|
4
|
+
export interface EvidentlyProjectProps extends CfnProjectProps {
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
*/
|
|
8
|
+
export interface EvidentlyFeatureProps extends CfnFeatureProps {
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
*/
|
|
12
|
+
export interface EvidentlyLaunchProps extends CfnLaunchProps {
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
*/
|
|
16
|
+
export interface EvidentlyExperimentProps extends CfnExperimentProps {
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
*/
|
|
20
|
+
export interface EvidentlySegmentProps extends CfnSegmentProps {
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './main.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './main.js';
|