@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,191 @@
|
|
|
1
|
+
import { Duration, RemovalPolicy, Stack, Tags } from 'aws-cdk-lib';
|
|
2
|
+
import { Effect, PolicyDocument, PolicyStatement, ServicePrincipal } from 'aws-cdk-lib/aws-iam';
|
|
3
|
+
import { BlockPublicAccess, Bucket, BucketEncryption, CfnBucketPolicy } from 'aws-cdk-lib/aws-s3';
|
|
4
|
+
import { BucketDeployment, ServerSideEncryption, Source } from 'aws-cdk-lib/aws-s3-deployment';
|
|
5
|
+
import _ from 'lodash';
|
|
6
|
+
import { createCfnOutput } from '../../utils/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* @classdesc Provides operations on AWS S3
|
|
9
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
10
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
11
|
+
* @example
|
|
12
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
13
|
+
*
|
|
14
|
+
* class CustomConstruct extends CommonConstruct {
|
|
15
|
+
* constructor(parent: Construct, id: string, props: common.CommonStackProps) {
|
|
16
|
+
* super(parent, id, props)
|
|
17
|
+
* this.props = props
|
|
18
|
+
* this.s3Manager.createS3Bucket('MyBucket', this)
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* @see [CDK S3 Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3-readme.html}
|
|
22
|
+
*/
|
|
23
|
+
export class S3Manager {
|
|
24
|
+
/**
|
|
25
|
+
* @summary Method to determine S3 Bucket lifecycle properties
|
|
26
|
+
* @param props bucket properties
|
|
27
|
+
*/
|
|
28
|
+
determineBucketLifecycleRules(props) {
|
|
29
|
+
if (!props.lifecycleRules)
|
|
30
|
+
return undefined;
|
|
31
|
+
const bucketLifecycleRules = [];
|
|
32
|
+
_.forEach(props.lifecycleRules, lifecycleRule => {
|
|
33
|
+
bucketLifecycleRules.push({
|
|
34
|
+
...lifecycleRule,
|
|
35
|
+
expiration: lifecycleRule.expirationInDays ? Duration.days(lifecycleRule.expirationInDays) : undefined,
|
|
36
|
+
noncurrentVersionExpiration: lifecycleRule.noncurrentVersionExpirationInDays
|
|
37
|
+
? Duration.days(lifecycleRule.noncurrentVersionExpirationInDays)
|
|
38
|
+
: undefined,
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
return bucketLifecycleRules;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* @summary Method to determine the bucket name using account and region
|
|
45
|
+
* @param scope scope in which this resource is defined
|
|
46
|
+
* @param bucketName the bucket name
|
|
47
|
+
*/
|
|
48
|
+
static determineBucketNameByAccountAndRegion(scope, bucketName) {
|
|
49
|
+
return `${bucketName}-${Stack.of(scope).account}-${scope.props.region}-${scope.props.stage}`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @summary Method to determine the bucket name using domain name
|
|
53
|
+
* @param scope scope in which this resource is defined
|
|
54
|
+
* @param bucketName the bucket name
|
|
55
|
+
*/
|
|
56
|
+
static determineBucketNameByDomainName(scope, bucketName) {
|
|
57
|
+
return scope.isProductionStage()
|
|
58
|
+
? `${bucketName}.${scope.fullyQualifiedDomainName}`
|
|
59
|
+
: `${bucketName}-${scope.props.stage}.${scope.fullyQualifiedDomainName}`;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @summary Method to determine the bucket name
|
|
63
|
+
* @param scope scope in which this resource is defined
|
|
64
|
+
* @param bucketName the bucket name
|
|
65
|
+
*/
|
|
66
|
+
static determineBucketName(scope, props, bucketName) {
|
|
67
|
+
if (!scope.props.excludeDomainNameForBuckets) {
|
|
68
|
+
return S3Manager.determineBucketNameByDomainName(scope, bucketName);
|
|
69
|
+
}
|
|
70
|
+
if (!scope.props.excludeAccountNumberForBuckets) {
|
|
71
|
+
return S3Manager.determineBucketNameByAccountAndRegion(scope, bucketName);
|
|
72
|
+
}
|
|
73
|
+
return scope.resourceNameFormatter.format(bucketName, scope.props.resourceNameOptions?.s3);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @summary Method to create a s3 bucket
|
|
77
|
+
* @param id scoped id of the resource
|
|
78
|
+
* @param scope scope in which this resource is defined
|
|
79
|
+
* @param props bucket properties
|
|
80
|
+
*/
|
|
81
|
+
createS3Bucket(id, scope, props) {
|
|
82
|
+
if (!props)
|
|
83
|
+
throw `S3 props undefined for ${id}`;
|
|
84
|
+
let bucket;
|
|
85
|
+
const bucketName = S3Manager.determineBucketName(scope, props, props.bucketName);
|
|
86
|
+
if (props.existingBucket && props.bucketName) {
|
|
87
|
+
bucket = Bucket.fromBucketName(scope, `${id}`, S3Manager.determineBucketName(scope, props, props.bucketName));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
let logBucket;
|
|
91
|
+
if (props.logBucketName) {
|
|
92
|
+
logBucket = Bucket.fromBucketName(scope, `${id}-logs`, S3Manager.determineBucketName(scope, props, props.logBucketName));
|
|
93
|
+
}
|
|
94
|
+
bucket = new Bucket(scope, `${id}-bucket`, {
|
|
95
|
+
...props,
|
|
96
|
+
blockPublicAccess: props.blockPublicAccess || BlockPublicAccess.BLOCK_ALL,
|
|
97
|
+
bucketName,
|
|
98
|
+
encryption: props.encryption || BucketEncryption.S3_MANAGED,
|
|
99
|
+
lifecycleRules: this.determineBucketLifecycleRules(props),
|
|
100
|
+
removalPolicy: props.removalPolicy || RemovalPolicy.RETAIN,
|
|
101
|
+
serverAccessLogsBucket: logBucket,
|
|
102
|
+
});
|
|
103
|
+
const cfnBucket = bucket.node.defaultChild;
|
|
104
|
+
cfnBucket.notificationConfiguration = {
|
|
105
|
+
eventBridgeConfiguration: {
|
|
106
|
+
eventBridgeEnabled: props.enableEventBridge ?? false,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (props.tags && !_.isEmpty(props.tags)) {
|
|
111
|
+
_.forEach(props.tags, tag => {
|
|
112
|
+
Tags.of(bucket).add(tag.key, tag.value);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
createCfnOutput(`${id}-bucketName`, scope, bucket.bucketName);
|
|
116
|
+
createCfnOutput(`${id}-bucketArn`, scope, bucket.bucketArn);
|
|
117
|
+
return bucket;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @summary Method to create an iam bucket policy for cloudtrail
|
|
121
|
+
* @param id scoped id of the resource
|
|
122
|
+
* @param scope scope in which this resource is defined
|
|
123
|
+
* @param bucket
|
|
124
|
+
*/
|
|
125
|
+
createBucketPolicyForCloudTrail(id, scope, bucket) {
|
|
126
|
+
const bucketPolicyDocument = new PolicyDocument({
|
|
127
|
+
statements: [
|
|
128
|
+
new PolicyStatement({
|
|
129
|
+
actions: ['s3:GetBucketAcl'],
|
|
130
|
+
effect: Effect.ALLOW,
|
|
131
|
+
principals: [new ServicePrincipal('cloudtrail.amazonaws.com')],
|
|
132
|
+
resources: [bucket.bucketArn],
|
|
133
|
+
sid: 'AWSCloudTrailAclCheck20150319',
|
|
134
|
+
}),
|
|
135
|
+
new PolicyStatement({
|
|
136
|
+
actions: ['s3:PutObject'],
|
|
137
|
+
effect: Effect.ALLOW,
|
|
138
|
+
principals: [new ServicePrincipal('cloudtrail.amazonaws.com')],
|
|
139
|
+
resources: [bucket.arnForObjects('*')],
|
|
140
|
+
sid: 'AWSCloudTrailWrite20150319',
|
|
141
|
+
}),
|
|
142
|
+
],
|
|
143
|
+
});
|
|
144
|
+
return new CfnBucketPolicy(scope, `${id}`, {
|
|
145
|
+
bucket: bucket.bucketName,
|
|
146
|
+
policyDocument: bucketPolicyDocument,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* @summary Method to create a s3 bucket deployment
|
|
151
|
+
* @param id scoped id of the resource
|
|
152
|
+
* @param scope scope in which this resource is defined
|
|
153
|
+
* @param siteBucket
|
|
154
|
+
* @param distribution
|
|
155
|
+
* @param sources
|
|
156
|
+
* @param prefix
|
|
157
|
+
* @param prune
|
|
158
|
+
*/
|
|
159
|
+
doBucketDeployment(id, scope, siteBucket, distribution, sources, prefix, prune) {
|
|
160
|
+
new BucketDeployment(scope, `${id}`, {
|
|
161
|
+
destinationBucket: siteBucket,
|
|
162
|
+
destinationKeyPrefix: prefix,
|
|
163
|
+
distribution: distribution,
|
|
164
|
+
distributionPaths: ['/*'],
|
|
165
|
+
memoryLimit: 1024,
|
|
166
|
+
prune: !!prune,
|
|
167
|
+
serverSideEncryption: ServerSideEncryption.AES_256,
|
|
168
|
+
sources: sources,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
*
|
|
173
|
+
* @param id scoped id of the resource
|
|
174
|
+
* @param scope scope in which this resource is defined
|
|
175
|
+
* @param bucket bucket to create the folders in
|
|
176
|
+
* @param folders list of folder names to be created in the bucket
|
|
177
|
+
*/
|
|
178
|
+
createBucketFolders(id, scope, bucket, folders) {
|
|
179
|
+
if (!folders || folders.length == 0) {
|
|
180
|
+
throw `Folder unspecified for ${id}`;
|
|
181
|
+
}
|
|
182
|
+
_.forEach(folders, folder => {
|
|
183
|
+
new BucketDeployment(scope, `${id}-${folder}`, {
|
|
184
|
+
destinationBucket: bucket,
|
|
185
|
+
destinationKeyPrefix: folder,
|
|
186
|
+
prune: false,
|
|
187
|
+
sources: [Source.data('README.md', `This is the ${folder} folder for ${id}`)],
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as s3 from 'aws-cdk-lib/aws-s3';
|
|
2
|
+
import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment';
|
|
3
|
+
import { TagProps } from '../../types/index.js';
|
|
4
|
+
/**
|
|
5
|
+
*/
|
|
6
|
+
export interface LifecycleRule extends s3.LifecycleRule {
|
|
7
|
+
expirationInDays?: number;
|
|
8
|
+
noncurrentVersionExpirationInDays?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
*/
|
|
12
|
+
export interface BucketDeploymentProps extends s3deploy.BucketDeploymentProps {
|
|
13
|
+
expirationInDays?: number;
|
|
14
|
+
noncurrentVersionExpirationInDays?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
*/
|
|
18
|
+
export interface S3BucketProps extends s3.BucketProps {
|
|
19
|
+
bucketName: string;
|
|
20
|
+
enableEventBridge?: boolean;
|
|
21
|
+
existingBucket?: boolean;
|
|
22
|
+
lifecycleRules?: LifecycleRule[];
|
|
23
|
+
logBucketName?: string;
|
|
24
|
+
tags?: TagProps[];
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { IRestApi } from 'aws-cdk-lib/aws-apigateway';
|
|
2
|
+
import { ITable } from 'aws-cdk-lib/aws-dynamodb';
|
|
3
|
+
import { IRole } from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import { IFunction } from 'aws-cdk-lib/aws-lambda';
|
|
5
|
+
import { ILogGroup } from 'aws-cdk-lib/aws-logs';
|
|
6
|
+
import { IQueue } from 'aws-cdk-lib/aws-sqs';
|
|
7
|
+
import { Choice, Fail, IChainable, IStateMachine, Map, Parallel, Pass, StateMachine, Succeed, Wait } from 'aws-cdk-lib/aws-stepfunctions';
|
|
8
|
+
import { CallApiGatewayRestApiEndpoint, DynamoAttributeValue, DynamoDeleteItem, DynamoGetItem, DynamoPutItem, LambdaInvoke, SqsSendMessage, StepFunctionsStartExecution } from 'aws-cdk-lib/aws-stepfunctions-tasks';
|
|
9
|
+
import { CommonConstruct } from '../../common/index.js';
|
|
10
|
+
import { SfnCallApiGatewayRestApiEndpointProps, SfnChoiceProps, SfnDynamoDeleteItemProps, SfnDynamoGetItemProps, SfnDynamoPutItemProps, SfnFailProps, SfnLambdaInvokeProps, SfnMapProps, SfnParallelProps, SfnPassProps, SfnSqsSendMessageProps, SfnStartExecutionProps, SfnStateMachineProps, SfnSucceedProps, SfnWaitProps } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* @classdesc Provides operations on AWS Step Functions Service.
|
|
13
|
+
* - A new instance of this class is injected into {@link CommonConstruct} constructor.
|
|
14
|
+
* - If a custom construct extends {@link CommonConstruct}, an instance is available within the context.
|
|
15
|
+
* @example
|
|
16
|
+
* import { CommonConstruct } from '@gradientedge/cdk-utils'
|
|
17
|
+
*
|
|
18
|
+
* class CustomConstruct extends CommonConstruct {
|
|
19
|
+
* constructor(parent: Construct, id: string, props: common.CommonStackProps) {
|
|
20
|
+
* super(parent, id, props)
|
|
21
|
+
* this.props = props
|
|
22
|
+
* this.sfnManager.createSuccessStep('MyStep', this, myStepProps)
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* @see [CDK Step Functions Module]{@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions-readme.html}
|
|
26
|
+
*/
|
|
27
|
+
export declare class SfnManager {
|
|
28
|
+
/**
|
|
29
|
+
* @summary Method to create a success step
|
|
30
|
+
* @param id scoped id of the resource
|
|
31
|
+
* @param scope scope in which this resource is defined
|
|
32
|
+
* @param props
|
|
33
|
+
*/
|
|
34
|
+
createSuccessStep(id: string, scope: CommonConstruct, props: SfnSucceedProps): Succeed;
|
|
35
|
+
/**
|
|
36
|
+
* @summary Method to create a failure step
|
|
37
|
+
* @param id scoped id of the resource
|
|
38
|
+
* @param scope scope in which this resource is defined
|
|
39
|
+
* @param props
|
|
40
|
+
*/
|
|
41
|
+
createFailStep(id: string, scope: CommonConstruct, props: SfnFailProps): Fail;
|
|
42
|
+
/**
|
|
43
|
+
* @summary Method to create a pass step
|
|
44
|
+
* @param id scoped id of the resource
|
|
45
|
+
* @param scope scope in which this resource is defined
|
|
46
|
+
* @param props
|
|
47
|
+
*/
|
|
48
|
+
createPassStep(id: string, scope: CommonConstruct, props: SfnPassProps): Pass;
|
|
49
|
+
/**
|
|
50
|
+
* @summary Method to create a parallel step
|
|
51
|
+
* @param id scoped id of the resource
|
|
52
|
+
* @param scope scope in which this resource is defined
|
|
53
|
+
* @param props
|
|
54
|
+
*/
|
|
55
|
+
createParallelStep(id: string, scope: CommonConstruct, props: SfnParallelProps): Parallel;
|
|
56
|
+
/**
|
|
57
|
+
* @summary Method to create a choice step
|
|
58
|
+
* @param id scoped id of the resource
|
|
59
|
+
* @param scope scope in which this resource is defined
|
|
60
|
+
* @param props
|
|
61
|
+
*/
|
|
62
|
+
createChoiceStep(id: string, scope: CommonConstruct, props: SfnChoiceProps): Choice;
|
|
63
|
+
/**
|
|
64
|
+
* @summary Method to create a wait step
|
|
65
|
+
* @param id scoped id of the resource
|
|
66
|
+
* @param scope scope in which this resource is defined
|
|
67
|
+
* @param props
|
|
68
|
+
*/
|
|
69
|
+
createWaitStep(id: string, scope: CommonConstruct, props: SfnWaitProps): Wait;
|
|
70
|
+
/**
|
|
71
|
+
* @summary Method to create a DynamoDB get item step
|
|
72
|
+
* @param id scoped id of the resource
|
|
73
|
+
* @param scope scope in which this resource is defined
|
|
74
|
+
* @param props
|
|
75
|
+
* @param table The table to get the item from
|
|
76
|
+
* @param tableKey The table key for query/scan
|
|
77
|
+
*/
|
|
78
|
+
createDynamoDbGetItemStep(id: string, scope: CommonConstruct, props: SfnDynamoGetItemProps, table: ITable, tableKey: {
|
|
79
|
+
[key: string]: DynamoAttributeValue;
|
|
80
|
+
}): DynamoGetItem;
|
|
81
|
+
/**
|
|
82
|
+
* @summary Method to create a DynamoDB put item step
|
|
83
|
+
* @param id scoped id of the resource
|
|
84
|
+
* @param scope scope in which this resource is defined
|
|
85
|
+
* @param props
|
|
86
|
+
* @param table The table to put the item in
|
|
87
|
+
* @param tableItem The item to add to the table
|
|
88
|
+
*/
|
|
89
|
+
createDynamoDbPutItemStep(id: string, scope: CommonConstruct, props: SfnDynamoPutItemProps, table: ITable, tableItem: {
|
|
90
|
+
[key: string]: DynamoAttributeValue;
|
|
91
|
+
}): DynamoPutItem;
|
|
92
|
+
/**
|
|
93
|
+
* @summary Method to create a DynamoDB delete item step
|
|
94
|
+
* @param id scoped id of the resource
|
|
95
|
+
* @param scope scope in which this resource is defined
|
|
96
|
+
* @param props
|
|
97
|
+
* @param table The table to put the item in
|
|
98
|
+
* @param tableKey The table key for query/scan
|
|
99
|
+
*/
|
|
100
|
+
createDynamoDbDeleteItemStep(id: string, scope: CommonConstruct, props: SfnDynamoDeleteItemProps, table: ITable, tableKey: {
|
|
101
|
+
[key: string]: DynamoAttributeValue;
|
|
102
|
+
}): DynamoDeleteItem;
|
|
103
|
+
/**
|
|
104
|
+
* @summary Method to send a message to SQS step
|
|
105
|
+
* @param id scoped id of the resource
|
|
106
|
+
* @param scope scope in which this resource is defined
|
|
107
|
+
* @param props
|
|
108
|
+
* @param queue The queue to send the message to
|
|
109
|
+
*/
|
|
110
|
+
createSendSqsMessageStep(id: string, scope: CommonConstruct, props: SfnSqsSendMessageProps, queue: IQueue): SqsSendMessage;
|
|
111
|
+
/**
|
|
112
|
+
* @summary Method to create a lambda invoke step
|
|
113
|
+
* @param id scoped id of the resource
|
|
114
|
+
* @param scope scope in which this resource is defined
|
|
115
|
+
* @param props
|
|
116
|
+
* @param lambdaFunction
|
|
117
|
+
*/
|
|
118
|
+
createLambdaStep(id: string, scope: CommonConstruct, props: SfnLambdaInvokeProps, lambdaFunction: IFunction): LambdaInvoke;
|
|
119
|
+
/**
|
|
120
|
+
* @summary Method to create a lambda invoke step
|
|
121
|
+
* @param id scoped id of the resource
|
|
122
|
+
* @param scope scope in which this resource is defined
|
|
123
|
+
* @param props
|
|
124
|
+
* @param lambdaFunction
|
|
125
|
+
* @param skipExecution
|
|
126
|
+
*/
|
|
127
|
+
createSkippableLambdaStep(id: string, scope: CommonConstruct, props: SfnLambdaInvokeProps, lambdaFunction: IFunction, skipExecution?: boolean): Pass | LambdaInvoke;
|
|
128
|
+
/**
|
|
129
|
+
* @summary Method to create a API Gateway invoke step
|
|
130
|
+
* @param id scoped id of the resource
|
|
131
|
+
* @param scope scope in which this resource is defined
|
|
132
|
+
* @param props
|
|
133
|
+
* @param api
|
|
134
|
+
*/
|
|
135
|
+
createApiStep(id: string, scope: CommonConstruct, props: SfnCallApiGatewayRestApiEndpointProps, api: IRestApi): CallApiGatewayRestApiEndpoint;
|
|
136
|
+
/**
|
|
137
|
+
* @summary Method to create a step function execution step
|
|
138
|
+
* @param id scoped id of the resource
|
|
139
|
+
* @param scope scope in which this resource is defined
|
|
140
|
+
* @param props props for the step
|
|
141
|
+
* @param stateMachine the state machine to execute
|
|
142
|
+
*/
|
|
143
|
+
createSfnExecutionStep(id: string, scope: CommonConstruct, props: SfnStartExecutionProps, stateMachine: IStateMachine): StepFunctionsStartExecution;
|
|
144
|
+
/**
|
|
145
|
+
* @summary Method to create a step function map state
|
|
146
|
+
* @param id scoped id of the resource
|
|
147
|
+
* @param scope scope in which this resource is defined
|
|
148
|
+
* @param props props for the map state
|
|
149
|
+
*/
|
|
150
|
+
createMapState(id: string, scope: CommonConstruct, props: SfnMapProps): Map;
|
|
151
|
+
/**
|
|
152
|
+
* @summary Method to create a state machine
|
|
153
|
+
* @param id scoped id of the resource
|
|
154
|
+
* @param scope scope in which this resource is defined
|
|
155
|
+
* @param props
|
|
156
|
+
* @param definition
|
|
157
|
+
* @param logGroup
|
|
158
|
+
* @param role
|
|
159
|
+
*/
|
|
160
|
+
createStateMachine(id: string, scope: CommonConstruct, props: SfnStateMachineProps, definition: IChainable, logGroup: ILogGroup, role?: IRole): StateMachine;
|
|
161
|
+
}
|