@inizioevoke/aws-cdk-helpers 1.0.1 → 1.0.3
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/dist/constructs/certificatemanager.d.ts +13 -0
- package/dist/constructs/certificatemanager.js +19 -0
- package/dist/constructs/cloudfront.d.ts +44 -0
- package/dist/constructs/cloudfront.js +78 -0
- package/dist/constructs/codebuild.d.ts +26 -0
- package/dist/constructs/codebuild.js +76 -0
- package/dist/constructs/codepipeline.d.ts +30 -0
- package/dist/constructs/codepipeline.js +58 -0
- package/dist/constructs/route53.d.ts +14 -0
- package/dist/constructs/route53.js +24 -0
- package/dist/constructs/s3.d.ts +12 -0
- package/dist/constructs/s3.js +17 -0
- package/dist/constructs/waf.d.ts +21 -0
- package/dist/constructs/waf.js +86 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +19 -0
- package/dist/stacks/web-static-serverless/codepipeline-stack.d.ts +17 -0
- package/dist/stacks/web-static-serverless/codepipeline-stack.js +28 -0
- package/dist/stacks/web-static-serverless/web-global-stack.d.ts +33 -0
- package/dist/stacks/web-static-serverless/web-global-stack.js +85 -0
- package/dist/stages/str8r-clm-stage.d.ts +17 -0
- package/dist/stages/str8r-clm-stage.js +39 -0
- package/dist/stages/web-static-serverless-stage.d.ts +17 -0
- package/dist/stages/web-static-serverless-stage.js +39 -0
- package/package.json +11 -1
- package/{constructs → src/constructs}/certificatemanager.ts +1 -1
- package/{constructs → src/constructs}/cloudfront.ts +4 -2
- package/{constructs → src/constructs}/codebuild.ts +1 -1
- package/{constructs → src/constructs}/codepipeline.ts +2 -2
- package/{constructs → src/constructs}/s3.ts +1 -1
- package/{constructs → src/constructs}/waf.ts +2 -2
- package/{stacks → src/stacks}/web-static-serverless/codepipeline-stack.ts +2 -2
- package/{stacks → src/stacks}/web-static-serverless/web-global-stack.ts +6 -6
- package/{stages → src/stages}/str8r-clm-stage.ts +3 -3
- package/{stages → src/stages}/web-static-serverless-stage.ts +3 -3
- package/src/templates/cffn-default-doc-basic-auth.js +148 -0
- package/src/templates/cffn-default-doc.js +125 -0
- package/tasks/clean.js +7 -0
- package/tasks/copy-templates.js +13 -0
- package/tsconfig.json +4 -1
- /package/{templates → dist/templates}/cffn-default-doc-basic-auth.js +0 -0
- /package/{templates → dist/templates}/cffn-default-doc.js +0 -0
- /package/{constructs → src/constructs}/route53.ts +0 -0
- /package/{lib → src/lib}/types.d.ts +0 -0
- /package/{lib → src/lib}/utils.ts +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { Certificate } from "aws-cdk-lib/aws-certificatemanager";
|
|
3
|
+
import { IHostedZone } from "aws-cdk-lib/aws-route53";
|
|
4
|
+
export interface SSLCertificateProps {
|
|
5
|
+
hostedZone: IHostedZone;
|
|
6
|
+
domainName: string;
|
|
7
|
+
destroy?: boolean;
|
|
8
|
+
tags?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
export declare class SSLCertificate extends Construct {
|
|
11
|
+
readonly certificate: Certificate;
|
|
12
|
+
constructor(scope: Construct, id: string, props: SSLCertificateProps);
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RemovalPolicy } from "aws-cdk-lib";
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { Certificate, CertificateValidation } from "aws-cdk-lib/aws-certificatemanager";
|
|
4
|
+
import { tagResource } from "../lib/utils.js";
|
|
5
|
+
export class SSLCertificate extends Construct {
|
|
6
|
+
certificate;
|
|
7
|
+
constructor(scope, id, props) {
|
|
8
|
+
super(scope, id);
|
|
9
|
+
this.certificate = new Certificate(this, `Certificate-${props.domainName}`, {
|
|
10
|
+
domainName: props.domainName,
|
|
11
|
+
validation: CertificateValidation.fromDns(props.hostedZone),
|
|
12
|
+
});
|
|
13
|
+
tagResource(this.certificate, props.tags);
|
|
14
|
+
if (typeof props.destroy == 'boolean') {
|
|
15
|
+
this.certificate.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGVtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY2VydGlmaWNhdGVtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUzlDLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQUMzQixXQUFXLENBQWM7SUFFekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLGVBQWUsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixVQUFVLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDNUQsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENlcnRpZmljYXRlLCBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHsgSUhvc3RlZFpvbmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IHRhZ1Jlc291cmNlIH0gZnJvbSBcIi4uL2xpYi91dGlscy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNTTENlcnRpZmljYXRlUHJvcHMge1xuICBob3N0ZWRab25lOiBJSG9zdGVkWm9uZTtcbiAgZG9tYWluTmFtZTogc3RyaW5nO1xuICBkZXN0cm95PzogYm9vbGVhbjtcbiAgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBTU0xDZXJ0aWZpY2F0ZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBjZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNTTENlcnRpZmljYXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0aGlzLCBgQ2VydGlmaWNhdGUtJHtwcm9wcy5kb21haW5OYW1lfWAsIHtcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICB2YWxpZGF0aW9uOiBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyhwcm9wcy5ob3N0ZWRab25lKSxcbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLmNlcnRpZmljYXRlLCBwcm9wcy50YWdzKTtcbiAgICBpZiAodHlwZW9mIHByb3BzLmRlc3Ryb3kgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLmNlcnRpZmljYXRlLmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4pO1xuICAgIH1cbiAgfVxufSJdfQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { ICertificate } from 'aws-cdk-lib/aws-certificatemanager';
|
|
3
|
+
import { BehaviorOptions, Distribution, Function } from 'aws-cdk-lib/aws-cloudfront';
|
|
4
|
+
import type { IResourceProps } from '../lib/types.js';
|
|
5
|
+
export interface CloudFrontDistributionProps extends IResourceProps {
|
|
6
|
+
domainName: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
defaultBehavior: BehaviorOptions;
|
|
9
|
+
additionalBehaviors?: Record<string, BehaviorOptions>;
|
|
10
|
+
priceClass?: 'PRICE_CLASS_ALL' | 'PRICE_CLASS_100' | 'PRICE_CLASS_200' | 'NOT_PROD' | 'PROD';
|
|
11
|
+
certificate: ICertificate;
|
|
12
|
+
webAclId?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class CloudFrontDistribution extends Construct {
|
|
15
|
+
readonly distribution: Distribution;
|
|
16
|
+
constructor(scope: Construct, id: string, props: CloudFrontDistributionProps);
|
|
17
|
+
}
|
|
18
|
+
export type CloudFrontFunctionRedirectPaths = Record<string, string | [string, 301 | 302]>;
|
|
19
|
+
export interface CloudFrontFunctionRedirects {
|
|
20
|
+
trailingSlash?: boolean;
|
|
21
|
+
defaultDocument?: string;
|
|
22
|
+
redirectDefaultDocument?: boolean;
|
|
23
|
+
paths?: CloudFrontFunctionRedirectPaths;
|
|
24
|
+
}
|
|
25
|
+
export interface DefaultDocFunctionProps extends IResourceProps {
|
|
26
|
+
functionName?: string;
|
|
27
|
+
defaultDocument?: string;
|
|
28
|
+
redirects?: CloudFrontFunctionRedirects;
|
|
29
|
+
}
|
|
30
|
+
export interface BasicAuthDefaultDocFunctionProps extends DefaultDocFunctionProps {
|
|
31
|
+
user: string;
|
|
32
|
+
password: string;
|
|
33
|
+
}
|
|
34
|
+
export interface CloudFrontFunctionProps extends IResourceProps {
|
|
35
|
+
code: string;
|
|
36
|
+
functionName?: string;
|
|
37
|
+
runtime?: 'JS_1_0' | 'JS_2_0';
|
|
38
|
+
}
|
|
39
|
+
export declare class CloudFrontFunction extends Construct {
|
|
40
|
+
readonly fn: Function;
|
|
41
|
+
constructor(scope: Construct, id: string, props: CloudFrontFunctionProps);
|
|
42
|
+
static createDefaultDoc(scope: Construct, id: string, props: DefaultDocFunctionProps): CloudFrontFunction;
|
|
43
|
+
static createBasicAuthDefaultDoc(scope: Construct, id: string, props: BasicAuthDefaultDocFunctionProps): CloudFrontFunction;
|
|
44
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { Buffer } from 'node:buffer';
|
|
4
|
+
import { RemovalPolicy } from "aws-cdk-lib";
|
|
5
|
+
import { Construct } from 'constructs';
|
|
6
|
+
import { Distribution, Function, FunctionCode, FunctionRuntime, PriceClass } from 'aws-cdk-lib/aws-cloudfront';
|
|
7
|
+
import { tagResource } from '../lib/utils.js';
|
|
8
|
+
const __dirname = import.meta.dirname;
|
|
9
|
+
export class CloudFrontDistribution extends Construct {
|
|
10
|
+
distribution;
|
|
11
|
+
constructor(scope, id, props) {
|
|
12
|
+
super(scope, id);
|
|
13
|
+
let priceClass = PriceClass.PRICE_CLASS_ALL;
|
|
14
|
+
switch (props.priceClass) {
|
|
15
|
+
case 'NOT_PROD':
|
|
16
|
+
case 'PRICE_CLASS_100':
|
|
17
|
+
priceClass = PriceClass.PRICE_CLASS_100;
|
|
18
|
+
break;
|
|
19
|
+
case 'PRICE_CLASS_200':
|
|
20
|
+
priceClass = PriceClass.PRICE_CLASS_200;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
this.distribution = new Distribution(this, `${id}|CloudFrontDistribution`, {
|
|
24
|
+
comment: props.description,
|
|
25
|
+
defaultBehavior: props.defaultBehavior,
|
|
26
|
+
additionalBehaviors: props.additionalBehaviors,
|
|
27
|
+
domainNames: [props.domainName],
|
|
28
|
+
certificate: props.certificate,
|
|
29
|
+
priceClass,
|
|
30
|
+
webAclId: props.webAclId
|
|
31
|
+
});
|
|
32
|
+
tagResource(this.distribution, props.tags);
|
|
33
|
+
if (typeof props.destroy == 'boolean') {
|
|
34
|
+
this.distribution.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class CloudFrontFunction extends Construct {
|
|
39
|
+
fn;
|
|
40
|
+
constructor(scope, id, props) {
|
|
41
|
+
super(scope, id);
|
|
42
|
+
this.fn = new Function(this, 'CloudFrontFunction', {
|
|
43
|
+
functionName: props.functionName,
|
|
44
|
+
runtime: FunctionRuntime[props.runtime ?? 'JS_2_0'],
|
|
45
|
+
code: FunctionCode.fromInline(props.code)
|
|
46
|
+
});
|
|
47
|
+
tagResource(this.fn, props.tags);
|
|
48
|
+
if (typeof props.destroy == 'boolean') {
|
|
49
|
+
this.fn.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
static createDefaultDoc(scope, id, props) {
|
|
53
|
+
const code = readFileSync(resolve(__dirname, '../templates/cffn-default-doc.js'), 'utf8')
|
|
54
|
+
.replace('__DEFAULT_DOCUMENT__', props.defaultDocument ?? 'index.html')
|
|
55
|
+
.replace('__REDIRECTS__', props.redirects?.paths ? JSON.stringify(props.redirects?.paths) : 'null')
|
|
56
|
+
.replace('__TRAILING_SLASH__', props.redirects?.trailingSlash?.toString() ?? 'null')
|
|
57
|
+
.replace('__REDIR_DEF_DOC__', props.redirects?.redirectDefaultDocument?.toString() ?? 'false');
|
|
58
|
+
return new CloudFrontFunction(scope, 'DefaultDocFunction', {
|
|
59
|
+
functionName: props.functionName,
|
|
60
|
+
runtime: 'JS_2_0',
|
|
61
|
+
code
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
static createBasicAuthDefaultDoc(scope, id, props) {
|
|
65
|
+
const code = readFileSync(resolve(__dirname, '../templates/cffn-default-doc-basic-auth.js'), 'utf8')
|
|
66
|
+
.replace('__DEFAULT_DOCUMENT__', props.defaultDocument ?? 'index.html')
|
|
67
|
+
.replace('__CREDENTIALS__', Buffer.from(`${props.user}:${props.password}`).toString('base64'))
|
|
68
|
+
.replace('__REDIRECTS__', props.redirects?.paths ? JSON.stringify(props.redirects?.paths) : 'null')
|
|
69
|
+
.replace('__TRAILING_SLASH__', props.redirects?.trailingSlash?.toString() ?? 'null')
|
|
70
|
+
.replace('__REDIR_DEF_DOC__', props.redirects?.redirectDefaultDocument?.toString() ?? 'false');
|
|
71
|
+
return new CloudFrontFunction(scope, 'BasicAuthDefaultDocFunction', {
|
|
72
|
+
functionName: props.functionName,
|
|
73
|
+
runtime: 'JS_2_0',
|
|
74
|
+
code
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmcm9udC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2Nsb3VkZnJvbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZDLE9BQU8sRUFBbUIsWUFBWSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQXFCLGVBQWUsRUFBVyxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1SixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHOUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFXdEMsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFNBQVM7SUFDbkMsWUFBWSxDQUFlO0lBRTNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0M7UUFDMUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQzVDLFFBQVEsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssaUJBQWlCO2dCQUNwQixVQUFVLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsTUFBTTtZQUNSLEtBQUssaUJBQWlCO2dCQUNwQixVQUFVLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsTUFBTTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFH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eUIsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QztRQUNwRyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSw2Q0FBNkMsQ0FBQyxFQUFFLE1BQU0sQ0FBQzthQUNqRyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLGVBQWUsSUFBSSxZQUFZLENBQUM7YUFDdEUsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM3RixPQUFPLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzthQUNuRyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksTUFBTSxDQUFDO2FBQ25GLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDO1FBRWpHLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsNkJBQTZCLEVBQUU7WUFDbEUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnbm9kZTpidWZmZXInO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJQ2VydGlmaWNhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCB7IEJlaGF2aW9yT3B0aW9ucywgRGlzdHJpYnV0aW9uLCBGdW5jdGlvbiwgRnVuY3Rpb25Db2RlLCBGdW5jdGlvbkV2ZW50VHlwZSwgRnVuY3Rpb25SdW50aW1lLCBJT3JpZ2luLCBQcmljZUNsYXNzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgdGFnUmVzb3VyY2UgfSBmcm9tICcuLi9saWIvdXRpbHMuanMnO1xuaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2VQcm9wcyB9IGZyb20gJy4uL2xpYi90eXBlcy5qcyc7XG5cbmNvbnN0IF9fZGlybmFtZSA9IGltcG9ydC5tZXRhLmRpcm5hbWU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGcm9udERpc3RyaWJ1dGlvblByb3BzIGV4dGVuZHMgSVJlc291cmNlUHJvcHMge1xuICBkb21haW5OYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBkZWZhdWx0QmVoYXZpb3I6IEJlaGF2aW9yT3B0aW9ucztcbiAgYWRkaXRpb25hbEJlaGF2aW9ycz86IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz47XG4gIHByaWNlQ2xhc3M/OiAnUFJJQ0VfQ0xBU1NfQUxMJyB8ICdQUklDRV9DTEFTU18xMDAnIHwgJ1BSSUNFX0NMQVNTXzIwMCcgfCAnTk9UX1BST0QnIHwgJ1BST0QnO1xuICBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlO1xuICB3ZWJBY2xJZD86IHN0cmluZztcbn1cbmV4cG9ydCBjbGFzcyBDbG91ZEZyb250RGlzdHJpYnV0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogRGlzdHJpYnV0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbG91ZEZyb250RGlzdHJpYnV0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbGV0IHByaWNlQ2xhc3MgPSBQcmljZUNsYXNzLlBSSUNFX0NMQVNTX0FMTDtcbiAgICBzd2l0Y2ggKHByb3BzLnByaWNlQ2xhc3MpIHtcbiAgICAgIGNhc2UgJ05PVF9QUk9EJzpcbiAgICAgIGNhc2UgJ1BSSUNFX0NMQVNTXzEwMCc6XG4gICAgICAgIHByaWNlQ2xhc3MgPSBQcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQUklDRV9DTEFTU18yMDAnOlxuICAgICAgICBwcmljZUNsYXNzID0gUHJpY2VDbGFzcy5QUklDRV9DTEFTU18yMDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gbmV3IERpc3RyaWJ1dGlvbih0aGlzLCBgJHtpZH18Q2xvdWRGcm9udERpc3RyaWJ1dGlvbmAsIHtcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZGVmYXVsdEJlaGF2aW9yOiBwcm9wcy5kZWZhdWx0QmVoYXZpb3IsXG4gICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOiBwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzLFxuICAgICAgZG9tYWluTmFtZXM6IFtwcm9wcy5kb21haW5OYW1lXSxcbiAgICAgIGNlcnRpZmljYXRlOiBwcm9wcy5jZXJ0aWZpY2F0ZSxcbiAgICAgIHByaWNlQ2xhc3MsXG4gICAgICB3ZWJBY2xJZDogcHJvcHMud2ViQWNsSWRcbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLmRpc3RyaWJ1dGlvbiwgcHJvcHMudGFncyk7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5kZXN0cm95ID09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5kaXN0cmlidXRpb24uYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLmRlc3Ryb3kgPyBSZW1vdmFsUG9saWN5LkRFU1RST1kgOiBSZW1vdmFsUG9saWN5LlJFVEFJTik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIENsb3VkRnJvbnRGdW5jdGlvblJlZGlyZWN0UGF0aHMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBbc3RyaW5nLCAzMDF8MzAyXT47IFxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnRGdW5jdGlvblJlZGlyZWN0cyB7XG4gIHRyYWlsaW5nU2xhc2g/OiBib29sZWFuO1xuICBkZWZhdWx0RG9jdW1lbnQ/OiBzdHJpbmc7XG4gIHJlZGlyZWN0RGVmYXVsdERvY3VtZW50PzogYm9vbGVhbjtcbiAgcGF0aHM/OiBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdFBhdGhzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHREb2NGdW5jdGlvblByb3BzIGV4dGVuZHMgSVJlc291cmNlUHJvcHMge1xuICBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHREb2N1bWVudD86IHN0cmluZztcbiAgcmVkaXJlY3RzPzogQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljQXV0aERlZmF1bHREb2NGdW5jdGlvblByb3BzIGV4dGVuZHMgRGVmYXVsdERvY0Z1bmN0aW9uUHJvcHMge1xuICB1c2VyOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGcm9udEZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBJUmVzb3VyY2VQcm9wcyB7XG4gIGNvZGU6IHN0cmluZztcbiAgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xuICBydW50aW1lPzogJ0pTXzFfMCcgfCAnSlNfMl8wJztcbn1cbmV4cG9ydCBjbGFzcyBDbG91ZEZyb250RnVuY3Rpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZm46IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbG91ZEZyb250RnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdDbG91ZEZyb250RnVuY3Rpb24nLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IHByb3BzLmZ1bmN0aW9uTmFtZSxcbiAgICAgIHJ1bnRpbWU6IEZ1bmN0aW9uUnVudGltZVtwcm9wcy5ydW50aW1lID8/ICdKU18yXzAnXSxcbiAgICAgIGNvZGU6IEZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKHByb3BzLmNvZGUpXG4gICAgfSk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5mbiwgcHJvcHMudGFncyk7XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmRlc3Ryb3kgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLmZuLmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVEZWZhdWx0RG9jKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEZWZhdWx0RG9jRnVuY3Rpb25Qcm9wcykge1xuICAgIGNvbnN0IGNvZGUgPSByZWFkRmlsZVN5bmMocmVzb2x2ZShfX2Rpcm5hbWUsICcuLi90ZW1wbGF0ZXMvY2Zmbi1kZWZhdWx0LWRvYy5qcycpLCAndXRmOCcpXG4gICAgICAucmVwbGFjZSgnX19ERUZBVUxUX0RPQ1VNRU5UX18nLCBwcm9wcy5kZWZhdWx0RG9jdW1lbnQgPz8gJ2luZGV4Lmh0bWwnKVxuICAgICAgLnJlcGxhY2UoJ19fUkVESVJFQ1RTX18nLCBwcm9wcy5yZWRpcmVjdHM/LnBhdGhzID8gSlNPTi5zdHJpbmdpZnkocHJvcHMucmVkaXJlY3RzPy5wYXRocyApIDogJ251bGwnKVxuICAgICAgLnJlcGxhY2UoJ19fVFJBSUxJTkdfU0xBU0hfXycsIHByb3BzLnJlZGlyZWN0cz8udHJhaWxpbmdTbGFzaD8udG9TdHJpbmcoKSA/PyAnbnVsbCcpXG4gICAgICAucmVwbGFjZSgnX19SRURJUl9ERUZfRE9DX18nLCBwcm9wcy5yZWRpcmVjdHM/LnJlZGlyZWN0RGVmYXVsdERvY3VtZW50Py50b1N0cmluZygpID8/ICdmYWxzZScpO1xuXG4gICAgcmV0dXJuIG5ldyBDbG91ZEZyb250RnVuY3Rpb24oc2NvcGUsICdEZWZhdWx0RG9jRnVuY3Rpb24nLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IHByb3BzLmZ1bmN0aW9uTmFtZSxcbiAgICAgIHJ1bnRpbWU6ICdKU18yXzAnLFxuICAgICAgY29kZVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUJhc2ljQXV0aERlZmF1bHREb2Moc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhc2ljQXV0aERlZmF1bHREb2NGdW5jdGlvblByb3BzKSB7XG4gICAgY29uc3QgY29kZSA9IHJlYWRGaWxlU3luYyhyZXNvbHZlKF9fZGlybmFtZSwgJy4uL3RlbXBsYXRlcy9jZmZuLWRlZmF1bHQtZG9jLWJhc2ljLWF1dGguanMnKSwgJ3V0ZjgnKVxuICAgICAgLnJlcGxhY2UoJ19fREVGQVVMVF9ET0NVTUVOVF9fJywgcHJvcHMuZGVmYXVsdERvY3VtZW50ID8/ICdpbmRleC5odG1sJylcbiAgICAgIC5yZXBsYWNlKCdfX0NSRURFTlRJQUxTX18nLCBCdWZmZXIuZnJvbShgJHtwcm9wcy51c2VyfToke3Byb3BzLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSlcbiAgICAgIC5yZXBsYWNlKCdfX1JFRElSRUNUU19fJywgcHJvcHMucmVkaXJlY3RzPy5wYXRocyA/IEpTT04uc3RyaW5naWZ5KHByb3BzLnJlZGlyZWN0cz8ucGF0aHMgKSA6ICdudWxsJylcbiAgICAgIC5yZXBsYWNlKCdfX1RSQUlMSU5HX1NMQVNIX18nLCBwcm9wcy5yZWRpcmVjdHM/LnRyYWlsaW5nU2xhc2g/LnRvU3RyaW5nKCkgPz8gJ251bGwnKVxuICAgICAgLnJlcGxhY2UoJ19fUkVESVJfREVGX0RPQ19fJywgcHJvcHMucmVkaXJlY3RzPy5yZWRpcmVjdERlZmF1bHREb2N1bWVudD8udG9TdHJpbmcoKSA/PyAnZmFsc2UnKTtcbiAgICBcbiAgICByZXR1cm4gbmV3IENsb3VkRnJvbnRGdW5jdGlvbihzY29wZSwgJ0Jhc2ljQXV0aERlZmF1bHREb2NGdW5jdGlvbicsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogcHJvcHMuZnVuY3Rpb25OYW1lLFxuICAgICAgcnVudGltZTogJ0pTXzJfMCcsXG4gICAgICBjb2RlXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { BuildEnvironmentVariableType, IBuildImage, PipelineProject } from 'aws-cdk-lib/aws-codebuild';
|
|
3
|
+
export type EnvironmentVariables = Record<string, {
|
|
4
|
+
value: any;
|
|
5
|
+
type?: BuildEnvironmentVariableType;
|
|
6
|
+
}>;
|
|
7
|
+
export interface EcrBuildImage {
|
|
8
|
+
repository: string;
|
|
9
|
+
tag: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CodeBuildPipelineProjectProps {
|
|
12
|
+
projectName?: string;
|
|
13
|
+
buildSpec?: string | object;
|
|
14
|
+
buildImage?: ('STANDARD_5_0' | 'STANDARD_6_0' | 'STANDARD_7_0') | IBuildImage;
|
|
15
|
+
ecrBuildImage?: EcrBuildImage;
|
|
16
|
+
computeType?: ('SMALL' | 'MEDIUM' | 'LARGE' | 'X_LARGE' | 'X2_LARGE') | string;
|
|
17
|
+
environmentVariables?: EnvironmentVariables;
|
|
18
|
+
cloudFrontDistributionArn?: string;
|
|
19
|
+
s3BucketName?: string;
|
|
20
|
+
destroy?: boolean;
|
|
21
|
+
tags?: Record<string, string>;
|
|
22
|
+
}
|
|
23
|
+
export declare class CodeBuildPipelineProject extends Construct {
|
|
24
|
+
readonly project: PipelineProject;
|
|
25
|
+
constructor(scope: Construct, id: string, props: CodeBuildPipelineProjectProps);
|
|
26
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { RemovalPolicy } from "aws-cdk-lib";
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { BuildSpec, ComputeType, LinuxBuildImage, PipelineProject } from 'aws-cdk-lib/aws-codebuild';
|
|
4
|
+
import { Repository } from "aws-cdk-lib/aws-ecr";
|
|
5
|
+
import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
|
|
6
|
+
import { Bucket } from 'aws-cdk-lib/aws-s3';
|
|
7
|
+
import { tagResource } from "../lib/utils.js";
|
|
8
|
+
export class CodeBuildPipelineProject extends Construct {
|
|
9
|
+
project;
|
|
10
|
+
constructor(scope, id, props) {
|
|
11
|
+
super(scope, id);
|
|
12
|
+
if (!props.environmentVariables) {
|
|
13
|
+
props.environmentVariables = {};
|
|
14
|
+
}
|
|
15
|
+
if (props.cloudFrontDistributionArn && !props.environmentVariables.CLOUDFRONT_DISTRIBUTION_ID) {
|
|
16
|
+
props.environmentVariables.CLOUDFRONT_DISTRIBUTION_ID = {
|
|
17
|
+
value: props.cloudFrontDistributionArn.split('/').pop()
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (props.s3BucketName && !props.environmentVariables.S3_BUCKET_NAME) {
|
|
21
|
+
props.environmentVariables.S3_BUCKET_NAME = {
|
|
22
|
+
value: props.s3BucketName
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
let buildImage = undefined;
|
|
26
|
+
if (props.ecrBuildImage) {
|
|
27
|
+
const repository = props.ecrBuildImage.repository.startsWith('arn:aws') ?
|
|
28
|
+
Repository.fromRepositoryArn(this, 'EcrRepository', props.ecrBuildImage.repository) :
|
|
29
|
+
Repository.fromRepositoryName(this, 'EcrRepository', props.ecrBuildImage.repository);
|
|
30
|
+
buildImage = LinuxBuildImage.fromEcrRepository(repository, props.ecrBuildImage.tag);
|
|
31
|
+
}
|
|
32
|
+
else if (props.buildImage) {
|
|
33
|
+
if (typeof props.buildImage == 'string') {
|
|
34
|
+
buildImage = LinuxBuildImage[props.buildImage ?? 'STANDARD_7_0'];
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
buildImage = props.buildImage;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
this.project = new PipelineProject(this, 'CodeBuildPipelineProjectProps', {
|
|
41
|
+
projectName: props.projectName,
|
|
42
|
+
buildSpec: props.buildSpec ? typeof props.buildSpec == 'object' ? BuildSpec.fromObjectToYaml(props.buildSpec) : BuildSpec.fromSourceFilename(props.buildSpec ?? 'buildspec.yml') : undefined,
|
|
43
|
+
environment: {
|
|
44
|
+
buildImage: buildImage ?? LinuxBuildImage.STANDARD_7_0,
|
|
45
|
+
computeType: ComputeType[props.computeType ?? 'SMALL'],
|
|
46
|
+
environmentVariables: props.environmentVariables
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
tagResource(this.project, props.tags);
|
|
50
|
+
if (typeof props.destroy == 'boolean') {
|
|
51
|
+
this.project.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
|
|
52
|
+
}
|
|
53
|
+
// Add CloudWatch log permissions
|
|
54
|
+
this.project.addToRolePolicy(new PolicyStatement({
|
|
55
|
+
actions: [
|
|
56
|
+
'logs:CreateLogGroup',
|
|
57
|
+
'logs:CreateLogStream',
|
|
58
|
+
'logs:PutLogEvents'
|
|
59
|
+
],
|
|
60
|
+
resources: [this.project.projectArn]
|
|
61
|
+
}));
|
|
62
|
+
// Allow the project to create an invalidation
|
|
63
|
+
if (props.cloudFrontDistributionArn) {
|
|
64
|
+
this.project.addToRolePolicy(new PolicyStatement({
|
|
65
|
+
actions: ['cloudfront:CreateInvalidation'],
|
|
66
|
+
resources: [props.cloudFrontDistributionArn]
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
// Allow the project to sync files to S3
|
|
70
|
+
if (props.s3BucketName) {
|
|
71
|
+
const s3Bucket = Bucket.fromBucketName(this, 'S3BucketByName', props.s3BucketName);
|
|
72
|
+
s3Bucket.grantReadWrite(this.project);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY29kZWJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQWdDLFNBQVMsRUFBRSxXQUFXLEVBQWUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hKLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQXFCOUMsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFNBQVM7SUFDckMsT0FBTyxDQUFrQjtJQUV6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9DO1FBQzVFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDOUYsS0FBSyxDQUFDLG9CQUFvQixDQUFDLDBCQUEwQixHQUFHO2dCQUN0RCxLQUFLLEVBQUUsS0FBSyxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUU7YUFDeEQsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FB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LElBQUksZUFBZSxDQUFDO2dCQUMvQyxPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztnQkFDMUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDO2FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVELHdDQUF3QztRQUN4QyxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkYsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSwgQnVpbGRTcGVjLCBDb21wdXRlVHlwZSwgSUJ1aWxkSW1hZ2UsIExpbnV4QnVpbGRJbWFnZSwgUGlwZWxpbmVQcm9qZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQnVja2V0LCBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcblxuaW1wb3J0IHsgdGFnUmVzb3VyY2UgfSBmcm9tIFwiLi4vbGliL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50VmFyaWFibGVzID0gUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogYW55LCB0eXBlPzogQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSB9PjtcblxuZXhwb3J0IGludGVyZmFjZSBFY3JCdWlsZEltYWdlIHtcbiAgcmVwb3NpdG9yeTogc3RyaW5nO1xuICB0YWc6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkUGlwZWxpbmVQcm9qZWN0UHJvcHMge1xuICBwcm9qZWN0TmFtZT86IHN0cmluZztcbiAgYnVpbGRTcGVjPzogc3RyaW5nIHwgb2JqZWN0O1xuICBidWlsZEltYWdlPzogKCdTVEFOREFSRF81XzAnIHwgJ1NUQU5EQVJEXzZfMCcgfCAnU1RBTkRBUkRfN18wJykgfCBJQnVpbGRJbWFnZTtcbiAgZWNyQnVpbGRJbWFnZT86IEVjckJ1aWxkSW1hZ2UsXG4gIGNvbXB1dGVUeXBlPzogKCdTTUFMTCcgfCAnTUVESVVNJyB8ICdMQVJHRScgfCAnWF9MQVJHRScgfCAnWDJfTEFSR0UnKSB8IHN0cmluZztcbiAgZW52aXJvbm1lbnRWYXJpYWJsZXM/OiBFbnZpcm9ubWVudFZhcmlhYmxlcztcbiAgY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybj86IHN0cmluZztcbiAgczNCdWNrZXROYW1lPzogc3RyaW5nO1xuICBkZXN0cm95PzogYm9vbGVhbjtcbiAgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlQnVpbGRQaXBlbGluZVByb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvamVjdDogUGlwZWxpbmVQcm9qZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2RlQnVpbGRQaXBlbGluZVByb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKSB7XG4gICAgICBwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICBpZiAocHJvcHMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybiAmJiAhcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMuQ0xPVURGUk9OVF9ESVNUUklCVVRJT05fSUQpIHtcbiAgICAgIHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzLkNMT1VERlJPTlRfRElTVFJJQlVUSU9OX0lEID0ge1xuICAgICAgICB2YWx1ZTogcHJvcHMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybi5zcGxpdCgnLycpLnBvcCgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zM0J1Y2tldE5hbWUgJiYgIXByb3BzLmVudmlyb25tZW50VmFyaWFibGVzLlMzX0JVQ0tFVF9OQU1FKSB7XG4gICAgICBwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcy5TM19CVUNLRVRfTkFNRSA9IHtcbiAgICAgICAgdmFsdWU6IHByb3BzLnMzQnVja2V0TmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgYnVpbGRJbWFnZTogSUJ1aWxkSW1hZ2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLmVjckJ1aWxkSW1hZ2UpIHtcbiAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBwcm9wcy5lY3JCdWlsZEltYWdlLnJlcG9zaXRvcnkuc3RhcnRzV2l0aCgnYXJuOmF3cycpID8gXG4gICAgICAgIFJlcG9zaXRvcnkuZnJvbVJlcG9zaXRvcnlBcm4odGhpcywgJ0VjclJlcG9zaXRvcnknLCBwcm9wcy5lY3JCdWlsZEltYWdlLnJlcG9zaXRvcnkpIDpcbiAgICAgICAgUmVwb3NpdG9yeS5mcm9tUmVwb3NpdG9yeU5hbWUodGhpcywgJ0VjclJlcG9zaXRvcnknLCBwcm9wcy5lY3JCdWlsZEltYWdlLnJlcG9zaXRvcnkpO1xuICAgICAgYnVpbGRJbWFnZSA9IExpbnV4QnVpbGRJbWFnZS5mcm9tRWNyUmVwb3NpdG9yeShyZXBvc2l0b3J5LCBwcm9wcy5lY3JCdWlsZEltYWdlLnRhZyk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5idWlsZEltYWdlKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLmJ1aWxkSW1hZ2UgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgYnVpbGRJbWFnZSA9IExpbnV4QnVpbGRJbWFnZVtwcm9wcy5idWlsZEltYWdlID8/ICdTVEFOREFSRF83XzAnXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGRJbWFnZSA9IHByb3BzLmJ1aWxkSW1hZ2UgYXMgSUJ1aWxkSW1hZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0ID0gbmV3IFBpcGVsaW5lUHJvamVjdCh0aGlzLCAnQ29kZUJ1aWxkUGlwZWxpbmVQcm9qZWN0UHJvcHMnLCB7XG4gICAgICBwcm9qZWN0TmFtZTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgICBidWlsZFNwZWM6IHByb3BzLmJ1aWxkU3BlYyA/IHR5cGVvZiBwcm9wcy5idWlsZFNwZWMgPT0gJ29iamVjdCcgPyBCdWlsZFNwZWMuZnJvbU9iamVjdFRvWWFtbChwcm9wcy5idWlsZFNwZWMpIDogQnVpbGRTcGVjLmZyb21Tb3VyY2VGaWxlbmFtZShwcm9wcy5idWlsZFNwZWMgPz8gJ2J1aWxkc3BlYy55bWwnKSA6IHVuZGVmaW5lZCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IGJ1aWxkSW1hZ2UgPz8gTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzdfMCxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlW3Byb3BzLmNvbXB1dGVUeXBlIGFzIChrZXlvZiB0eXBlb2YgQ29tcHV0ZVR5cGUgfCB1bmRlZmluZWQpID8/ICdTTUFMTCddLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLnByb2plY3QsIHByb3BzLnRhZ3MpO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZGVzdHJveSA9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMucHJvamVjdC5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMuZGVzdHJveSA/IFJlbW92YWxQb2xpY3kuREVTVFJPWSA6IFJlbW92YWxQb2xpY3kuUkVUQUlOKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgQ2xvdWRXYXRjaCBsb2cgcGVybWlzc2lvbnNcbiAgICB0aGlzLnByb2plY3QuYWRkVG9Sb2xlUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnbG9nczpDcmVhdGVMb2dHcm91cCcsXG4gICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cydcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFt0aGlzLnByb2plY3QucHJvamVjdEFybl1cbiAgICB9KSk7XG5cbiAgICAvLyBBbGxvdyB0aGUgcHJvamVjdCB0byBjcmVhdGUgYW4gaW52YWxpZGF0aW9uXG4gICAgaWYgKHByb3BzLmNsb3VkRnJvbnREaXN0cmlidXRpb25Bcm4pIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnY2xvdWRmcm9udDpDcmVhdGVJbnZhbGlkYXRpb24nXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybl1cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyB0aGUgcHJvamVjdCB0byBzeW5jIGZpbGVzIHRvIFMzXG4gICAgaWYgKHByb3BzLnMzQnVja2V0TmFtZSkge1xuICAgICAgY29uc3QgczNCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ1MzQnVja2V0QnlOYW1lJywgcHJvcHMuczNCdWNrZXROYW1lKTtcbiAgICAgIHMzQnVja2V0LmdyYW50UmVhZFdyaXRlKHRoaXMucHJvamVjdCk7XG4gICAgfVxuICB9XG59Il19
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { IProject } from "aws-cdk-lib/aws-codebuild";
|
|
3
|
+
import { Artifact, Pipeline } from "aws-cdk-lib/aws-codepipeline";
|
|
4
|
+
import { Bucket } from 'aws-cdk-lib/aws-s3';
|
|
5
|
+
import type { EnvironmentVariables } from './codebuild.js';
|
|
6
|
+
export interface AddSourceStageParams {
|
|
7
|
+
stageName?: string;
|
|
8
|
+
codestarConnectionArn: string;
|
|
9
|
+
repoOwner: string;
|
|
10
|
+
repo: string;
|
|
11
|
+
branch: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AddBuildStageParams {
|
|
14
|
+
stageName?: string;
|
|
15
|
+
codeBuildProject: IProject;
|
|
16
|
+
sourceArtifact: Artifact;
|
|
17
|
+
environmentVariables?: EnvironmentVariables;
|
|
18
|
+
}
|
|
19
|
+
export interface CodePipelineProjectProps {
|
|
20
|
+
pipelineName?: string;
|
|
21
|
+
destroy?: boolean;
|
|
22
|
+
tags?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
export declare class CodePipelineProject extends Construct {
|
|
25
|
+
readonly s3Bucket: Bucket;
|
|
26
|
+
readonly pipeline: Pipeline;
|
|
27
|
+
constructor(scope: Construct, id: string, props: CodePipelineProjectProps);
|
|
28
|
+
addSourceStage(params: AddSourceStageParams): Artifact;
|
|
29
|
+
addBuildStage(params: AddBuildStageParams): void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { RemovalPolicy, PhysicalName } from "aws-cdk-lib";
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { Artifact, Pipeline } from "aws-cdk-lib/aws-codepipeline";
|
|
4
|
+
import { CodeBuildAction, CodeStarConnectionsSourceAction } from "aws-cdk-lib/aws-codepipeline-actions";
|
|
5
|
+
import { Bucket } from 'aws-cdk-lib/aws-s3';
|
|
6
|
+
import { tagResource } from "../lib/utils.js";
|
|
7
|
+
export class CodePipelineProject extends Construct {
|
|
8
|
+
s3Bucket;
|
|
9
|
+
pipeline;
|
|
10
|
+
constructor(scope, id, props) {
|
|
11
|
+
super(scope, id);
|
|
12
|
+
this.s3Bucket = new Bucket(this, 'CodePipelineArtifactBucket', {
|
|
13
|
+
bucketName: PhysicalName.GENERATE_IF_NEEDED,
|
|
14
|
+
removalPolicy: props.destroy !== undefined ? props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN : undefined,
|
|
15
|
+
autoDeleteObjects: props.destroy === true ? true : undefined
|
|
16
|
+
});
|
|
17
|
+
tagResource(this.s3Bucket, props.tags);
|
|
18
|
+
this.pipeline = new Pipeline(this, 'CodePipelineProject', {
|
|
19
|
+
pipelineName: props.pipelineName,
|
|
20
|
+
artifactBucket: this.s3Bucket
|
|
21
|
+
});
|
|
22
|
+
tagResource(this.pipeline, props.tags);
|
|
23
|
+
if (typeof props.destroy == 'boolean') {
|
|
24
|
+
this.pipeline.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
addSourceStage(params) {
|
|
28
|
+
const artifact = new Artifact();
|
|
29
|
+
this.pipeline.addStage({
|
|
30
|
+
stageName: params.stageName ?? 'Source',
|
|
31
|
+
actions: [
|
|
32
|
+
new CodeStarConnectionsSourceAction({
|
|
33
|
+
actionName: params.stageName ?? 'Source',
|
|
34
|
+
output: artifact,
|
|
35
|
+
connectionArn: params.codestarConnectionArn,
|
|
36
|
+
owner: params.repoOwner,
|
|
37
|
+
repo: params.repo,
|
|
38
|
+
branch: params.branch
|
|
39
|
+
})
|
|
40
|
+
]
|
|
41
|
+
});
|
|
42
|
+
return artifact;
|
|
43
|
+
}
|
|
44
|
+
addBuildStage(params) {
|
|
45
|
+
this.pipeline.addStage({
|
|
46
|
+
stageName: params.stageName ?? 'Build',
|
|
47
|
+
actions: [
|
|
48
|
+
new CodeBuildAction({
|
|
49
|
+
actionName: params.stageName ?? 'Build',
|
|
50
|
+
project: params.codeBuildProject,
|
|
51
|
+
input: params.sourceArtifact,
|
|
52
|
+
environmentVariables: params.environmentVariables
|
|
53
|
+
})
|
|
54
|
+
]
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY29kZXBpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQXFCOUMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFNBQVM7SUFDaEMsUUFBUSxDQUFTO0lBQ2pCLFFBQVEsQ0FBVztJQUVuQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEVBQUU7WUFDN0QsVUFBVSxFQUFFLFlBQVksQ0FBQyxrQkFBa0I7WUFDM0MsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3JILGlCQUFpQixFQUFFLEtBQUssQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDN0QsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ3hELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pHLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQTRCO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDckIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksUUFBUTtZQUN2QyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSwrQkFBK0IsQ0FBQztvQkFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksUUFBUTtvQkFDeEMsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLGFBQWEsRUFBRSxNQUFNLENBQUMscUJBQXFCO29CQUMzQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVM7b0JBQ3ZCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDakIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2lCQUN0QixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQTJCO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3JCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxJQUFJLE9BQU87WUFDdEMsT0FBTyxFQUFFO2dCQUNQLElBQUksZUFBZSxDQUFDO29CQUNsQixVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxPQUFPO29CQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtvQkFDaEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjO29CQUM1QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO2lCQUNsRCxDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBQaHlzaWNhbE5hbWUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSVByb2plY3QgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZFwiO1xuaW1wb3J0IHsgQXJ0aWZhY3QsIFBpcGVsaW5lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmVcIjtcbmltcG9ydCB7IENvZGVCdWlsZEFjdGlvbiwgQ29kZVN0YXJDb25uZWN0aW9uc1NvdXJjZUFjdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lLWFjdGlvbnNcIjtcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5cbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRWYXJpYWJsZXMgfSBmcm9tICcuL2NvZGVidWlsZC5qcyc7XG5pbXBvcnQgeyB0YWdSZXNvdXJjZSB9IGZyb20gXCIuLi9saWIvdXRpbHMuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZGRTb3VyY2VTdGFnZVBhcmFtcyB7XG4gIHN0YWdlTmFtZT86IHN0cmluZztcbiAgY29kZXN0YXJDb25uZWN0aW9uQXJuOiBzdHJpbmc7XG4gIHJlcG9Pd25lcjogc3RyaW5nO1xuICByZXBvOiBzdHJpbmc7XG4gIGJyYW5jaDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBBZGRCdWlsZFN0YWdlUGFyYW1zIHtcbiAgc3RhZ2VOYW1lPzogc3RyaW5nO1xuICBjb2RlQnVpbGRQcm9qZWN0OiBJUHJvamVjdDtcbiAgc291cmNlQXJ0aWZhY3Q6IEFydGlmYWN0O1xuICBlbnZpcm9ubWVudFZhcmlhYmxlcz86IEVudmlyb25tZW50VmFyaWFibGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVQaXBlbGluZVByb2plY3RQcm9wcyB7XG4gIHBpcGVsaW5lTmFtZT86IHN0cmluZztcbiAgZGVzdHJveT86IGJvb2xlYW47XG4gIHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuZXhwb3J0IGNsYXNzIENvZGVQaXBlbGluZVByb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgczNCdWNrZXQ6IEJ1Y2tldDtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29kZVBpcGVsaW5lUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuczNCdWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsICdDb2RlUGlwZWxpbmVBcnRpZmFjdEJ1Y2tldCcsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IFBoeXNpY2FsTmFtZS5HRU5FUkFURV9JRl9ORUVERUQsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5kZXN0cm95ICE9PSB1bmRlZmluZWQgPyBwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4gOiB1bmRlZmluZWQsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogcHJvcHMuZGVzdHJveSA9PT0gdHJ1ZSA/IHRydWUgOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLnMzQnVja2V0LCBwcm9wcy50YWdzKTtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgJ0NvZGVQaXBlbGluZVByb2plY3QnLCB7XG4gICAgICBwaXBlbGluZU5hbWU6IHByb3BzLnBpcGVsaW5lTmFtZSxcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLnMzQnVja2V0XG4gICAgfSk7XG5cbiAgICB0YWdSZXNvdXJjZSh0aGlzLnBpcGVsaW5lLCBwcm9wcy50YWdzKTtcbiAgICBpZiAodHlwZW9mIHByb3BzLmRlc3Ryb3kgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLnBpcGVsaW5lLmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4pO1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZVN0YWdlKHBhcmFtczogQWRkU291cmNlU3RhZ2VQYXJhbXMpOiBBcnRpZmFjdCB7XG4gICAgY29uc3QgYXJ0aWZhY3QgPSBuZXcgQXJ0aWZhY3QoKTtcbiAgICB0aGlzLnBpcGVsaW5lLmFkZFN0YWdlKHtcbiAgICAgIHN0YWdlTmFtZTogcGFyYW1zLnN0YWdlTmFtZSA/PyAnU291cmNlJyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgbmV3IENvZGVTdGFyQ29ubmVjdGlvbnNTb3VyY2VBY3Rpb24oe1xuICAgICAgICAgIGFjdGlvbk5hbWU6IHBhcmFtcy5zdGFnZU5hbWUgPz8gJ1NvdXJjZScsXG4gICAgICAgICAgb3V0cHV0OiBhcnRpZmFjdCxcbiAgICAgICAgICBjb25uZWN0aW9uQXJuOiBwYXJhbXMuY29kZXN0YXJDb25uZWN0aW9uQXJuLFxuICAgICAgICAgIG93bmVyOiBwYXJhbXMucmVwb093bmVyLFxuICAgICAgICAgIHJlcG86IHBhcmFtcy5yZXBvLFxuICAgICAgICAgIGJyYW5jaDogcGFyYW1zLmJyYW5jaFxuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBhcnRpZmFjdDtcbiAgfVxuXG4gIGFkZEJ1aWxkU3RhZ2UocGFyYW1zOiBBZGRCdWlsZFN0YWdlUGFyYW1zKSB7XG4gICAgdGhpcy5waXBlbGluZS5hZGRTdGFnZSh7XG4gICAgICBzdGFnZU5hbWU6IHBhcmFtcy5zdGFnZU5hbWUgPz8gJ0J1aWxkJyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgbmV3IENvZGVCdWlsZEFjdGlvbih7XG4gICAgICAgICAgYWN0aW9uTmFtZTogcGFyYW1zLnN0YWdlTmFtZSA/PyAnQnVpbGQnLFxuICAgICAgICAgIHByb2plY3Q6IHBhcmFtcy5jb2RlQnVpbGRQcm9qZWN0LFxuICAgICAgICAgIGlucHV0OiBwYXJhbXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHBhcmFtcy5lbnZpcm9ubWVudFZhcmlhYmxlc1xuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pO1xuICB9XG59Il19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IDistribution } from "aws-cdk-lib/aws-cloudfront";
|
|
2
|
+
import { ARecord, AaaaRecord, IHostedZone } from "aws-cdk-lib/aws-route53";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export interface CloudFrontAliasProps {
|
|
5
|
+
hostedZone: IHostedZone;
|
|
6
|
+
domainName: string;
|
|
7
|
+
distribution: IDistribution;
|
|
8
|
+
}
|
|
9
|
+
export declare class CloudFrontAlias extends Construct {
|
|
10
|
+
readonly aRecord: ARecord;
|
|
11
|
+
readonly aaaaRecord: AaaaRecord;
|
|
12
|
+
constructor(scope: Construct, id: string, props: CloudFrontAliasProps);
|
|
13
|
+
}
|
|
14
|
+
export declare function getHostedZone(scope: Construct, id: string, domainName: string): IHostedZone;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ARecord, AaaaRecord, HostedZone, RecordTarget } from "aws-cdk-lib/aws-route53";
|
|
2
|
+
import { CloudFrontTarget } from "aws-cdk-lib/aws-route53-targets";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export class CloudFrontAlias extends Construct {
|
|
5
|
+
aRecord;
|
|
6
|
+
aaaaRecord;
|
|
7
|
+
constructor(scope, id, props) {
|
|
8
|
+
super(scope, id);
|
|
9
|
+
this.aRecord = new ARecord(this, `ARecord-${props.domainName}`, {
|
|
10
|
+
zone: props.hostedZone,
|
|
11
|
+
target: RecordTarget.fromAlias(new CloudFrontTarget(props.distribution)),
|
|
12
|
+
recordName: props.domainName
|
|
13
|
+
});
|
|
14
|
+
this.aaaaRecord = new AaaaRecord(this, `AaaaRecord-${props.domainName}`, {
|
|
15
|
+
zone: props.hostedZone,
|
|
16
|
+
target: RecordTarget.fromAlias(new CloudFrontTarget(props.distribution)),
|
|
17
|
+
recordName: props.domainName
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function getHostedZone(scope, id, domainName) {
|
|
22
|
+
return HostedZone.fromLookup(scope, `getHostedZone-${domainName}`, { domainName });
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGU1My5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL3JvdXRlNTMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFlLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFPdkMsTUFBTSxPQUFPLGVBQWdCLFNBQVEsU0FBUztJQUM1QixPQUFPLENBQVU7SUFDakIsVUFBVSxDQUFhO0lBRXZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkI7UUFDbkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUM5RCxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDdEIsTUFBTSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLGNBQWMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3ZFLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVTtZQUN0QixNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4RSxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxVQUFrQjtJQUM1RSxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGlCQUFpQixVQUFVLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IEFSZWNvcmQsIEFhYWFSZWNvcmQsIEhvc3RlZFpvbmUsIElIb3N0ZWRab25lLCBSZWNvcmRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250QWxpYXNQcm9wcyB7XG4gIGhvc3RlZFpvbmU6IElIb3N0ZWRab25lO1xuICBkb21haW5OYW1lOiBzdHJpbmc7XG4gIGRpc3RyaWJ1dGlvbjogSURpc3RyaWJ1dGlvbjsgXG59XG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udEFsaWFzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGFSZWNvcmQ6IEFSZWNvcmQ7XG4gIHB1YmxpYyByZWFkb25seSBhYWFhUmVjb3JkOiBBYWFhUmVjb3JkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbG91ZEZyb250QWxpYXNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmFSZWNvcmQgPSBuZXcgQVJlY29yZCh0aGlzLCBgQVJlY29yZC0ke3Byb3BzLmRvbWFpbk5hbWV9YCwge1xuICAgICAgem9uZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgQ2xvdWRGcm9udFRhcmdldChwcm9wcy5kaXN0cmlidXRpb24pKSxcbiAgICAgIHJlY29yZE5hbWU6IHByb3BzLmRvbWFpbk5hbWVcbiAgICB9KTtcblxuICAgIHRoaXMuYWFhYVJlY29yZCA9IG5ldyBBYWFhUmVjb3JkKHRoaXMsIGBBYWFhUmVjb3JkLSR7cHJvcHMuZG9tYWluTmFtZX1gLCB7XG4gICAgICB6b25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyBDbG91ZEZyb250VGFyZ2V0KHByb3BzLmRpc3RyaWJ1dGlvbikpLFxuICAgICAgcmVjb3JkTmFtZTogcHJvcHMuZG9tYWluTmFtZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb3N0ZWRab25lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGRvbWFpbk5hbWU6IHN0cmluZykge1xuICByZXR1cm4gSG9zdGVkWm9uZS5mcm9tTG9va3VwKHNjb3BlLCBgZ2V0SG9zdGVkWm9uZS0ke2RvbWFpbk5hbWV9YCwgeyBkb21haW5OYW1lIH0pO1xufSJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { Bucket } from 'aws-cdk-lib/aws-s3';
|
|
3
|
+
export interface S3BucketProps {
|
|
4
|
+
/** The name of the S3 bucket */
|
|
5
|
+
bucketName?: string;
|
|
6
|
+
destroy?: boolean;
|
|
7
|
+
tags?: Record<string, string>;
|
|
8
|
+
}
|
|
9
|
+
export declare class S3Bucket extends Construct {
|
|
10
|
+
readonly bucket: Bucket;
|
|
11
|
+
constructor(scope: Construct, id: string, props: S3BucketProps);
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RemovalPolicy } from "aws-cdk-lib";
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { Bucket } from 'aws-cdk-lib/aws-s3';
|
|
4
|
+
import { tagResource } from '../lib/utils.js';
|
|
5
|
+
export class S3Bucket extends Construct {
|
|
6
|
+
bucket;
|
|
7
|
+
constructor(scope, id, props) {
|
|
8
|
+
super(scope, id);
|
|
9
|
+
this.bucket = new Bucket(this, 'S3Bucket', {
|
|
10
|
+
bucketName: props.bucketName,
|
|
11
|
+
removalPolicy: props.destroy !== undefined ? props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN : undefined,
|
|
12
|
+
autoDeleteObjects: props.destroy === true ? true : undefined
|
|
13
|
+
});
|
|
14
|
+
tagResource(this.bucket, props.tags);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9zMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVM5QyxNQUFNLE9BQU8sUUFBUyxTQUFRLFNBQVM7SUFDckIsTUFBTSxDQUFTO0lBRS9CLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDekMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNySCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzdELENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyB0YWdSZXNvdXJjZSB9IGZyb20gJy4uL2xpYi91dGlscy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUzNCdWNrZXRQcm9wcyB7XG4gIC8qKiBUaGUgbmFtZSBvZiB0aGUgUzMgYnVja2V0ICovXG4gIGJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIGRlc3Ryb3k/OiBib29sZWFuO1xuICB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIFMzQnVja2V0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldDogQnVja2V0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTM0J1Y2tldFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCAnUzNCdWNrZXQnLCB7XG4gICAgICBidWNrZXROYW1lOiBwcm9wcy5idWNrZXROYW1lLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMuZGVzdHJveSAhPT0gdW5kZWZpbmVkID8gcHJvcHMuZGVzdHJveSA/IFJlbW92YWxQb2xpY3kuREVTVFJPWSA6IFJlbW92YWxQb2xpY3kuUkVUQUlOIDogdW5kZWZpbmVkLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHByb3BzLmRlc3Ryb3kgPT09IHRydWUgPyB0cnVlIDogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5idWNrZXQsIHByb3BzLnRhZ3MpO1xuICB9XG59Il19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
|
|
3
|
+
import type { IResourceProps } from '../lib/types.js';
|
|
4
|
+
export type WebAclManagedRule = 'AWSManagedRulesAmazonIpReputationList' | 'AWSManagedRulesAnonymousIpList' | 'AWSManagedRulesCommonRuleSet' | 'AWSManagedRulesKnownBadInputsRuleSet' | 'AWSManagedRulesSQLiRuleSet';
|
|
5
|
+
export interface CloudFrontWebAclProps extends IResourceProps {
|
|
6
|
+
name: string;
|
|
7
|
+
managedRules?: (WebAclManagedRule & string)[];
|
|
8
|
+
}
|
|
9
|
+
export declare class CloudFrontWebAcl extends Construct {
|
|
10
|
+
readonly acl: CfnWebACL;
|
|
11
|
+
constructor(scope: Construct, id: string, props: CloudFrontWebAclProps);
|
|
12
|
+
}
|
|
13
|
+
export interface ApiGatewayWebAclProps extends IResourceProps {
|
|
14
|
+
name: string;
|
|
15
|
+
aclScope?: 'CLOUDFRONT' | 'REGIONAL';
|
|
16
|
+
managedRules?: (WebAclManagedRule & string)[];
|
|
17
|
+
}
|
|
18
|
+
export declare class ApiGatewayWebAcl extends Construct {
|
|
19
|
+
readonly acl: CfnWebACL;
|
|
20
|
+
constructor(scope: Construct, id: string, props: ApiGatewayWebAclProps);
|
|
21
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { RemovalPolicy } from "aws-cdk-lib";
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
|
|
4
|
+
import { cleanResourceName, tagResource } from '../lib/utils.js';
|
|
5
|
+
export class CloudFrontWebAcl extends Construct {
|
|
6
|
+
acl;
|
|
7
|
+
constructor(scope, id, props) {
|
|
8
|
+
super(scope, id);
|
|
9
|
+
props.name = cleanResourceName(props.name);
|
|
10
|
+
if (!props.managedRules) {
|
|
11
|
+
props.managedRules = [
|
|
12
|
+
'AWSManagedRulesAmazonIpReputationList',
|
|
13
|
+
'AWSManagedRulesAnonymousIpList',
|
|
14
|
+
'AWSManagedRulesCommonRuleSet',
|
|
15
|
+
'AWSManagedRulesKnownBadInputsRuleSet'
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
this.acl = new CfnWebACL(this, 'CloudFrontWebAcl', {
|
|
19
|
+
scope: 'CLOUDFRONT',
|
|
20
|
+
name: props.name,
|
|
21
|
+
defaultAction: { allow: {} },
|
|
22
|
+
visibilityConfig: {
|
|
23
|
+
cloudWatchMetricsEnabled: true,
|
|
24
|
+
sampledRequestsEnabled: true,
|
|
25
|
+
metricName: `${props.name}-metrics`
|
|
26
|
+
},
|
|
27
|
+
rules: transformManagedRules(props.managedRules)
|
|
28
|
+
});
|
|
29
|
+
tagResource(this.acl, props.tags);
|
|
30
|
+
if (typeof props.destroy == 'boolean') {
|
|
31
|
+
this.acl.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class ApiGatewayWebAcl extends Construct {
|
|
36
|
+
acl;
|
|
37
|
+
constructor(scope, id, props) {
|
|
38
|
+
super(scope, id);
|
|
39
|
+
props.name = cleanResourceName(props.name);
|
|
40
|
+
if (!props.managedRules) {
|
|
41
|
+
props.managedRules = [
|
|
42
|
+
'AWSManagedRulesAmazonIpReputationList',
|
|
43
|
+
'AWSManagedRulesAnonymousIpList',
|
|
44
|
+
'AWSManagedRulesCommonRuleSet',
|
|
45
|
+
'AWSManagedRulesKnownBadInputsRuleSet',
|
|
46
|
+
'AWSManagedRulesSQLiRuleSet'
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
this.acl = new CfnWebACL(this, 'ApiGatewayWebAcl', {
|
|
50
|
+
scope: props.aclScope ?? 'REGIONAL',
|
|
51
|
+
name: props.name,
|
|
52
|
+
defaultAction: { allow: {} },
|
|
53
|
+
visibilityConfig: {
|
|
54
|
+
cloudWatchMetricsEnabled: true,
|
|
55
|
+
sampledRequestsEnabled: true,
|
|
56
|
+
metricName: `${props.name}-metrics`
|
|
57
|
+
},
|
|
58
|
+
rules: transformManagedRules(props.managedRules)
|
|
59
|
+
});
|
|
60
|
+
tagResource(this.acl, props.tags);
|
|
61
|
+
if (typeof props.destroy == 'boolean') {
|
|
62
|
+
this.acl.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function transformManagedRules(rules) {
|
|
67
|
+
return rules.map((ruleName, i) => {
|
|
68
|
+
return {
|
|
69
|
+
name: `AWS-${ruleName}`,
|
|
70
|
+
priority: i,
|
|
71
|
+
statement: {
|
|
72
|
+
managedRuleGroupStatement: {
|
|
73
|
+
name: ruleName,
|
|
74
|
+
vendorName: 'AWS'
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
overrideAction: { none: {} },
|
|
78
|
+
visibilityConfig: {
|
|
79
|
+
cloudWatchMetricsEnabled: true,
|
|
80
|
+
sampledRequestsEnabled: true,
|
|
81
|
+
metricName: `AWS-${ruleName}`
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvd2FmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBY2pFLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxTQUFTO0lBQzdCLEdBQUcsQ0FBWTtJQUUvQixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsS0FBSyxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsWUFBWSxHQUFHO2dCQUNuQix1Q0FBdUM7Z0JBQ3ZDLGdDQUFnQztnQkFDaEMsOEJBQThCO2dCQUM5QixzQ0FBc0M7YUFDdkMsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNqRCxLQUFLLEVBQUUsWUFBWTtZQUNuQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUM1QixnQkFBZ0IsRUFBRTtnQkFDaEIsd0JBQXdCLEVBQUUsSUFBSTtnQkFDOUIsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksVUFBVTthQUNwQztZQUNELEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1NBQ2pELENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBT0QsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFNBQVM7SUFDN0IsR0FBRyxDQUFZO0lBQy9CLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixLQUFLLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxZQUFZLEdBQUc7Z0JBQ25CLHVDQUF1QztnQkFDdkMsZ0NBQWdDO2dCQUNoQyw4QkFBOEI7Z0JBQzlCLHNDQUFzQztnQkFDdEMsNEJBQTRCO2FBQzdCLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDakQsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksVUFBVTtZQUNuQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUM1QixnQkFBZ0IsRUFBRTtnQkFDaEIsd0JBQXdCLEVBQUUsSUFBSTtnQkFDOUIsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksVUFBVTthQUNwQztZQUNELEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1NBQ2pELENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBR0QsU0FBUyxxQkFBcUIsQ0FBQyxLQUFxQztJQUNsRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDL0IsT0FBTztZQUNMLElBQUksRUFBRSxPQUFPLFFBQVEsRUFBRTtZQUN2QixRQUFRLEVBQUUsQ0FBQztZQUNYLFNBQVMsRUFBRTtnQkFDVCx5QkFBeUIsRUFBRTtvQkFDekIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCO2FBQ0Y7WUFDRCxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQzVCLGdCQUFnQixFQUFFO2dCQUNoQix3QkFBd0IsRUFBRSxJQUFJO2dCQUM5QixzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixVQUFVLEVBQUUsT0FBTyxRQUFRLEVBQUU7YUFDOUI7U0FDd0IsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENmbldlYkFDTCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy13YWZ2Mic7XG5pbXBvcnQgeyBjbGVhblJlc291cmNlTmFtZSwgdGFnUmVzb3VyY2UgfSBmcm9tICcuLi9saWIvdXRpbHMuanMnO1xuaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2VQcm9wcyB9IGZyb20gJy4uL2xpYi90eXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIFdlYkFjbE1hbmFnZWRSdWxlID0gXG4gICdBV1NNYW5hZ2VkUnVsZXNBbWF6b25JcFJlcHV0YXRpb25MaXN0JyB8XG4gICdBV1NNYW5hZ2VkUnVsZXNBbm9ueW1vdXNJcExpc3QnIHxcbiAgJ0FXU01hbmFnZWRSdWxlc0NvbW1vblJ1bGVTZXQnIHxcbiAgJ0FXU01hbmFnZWRSdWxlc0tub3duQmFkSW5wdXRzUnVsZVNldCcgfFxuICAnQVdTTWFuYWdlZFJ1bGVzU1FMaVJ1bGVTZXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnRXZWJBY2xQcm9wcyBleHRlbmRzIElSZXNvdXJjZVByb3BzIHtcbiAgbmFtZTogc3RyaW5nO1xuICBtYW5hZ2VkUnVsZXM/OiAoV2ViQWNsTWFuYWdlZFJ1bGUgJiBzdHJpbmcpW107XG59XG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udFdlYkFjbCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBhY2w6IENmbldlYkFDTDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xvdWRGcm9udFdlYkFjbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHByb3BzLm5hbWUgPSBjbGVhblJlc291cmNlTmFtZShwcm9wcy5uYW1lKTtcblxuICAgIGlmICghcHJvcHMubWFuYWdlZFJ1bGVzKSB7XG4gICAgICBwcm9wcy5tYW5hZ2VkUnVsZXMgPSBbXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNBbWF6b25JcFJlcHV0YXRpb25MaXN0JyxcbiAgICAgICAgJ0FXU01hbmFnZWRSdWxlc0Fub255bW91c0lwTGlzdCcsXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNDb21tb25SdWxlU2V0JyxcbiAgICAgICAgJ0FXU01hbmFnZWRSdWxlc0tub3duQmFkSW5wdXRzUnVsZVNldCdcbiAgICAgIF07XG4gICAgfVxuXG4gICAgdGhpcy5hY2wgPSBuZXcgQ2ZuV2ViQUNMKHRoaXMsICdDbG91ZEZyb250V2ViQWNsJywge1xuICAgICAgc2NvcGU6ICdDTE9VREZST05UJyxcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICBkZWZhdWx0QWN0aW9uOiB7IGFsbG93OiB7fSB9LFxuICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIG1ldHJpY05hbWU6IGAke3Byb3BzLm5hbWV9LW1ldHJpY3NgXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHRyYW5zZm9ybU1hbmFnZWRSdWxlcyhwcm9wcy5tYW5hZ2VkUnVsZXMpXG4gICAgfSk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5hY2wsIHByb3BzLnRhZ3MpO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZGVzdHJveSA9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuYWNsLmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4pO1xuICAgIH0gXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlHYXRld2F5V2ViQWNsUHJvcHMgZXh0ZW5kcyBJUmVzb3VyY2VQcm9wcyB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWNsU2NvcGU/OiAnQ0xPVURGUk9OVCcgfCAnUkVHSU9OQUwnO1xuICBtYW5hZ2VkUnVsZXM/OiAoV2ViQWNsTWFuYWdlZFJ1bGUgJiBzdHJpbmcpW107XG59XG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheVdlYkFjbCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBhY2w6IENmbldlYkFDTDtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFwaUdhdGV3YXlXZWJBY2xQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBwcm9wcy5uYW1lID0gY2xlYW5SZXNvdXJjZU5hbWUocHJvcHMubmFtZSk7XG5cbiAgICBpZiAoIXByb3BzLm1hbmFnZWRSdWxlcykge1xuICAgICAgcHJvcHMubWFuYWdlZFJ1bGVzID0gW1xuICAgICAgICAnQVdTTWFuYWdlZFJ1bGVzQW1hem9uSXBSZXB1dGF0aW9uTGlzdCcsXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNBbm9ueW1vdXNJcExpc3QnLFxuICAgICAgICAnQVdTTWFuYWdlZFJ1bGVzQ29tbW9uUnVsZVNldCcsXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNLbm93bkJhZElucHV0c1J1bGVTZXQnLFxuICAgICAgICAnQVdTTWFuYWdlZFJ1bGVzU1FMaVJ1bGVTZXQnXG4gICAgICBdO1xuICAgIH1cblxuICAgIHRoaXMuYWNsID0gbmV3IENmbldlYkFDTCh0aGlzLCAnQXBpR2F0ZXdheVdlYkFjbCcsIHtcbiAgICAgIHNjb3BlOiBwcm9wcy5hY2xTY29wZSA/PyAnUkVHSU9OQUwnLFxuICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGRlZmF1bHRBY3Rpb246IHsgYWxsb3c6IHt9IH0sXG4gICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbWV0cmljTmFtZTogYCR7cHJvcHMubmFtZX0tbWV0cmljc2BcbiAgICAgIH0sXG4gICAgICBydWxlczogdHJhbnNmb3JtTWFuYWdlZFJ1bGVzKHByb3BzLm1hbmFnZWRSdWxlcylcbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLmFjbCwgcHJvcHMudGFncyk7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5kZXN0cm95ID09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5hY2wuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLmRlc3Ryb3kgPyBSZW1vdmFsUG9saWN5LkRFU1RST1kgOiBSZW1vdmFsUG9saWN5LlJFVEFJTik7XG4gICAgfSBcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1hbmFnZWRSdWxlcyhydWxlczogKFdlYkFjbE1hbmFnZWRSdWxlIHwgc3RyaW5nKVtdKTogQ2ZuV2ViQUNMLlJ1bGVQcm9wZXJ0eVtdIHtcbiAgcmV0dXJuIHJ1bGVzLm1hcCgocnVsZU5hbWUsIGkpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogYEFXUy0ke3J1bGVOYW1lfWAsXG4gICAgICBwcmlvcml0eTogaSxcbiAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICBtYW5hZ2VkUnVsZUdyb3VwU3RhdGVtZW50OiB7XG4gICAgICAgICAgbmFtZTogcnVsZU5hbWUsXG4gICAgICAgICAgdmVuZG9yTmFtZTogJ0FXUydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG92ZXJyaWRlQWN0aW9uOiB7IG5vbmU6IHt9IH0sXG4gICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7IFxuICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIG1ldHJpY05hbWU6IGBBV1MtJHtydWxlTmFtZX1gXG4gICAgICB9XG4gICAgfSBhcyBDZm5XZWJBQ0wuUnVsZVByb3BlcnR5O1xuICB9KTtcbn0iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IConstruct } from 'constructs';
|
|
2
|
+
export declare function domainAsId(domain: string): string;
|
|
3
|
+
export declare function cleanResourceName(name: string): string;
|
|
4
|
+
export declare function tagResource(resource: IConstruct, tags?: Record<string, string>): void;
|
|
5
|
+
export declare function mergeTags(...tags: (Record<string, string> | null | undefined)[]): Record<string, string>;
|