@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,380 @@
|
|
|
1
|
+
import { Duration } from 'aws-cdk-lib';
|
|
2
|
+
import { Choice, DefinitionBody, Fail, LogLevel, Map, Parallel, Pass, StateMachine, Succeed, Wait, WaitTime, } from 'aws-cdk-lib/aws-stepfunctions';
|
|
3
|
+
import { CallApiGatewayRestApiEndpoint, DynamoDeleteItem, DynamoGetItem, DynamoPutItem, LambdaInvoke, SqsSendMessage, StepFunctionsStartExecution, } from 'aws-cdk-lib/aws-stepfunctions-tasks';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
6
|
+
import { createCfnOutput } from '../../utils/index.js';
|
|
7
|
+
const DEFAULT_RETRY_CONFIG = [
|
|
8
|
+
{
|
|
9
|
+
backoffRate: 2,
|
|
10
|
+
errors: ['States.ALL'],
|
|
11
|
+
intervalInSecs: 30,
|
|
12
|
+
maxAttempts: 6,
|
|
13
|
+
},
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* @classdesc Provides operations on AWS Step Functions Service.
|
|
17
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
18
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
19
|
+
* @example
|
|
20
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
21
|
+
*
|
|
22
|
+
* class CustomConstruct extends CommonConstruct {
|
|
23
|
+
* constructor(parent: Construct, id: string, props: common.CommonStackProps) {
|
|
24
|
+
* super(parent, id, props)
|
|
25
|
+
* this.props = props
|
|
26
|
+
* this.sfnManager.createSuccessStep('MyStep', this, myStepProps)
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* @see [CDK Step Functions Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions-readme.html}
|
|
30
|
+
*/
|
|
31
|
+
export class SfnManager {
|
|
32
|
+
/**
|
|
33
|
+
* @summary Method to create a success step
|
|
34
|
+
* @param id scoped id of the resource
|
|
35
|
+
* @param scope scope in which this resource is defined
|
|
36
|
+
* @param props
|
|
37
|
+
*/
|
|
38
|
+
createSuccessStep(id, scope, props) {
|
|
39
|
+
if (!props)
|
|
40
|
+
throw `Step props undefined for ${id}`;
|
|
41
|
+
return new Succeed(scope, `${props.name}`, {
|
|
42
|
+
...props,
|
|
43
|
+
comment: `Succeed step for ${props.name} - ${scope.props.stage} stage`,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @summary Method to create a failure step
|
|
48
|
+
* @param id scoped id of the resource
|
|
49
|
+
* @param scope scope in which this resource is defined
|
|
50
|
+
* @param props
|
|
51
|
+
*/
|
|
52
|
+
createFailStep(id, scope, props) {
|
|
53
|
+
if (!props)
|
|
54
|
+
throw `Step props undefined for ${id}`;
|
|
55
|
+
return new Fail(scope, `${props.name}`, {
|
|
56
|
+
...props,
|
|
57
|
+
comment: `Fail step for ${props.name} - ${scope.props.stage} stage`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @summary Method to create a pass step
|
|
62
|
+
* @param id scoped id of the resource
|
|
63
|
+
* @param scope scope in which this resource is defined
|
|
64
|
+
* @param props
|
|
65
|
+
*/
|
|
66
|
+
createPassStep(id, scope, props) {
|
|
67
|
+
if (!props)
|
|
68
|
+
throw `Step props undefined for ${id}`;
|
|
69
|
+
return new Pass(scope, `${props.name}`, {
|
|
70
|
+
...props,
|
|
71
|
+
comment: `Pass step for ${props.name} - ${scope.props.stage} stage`,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @summary Method to create a parallel step
|
|
76
|
+
* @param id scoped id of the resource
|
|
77
|
+
* @param scope scope in which this resource is defined
|
|
78
|
+
* @param props
|
|
79
|
+
*/
|
|
80
|
+
createParallelStep(id, scope, props) {
|
|
81
|
+
if (!props)
|
|
82
|
+
throw `Step props undefined for ${id}`;
|
|
83
|
+
return new Parallel(scope, `${props.name}`, {
|
|
84
|
+
...props,
|
|
85
|
+
comment: `Parallel step for ${props.name} - ${scope.props.stage} stage`,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* @summary Method to create a choice step
|
|
90
|
+
* @param id scoped id of the resource
|
|
91
|
+
* @param scope scope in which this resource is defined
|
|
92
|
+
* @param props
|
|
93
|
+
*/
|
|
94
|
+
createChoiceStep(id, scope, props) {
|
|
95
|
+
if (!props)
|
|
96
|
+
throw `Step props undefined for ${id}`;
|
|
97
|
+
return new Choice(scope, `${props.name}`, {
|
|
98
|
+
...props,
|
|
99
|
+
comment: `Choice step for ${props.name} - ${scope.props.stage} stage`,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* @summary Method to create a wait step
|
|
104
|
+
* @param id scoped id of the resource
|
|
105
|
+
* @param scope scope in which this resource is defined
|
|
106
|
+
* @param props
|
|
107
|
+
*/
|
|
108
|
+
createWaitStep(id, scope, props) {
|
|
109
|
+
return new Wait(scope, `${props.name}`, {
|
|
110
|
+
...props,
|
|
111
|
+
comment: `Choice step for ${props.name} - ${scope.props.stage} stage`,
|
|
112
|
+
time: WaitTime.duration(Duration.seconds(props.delayInSeconds)),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* @summary Method to create a DynamoDB get item step
|
|
117
|
+
* @param id scoped id of the resource
|
|
118
|
+
* @param scope scope in which this resource is defined
|
|
119
|
+
* @param props
|
|
120
|
+
* @param table The table to get the item from
|
|
121
|
+
* @param tableKey The table key for query/scan
|
|
122
|
+
*/
|
|
123
|
+
createDynamoDbGetItemStep(id, scope, props, table, tableKey) {
|
|
124
|
+
if (!props)
|
|
125
|
+
throw `Step props undefined for ${id}`;
|
|
126
|
+
const step = new DynamoGetItem(scope, `${props.name}`, {
|
|
127
|
+
...props,
|
|
128
|
+
comment: `DynamoDB GetItem step for ${props.name} - ${scope.props.stage} stage`,
|
|
129
|
+
key: tableKey,
|
|
130
|
+
table,
|
|
131
|
+
});
|
|
132
|
+
let retries = props.retries;
|
|
133
|
+
if (!retries || retries.length === 0) {
|
|
134
|
+
retries = DEFAULT_RETRY_CONFIG;
|
|
135
|
+
}
|
|
136
|
+
_.forEach(retries, retry => {
|
|
137
|
+
step.addRetry({
|
|
138
|
+
...retry,
|
|
139
|
+
interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
return step;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* @summary Method to create a DynamoDB put item step
|
|
146
|
+
* @param id scoped id of the resource
|
|
147
|
+
* @param scope scope in which this resource is defined
|
|
148
|
+
* @param props
|
|
149
|
+
* @param table The table to put the item in
|
|
150
|
+
* @param tableItem The item to add to the table
|
|
151
|
+
*/
|
|
152
|
+
createDynamoDbPutItemStep(id, scope, props, table, tableItem) {
|
|
153
|
+
if (!props)
|
|
154
|
+
throw `Step props undefined for ${id}`;
|
|
155
|
+
const step = new DynamoPutItem(scope, `${props.name}`, {
|
|
156
|
+
...props,
|
|
157
|
+
comment: `DynamoDB PutItem step for ${props.name} - ${scope.props.stage} stage`,
|
|
158
|
+
item: tableItem,
|
|
159
|
+
table,
|
|
160
|
+
});
|
|
161
|
+
let retries = props.retries;
|
|
162
|
+
if (!retries || retries.length === 0) {
|
|
163
|
+
retries = DEFAULT_RETRY_CONFIG;
|
|
164
|
+
}
|
|
165
|
+
_.forEach(retries, retry => {
|
|
166
|
+
step.addRetry({
|
|
167
|
+
...retry,
|
|
168
|
+
...{ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval },
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
return step;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* @summary Method to create a DynamoDB delete item step
|
|
175
|
+
* @param id scoped id of the resource
|
|
176
|
+
* @param scope scope in which this resource is defined
|
|
177
|
+
* @param props
|
|
178
|
+
* @param table The table to put the item in
|
|
179
|
+
* @param tableKey The table key for query/scan
|
|
180
|
+
*/
|
|
181
|
+
createDynamoDbDeleteItemStep(id, scope, props, table, tableKey) {
|
|
182
|
+
if (!props)
|
|
183
|
+
throw `Step props undefined for ${id}`;
|
|
184
|
+
const step = new DynamoDeleteItem(scope, `${props.name}`, {
|
|
185
|
+
...props,
|
|
186
|
+
comment: `DynamoDB DeleteItem step for ${props.name} - ${scope.props.stage} stage`,
|
|
187
|
+
key: tableKey,
|
|
188
|
+
table,
|
|
189
|
+
});
|
|
190
|
+
let retries = props.retries;
|
|
191
|
+
if (!retries || retries.length === 0) {
|
|
192
|
+
retries = DEFAULT_RETRY_CONFIG;
|
|
193
|
+
}
|
|
194
|
+
_.forEach(retries, retry => {
|
|
195
|
+
step.addRetry({
|
|
196
|
+
...retry,
|
|
197
|
+
...{ interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval },
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
return step;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* @summary Method to send a message to SQS step
|
|
204
|
+
* @param id scoped id of the resource
|
|
205
|
+
* @param scope scope in which this resource is defined
|
|
206
|
+
* @param props
|
|
207
|
+
* @param queue The queue to send the message to
|
|
208
|
+
*/
|
|
209
|
+
createSendSqsMessageStep(id, scope, props, queue) {
|
|
210
|
+
if (!props)
|
|
211
|
+
throw `Step props undefined for ${id}`;
|
|
212
|
+
if (!props.messageBody)
|
|
213
|
+
throw 'Message body undefined';
|
|
214
|
+
const step = new SqsSendMessage(scope, `${props.name}`, {
|
|
215
|
+
...props,
|
|
216
|
+
comment: `DynamoDB PutItem step for ${props.name} - ${scope.props.stage} stage`,
|
|
217
|
+
queue,
|
|
218
|
+
});
|
|
219
|
+
let retries = props.retries;
|
|
220
|
+
if (!retries || retries.length === 0) {
|
|
221
|
+
retries = DEFAULT_RETRY_CONFIG;
|
|
222
|
+
}
|
|
223
|
+
_.forEach(retries, retry => {
|
|
224
|
+
step.addRetry({
|
|
225
|
+
...retry,
|
|
226
|
+
interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
return step;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* @summary Method to create a lambda invoke step
|
|
233
|
+
* @param id scoped id of the resource
|
|
234
|
+
* @param scope scope in which this resource is defined
|
|
235
|
+
* @param props
|
|
236
|
+
* @param lambdaFunction
|
|
237
|
+
*/
|
|
238
|
+
createLambdaStep(id, scope, props, lambdaFunction) {
|
|
239
|
+
if (!props)
|
|
240
|
+
throw `Step props undefined for ${id}`;
|
|
241
|
+
const step = new LambdaInvoke(scope, `${props.name}`, {
|
|
242
|
+
...props,
|
|
243
|
+
comment: `Lambda step for ${props.name} - ${scope.props.stage} stage`,
|
|
244
|
+
lambdaFunction,
|
|
245
|
+
});
|
|
246
|
+
let retries = props.retries;
|
|
247
|
+
if (!retries || retries.length === 0) {
|
|
248
|
+
retries = DEFAULT_RETRY_CONFIG;
|
|
249
|
+
}
|
|
250
|
+
_.forEach(retries, retry => {
|
|
251
|
+
step.addRetry({
|
|
252
|
+
...retry,
|
|
253
|
+
interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
return step;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* @summary Method to create a lambda invoke step
|
|
260
|
+
* @param id scoped id of the resource
|
|
261
|
+
* @param scope scope in which this resource is defined
|
|
262
|
+
* @param props
|
|
263
|
+
* @param lambdaFunction
|
|
264
|
+
* @param skipExecution
|
|
265
|
+
*/
|
|
266
|
+
createSkippableLambdaStep(id, scope, props, lambdaFunction, skipExecution) {
|
|
267
|
+
if (!props)
|
|
268
|
+
throw `Step props undefined for ${id}`;
|
|
269
|
+
if (skipExecution)
|
|
270
|
+
return this.createPassStep(id, scope, { comment: props.comment, name: props.name });
|
|
271
|
+
const step = new LambdaInvoke(scope, `${props.name}`, {
|
|
272
|
+
...props,
|
|
273
|
+
comment: `Lambda step for ${props.name} - ${scope.props.stage} stage`,
|
|
274
|
+
lambdaFunction,
|
|
275
|
+
});
|
|
276
|
+
let retries = props.retries;
|
|
277
|
+
if (!retries || retries.length === 0) {
|
|
278
|
+
retries = DEFAULT_RETRY_CONFIG;
|
|
279
|
+
}
|
|
280
|
+
_.forEach(retries, retry => {
|
|
281
|
+
step.addRetry({
|
|
282
|
+
...retry,
|
|
283
|
+
interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
return step;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* @summary Method to create a API Gateway invoke step
|
|
290
|
+
* @param id scoped id of the resource
|
|
291
|
+
* @param scope scope in which this resource is defined
|
|
292
|
+
* @param props
|
|
293
|
+
* @param api
|
|
294
|
+
*/
|
|
295
|
+
createApiStep(id, scope, props, api) {
|
|
296
|
+
if (!props)
|
|
297
|
+
throw `Step props undefined for ${id}`;
|
|
298
|
+
const step = new CallApiGatewayRestApiEndpoint(scope, `${props.name}`, {
|
|
299
|
+
...props,
|
|
300
|
+
api,
|
|
301
|
+
comment: `API step for ${props.name} - ${scope.props.stage} stage`,
|
|
302
|
+
stageName: scope.props.stage,
|
|
303
|
+
});
|
|
304
|
+
let retries = props.retries;
|
|
305
|
+
if (!retries || retries.length === 0) {
|
|
306
|
+
retries = DEFAULT_RETRY_CONFIG;
|
|
307
|
+
}
|
|
308
|
+
_.forEach(retries, retry => {
|
|
309
|
+
step.addRetry({
|
|
310
|
+
...retry,
|
|
311
|
+
interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
return step;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* @summary Method to create a step function execution step
|
|
318
|
+
* @param id scoped id of the resource
|
|
319
|
+
* @param scope scope in which this resource is defined
|
|
320
|
+
* @param props props for the step
|
|
321
|
+
* @param stateMachine the state machine to execute
|
|
322
|
+
*/
|
|
323
|
+
createSfnExecutionStep(id, scope, props, stateMachine) {
|
|
324
|
+
const step = new StepFunctionsStartExecution(scope, `${id}`, {
|
|
325
|
+
...props,
|
|
326
|
+
associateWithParent: props.associateWithParent ?? true,
|
|
327
|
+
name: props.name ?? uuidv4(),
|
|
328
|
+
stateMachine,
|
|
329
|
+
});
|
|
330
|
+
let retries = props.retries;
|
|
331
|
+
if (!retries || retries.length === 0) {
|
|
332
|
+
retries = DEFAULT_RETRY_CONFIG;
|
|
333
|
+
}
|
|
334
|
+
_.forEach(retries, retry => {
|
|
335
|
+
step.addRetry({
|
|
336
|
+
...retry,
|
|
337
|
+
interval: retry.intervalInSecs ? Duration.seconds(retry.intervalInSecs) : retry.interval,
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
return step;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* @summary Method to create a step function map state
|
|
344
|
+
* @param id scoped id of the resource
|
|
345
|
+
* @param scope scope in which this resource is defined
|
|
346
|
+
* @param props props for the map state
|
|
347
|
+
*/
|
|
348
|
+
createMapState(id, scope, props) {
|
|
349
|
+
return new Map(scope, `${id}`, props);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* @summary Method to create a state machine
|
|
353
|
+
* @param id scoped id of the resource
|
|
354
|
+
* @param scope scope in which this resource is defined
|
|
355
|
+
* @param props
|
|
356
|
+
* @param definition
|
|
357
|
+
* @param logGroup
|
|
358
|
+
* @param role
|
|
359
|
+
*/
|
|
360
|
+
createStateMachine(id, scope, props, definition, logGroup, role) {
|
|
361
|
+
if (!props)
|
|
362
|
+
throw `State Machine props undefined for ${id}`;
|
|
363
|
+
if (!props.stateMachineName)
|
|
364
|
+
throw `State Machine stateMachineName undefined for ${id}`;
|
|
365
|
+
const stateMachine = new StateMachine(scope, `${id}`, {
|
|
366
|
+
...props,
|
|
367
|
+
definitionBody: DefinitionBody.fromChainable(definition),
|
|
368
|
+
logs: {
|
|
369
|
+
destination: logGroup,
|
|
370
|
+
includeExecutionData: props.logs?.includeExecutionData ?? true,
|
|
371
|
+
level: props.logs?.level ?? LogLevel.ALL,
|
|
372
|
+
},
|
|
373
|
+
role,
|
|
374
|
+
stateMachineName: scope.resourceNameFormatter.format(props.stateMachineName, scope.props.resourceNameOptions?.stepFunction),
|
|
375
|
+
});
|
|
376
|
+
createCfnOutput(`${id}-stateMachineName`, scope, stateMachine.stateMachineName);
|
|
377
|
+
createCfnOutput(`${id}-stateMachineArn`, scope, stateMachine.stateMachineArn);
|
|
378
|
+
return stateMachine;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ChoiceProps, FailProps, MapProps, ParallelProps, PassProps, RetryProps, StateMachineProps, SucceedProps, WaitProps } from 'aws-cdk-lib/aws-stepfunctions';
|
|
2
|
+
import { CallApiGatewayRestApiEndpointProps, DynamoDeleteItemProps, DynamoGetItemProps, DynamoPutItemProps, LambdaInvokeProps, SqsSendMessageProps, StepFunctionsStartExecutionProps } from 'aws-cdk-lib/aws-stepfunctions-tasks';
|
|
3
|
+
/**
|
|
4
|
+
*/
|
|
5
|
+
export interface SfnSucceedProps extends SucceedProps {
|
|
6
|
+
name: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
*/
|
|
10
|
+
export interface SfnRetryProps extends RetryProps {
|
|
11
|
+
intervalInSecs: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
*/
|
|
15
|
+
export interface SfnFailProps extends FailProps {
|
|
16
|
+
name: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
*/
|
|
20
|
+
export interface SfnPassProps extends PassProps {
|
|
21
|
+
name: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
*/
|
|
25
|
+
export interface SfnDynamoGetItemProps extends DynamoGetItemProps {
|
|
26
|
+
name: string;
|
|
27
|
+
retries?: SfnRetryProps[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
*/
|
|
31
|
+
export interface SfnDynamoPutItemProps extends DynamoPutItemProps {
|
|
32
|
+
name: string;
|
|
33
|
+
retries?: SfnRetryProps[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
*/
|
|
37
|
+
export interface SfnDynamoDeleteItemProps extends DynamoDeleteItemProps {
|
|
38
|
+
name: string;
|
|
39
|
+
retries?: SfnRetryProps[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
*/
|
|
43
|
+
export interface SfnSqsSendMessageProps extends SqsSendMessageProps {
|
|
44
|
+
name: string;
|
|
45
|
+
retries?: SfnRetryProps[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
*/
|
|
49
|
+
export interface SfnParallelProps extends ParallelProps {
|
|
50
|
+
name: string;
|
|
51
|
+
retries?: SfnRetryProps[];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
*/
|
|
55
|
+
export interface SfnChoiceProps extends ChoiceProps {
|
|
56
|
+
name: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
*/
|
|
60
|
+
export interface SfnWaitProps extends WaitProps {
|
|
61
|
+
name: string;
|
|
62
|
+
delayInSeconds: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
*/
|
|
66
|
+
export interface SfnLambdaInvokeProps extends LambdaInvokeProps {
|
|
67
|
+
name: string;
|
|
68
|
+
retries?: SfnRetryProps[];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
*/
|
|
72
|
+
export interface SfnCallApiGatewayRestApiEndpointProps extends CallApiGatewayRestApiEndpointProps {
|
|
73
|
+
name: string;
|
|
74
|
+
retries?: SfnRetryProps[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
*/
|
|
78
|
+
export interface SfnStateMachineProps extends StateMachineProps {
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
*/
|
|
82
|
+
export interface SfnMapProps extends MapProps {
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
*/
|
|
86
|
+
export interface SfnStartExecutionProps extends StepFunctionsStartExecutionProps {
|
|
87
|
+
retries?: SfnRetryProps[];
|
|
88
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { StringParameter } from 'aws-cdk-lib/aws-ssm';
|
|
2
|
+
import { AwsCustomResource } from 'aws-cdk-lib/custom-resources';
|
|
3
|
+
import { CommonConstruct } from '../../common/index.js';
|
|
4
|
+
import { SSMParameterReaderProps, SSMStringParameterProps } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* @classdesc Provides operations on AWS Systems Manager.
|
|
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.acmManager.writeStringToParameters('MyParameter', this, ...props)
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* @see [CDK Systems Manager Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm-readme.html}
|
|
20
|
+
*/
|
|
21
|
+
export declare class SsmManager {
|
|
22
|
+
static SECRETS_MODIFIED_TIMESTAMP_PARAM: string;
|
|
23
|
+
/**
|
|
24
|
+
* Method to write a string parameter to the parameters store
|
|
25
|
+
* @param id scoped id of the resource
|
|
26
|
+
* @param scope scope in which this resource is defined
|
|
27
|
+
* @param props parameter props
|
|
28
|
+
*/
|
|
29
|
+
writeStringToParameters(id: string, scope: CommonConstruct, props: SSMStringParameterProps): StringParameter;
|
|
30
|
+
/**
|
|
31
|
+
* Method to read a string parameter from the parameters store
|
|
32
|
+
* @param id scoped id of the resource
|
|
33
|
+
* @param scope scope in which this resource is defined
|
|
34
|
+
* @param parameterName parameter name to lookup
|
|
35
|
+
*/
|
|
36
|
+
readStringParameter(id: string, scope: CommonConstruct, parameterName: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Method to read a string parameter from the parameters store in a given region
|
|
39
|
+
* @param id scoped id of the resource
|
|
40
|
+
* @param scope scope in which this resource is defined
|
|
41
|
+
* @param parameterName parameter name to lookup
|
|
42
|
+
* @param region region name to lookup parameter
|
|
43
|
+
*/
|
|
44
|
+
readStringParameterFromRegion(id: string, scope: CommonConstruct, parameterName: string, region: string): string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @classdesc Provides utilities to read same/cross region SSM parameters
|
|
48
|
+
*/
|
|
49
|
+
export declare class SSMParameterReader extends AwsCustomResource {
|
|
50
|
+
constructor(scope: CommonConstruct, name: string, props: SSMParameterReaderProps);
|
|
51
|
+
/**
|
|
52
|
+
*
|
|
53
|
+
*/
|
|
54
|
+
getParameterValue(): string;
|
|
55
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { StringParameter } from 'aws-cdk-lib/aws-ssm';
|
|
2
|
+
import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId, } from 'aws-cdk-lib/custom-resources';
|
|
3
|
+
import { createCfnOutput } from '../../utils/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* @classdesc Provides operations on AWS Systems Manager.
|
|
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.acmManager.writeStringToParameters('MyParameter', this, ...props)
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* @see [CDK Systems Manager Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm-readme.html}
|
|
19
|
+
*/
|
|
20
|
+
export class SsmManager {
|
|
21
|
+
static SECRETS_MODIFIED_TIMESTAMP_PARAM = 'secrets-last-modified-timestamp';
|
|
22
|
+
/**
|
|
23
|
+
* Method to write a string parameter to the parameters store
|
|
24
|
+
* @param id scoped id of the resource
|
|
25
|
+
* @param scope scope in which this resource is defined
|
|
26
|
+
* @param props parameter props
|
|
27
|
+
*/
|
|
28
|
+
writeStringToParameters(id, scope, props) {
|
|
29
|
+
if (!props)
|
|
30
|
+
throw `Parameter props undefined for ${id}`;
|
|
31
|
+
if (!props.parameterName)
|
|
32
|
+
throw `Parameter parameterName undefined for ${id}`;
|
|
33
|
+
const parameter = new StringParameter(scope, `${id}`, {
|
|
34
|
+
...props,
|
|
35
|
+
description: `${props.description} - ${scope.props.stage} stage`,
|
|
36
|
+
parameterName: scope.resourceNameFormatter.format(props.parameterName, scope.props.resourceNameOptions?.ssm),
|
|
37
|
+
});
|
|
38
|
+
createCfnOutput(`${id}-parameterArn`, scope, parameter.parameterArn);
|
|
39
|
+
createCfnOutput(`${id}-parameterName`, scope, parameter.parameterName);
|
|
40
|
+
return parameter;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Method to read a string parameter from the parameters store
|
|
44
|
+
* @param id scoped id of the resource
|
|
45
|
+
* @param scope scope in which this resource is defined
|
|
46
|
+
* @param parameterName parameter name to lookup
|
|
47
|
+
*/
|
|
48
|
+
readStringParameter(id, scope, parameterName) {
|
|
49
|
+
if (!parameterName || parameterName == '')
|
|
50
|
+
throw 'Invalid parameter name';
|
|
51
|
+
return StringParameter.valueFromLookup(scope, scope.resourceNameFormatter.format(parameterName, scope.props.resourceNameOptions?.ssm));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Method to read a string parameter from the parameters store in a given region
|
|
55
|
+
* @param id scoped id of the resource
|
|
56
|
+
* @param scope scope in which this resource is defined
|
|
57
|
+
* @param parameterName parameter name to lookup
|
|
58
|
+
* @param region region name to lookup parameter
|
|
59
|
+
*/
|
|
60
|
+
readStringParameterFromRegion(id, scope, parameterName, region) {
|
|
61
|
+
if (!parameterName || parameterName == '')
|
|
62
|
+
throw `Invalid parameter name for ${id}`;
|
|
63
|
+
if (!region || region == '')
|
|
64
|
+
throw `Invalid region for ${id}`;
|
|
65
|
+
return new SSMParameterReader(scope, `${id}`, {
|
|
66
|
+
parameterName: scope.resourceNameFormatter.format(parameterName, scope.props.resourceNameOptions?.ssm),
|
|
67
|
+
region,
|
|
68
|
+
}).getParameterValue();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @classdesc Provides utilities to read same/cross region SSM parameters
|
|
73
|
+
*/
|
|
74
|
+
export class SSMParameterReader extends AwsCustomResource {
|
|
75
|
+
constructor(scope, name, props) {
|
|
76
|
+
const { parameterName, region } = props;
|
|
77
|
+
const ssmAwsSdkCall = {
|
|
78
|
+
action: 'getParameter',
|
|
79
|
+
parameters: {
|
|
80
|
+
Name: parameterName,
|
|
81
|
+
},
|
|
82
|
+
physicalResourceId: PhysicalResourceId.of(Date.now().toString()),
|
|
83
|
+
region,
|
|
84
|
+
service: 'SSM',
|
|
85
|
+
};
|
|
86
|
+
super(scope, name, {
|
|
87
|
+
onUpdate: ssmAwsSdkCall,
|
|
88
|
+
policy: AwsCustomResourcePolicy.fromSdkCalls({ resources: AwsCustomResourcePolicy.ANY_RESOURCE }),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
*
|
|
93
|
+
*/
|
|
94
|
+
getParameterValue() {
|
|
95
|
+
return this.getResponseField('Parameter.Value');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Vpc } from 'aws-cdk-lib/aws-ec2';
|
|
2
|
+
import { CommonConstruct } from '../../common/index.js';
|
|
3
|
+
import { VpcProps } from './types.js';
|
|
4
|
+
export declare class Ipv6Vpc extends Vpc {
|
|
5
|
+
egressOnlyInternetGatewayId: string;
|
|
6
|
+
constructor(scope: CommonConstruct, id: string, props: VpcProps);
|
|
7
|
+
}
|