@pwrdrvr/microapps-cdk 0.0.28 → 0.0.29
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/.jsii +1884 -185
- package/API.md +890 -60
- package/README.md +2 -8
- package/lib/MicroApps.d.ts +77 -44
- package/lib/MicroApps.js +62 -33
- package/lib/MicroAppsAPIGwy.d.ts +123 -0
- package/lib/MicroAppsAPIGwy.js +178 -0
- package/lib/MicroAppsCF.d.ts +179 -17
- package/lib/MicroAppsCF.js +127 -45
- package/lib/MicroAppsS3.d.ts +114 -17
- package/lib/MicroAppsS3.js +55 -31
- package/lib/MicroAppsSvcs.d.ts +123 -25
- package/lib/MicroAppsSvcs.js +113 -152
- package/lib/index.d.ts +4 -0
- package/lib/index.js +5 -1
- package/lib/microapps-deployer/index.js +116 -88
- package/lib/microapps-deployer/index.js.map +3 -3
- package/lib/microapps-router/index.js +60 -51
- package/lib/microapps-router/index.js.map +3 -3
- package/lib/utils/ReverseDomain.d.ts +4 -0
- package/lib/utils/ReverseDomain.js +15 -0
- package/package.json +45 -45
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.MicroAppsAPIGwy = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const apigwy = require("@aws-cdk/aws-apigatewayv2");
|
|
7
|
+
const iam = require("@aws-cdk/aws-iam");
|
|
8
|
+
const logs = require("@aws-cdk/aws-logs");
|
|
9
|
+
const r53 = require("@aws-cdk/aws-route53");
|
|
10
|
+
const r53targets = require("@aws-cdk/aws-route53-targets");
|
|
11
|
+
const cdk = require("@aws-cdk/core");
|
|
12
|
+
/**
|
|
13
|
+
* @stability stable
|
|
14
|
+
*/
|
|
15
|
+
class MicroAppsAPIGwy extends cdk.Construct {
|
|
16
|
+
/**
|
|
17
|
+
* MicroApps - Create just API Gateway.
|
|
18
|
+
*
|
|
19
|
+
* @stability stable
|
|
20
|
+
*/
|
|
21
|
+
constructor(scope, id, props) {
|
|
22
|
+
super(scope, id);
|
|
23
|
+
if (props === undefined) {
|
|
24
|
+
throw new Error('props cannot be undefined');
|
|
25
|
+
}
|
|
26
|
+
if ((props.r53Zone === undefined && props.domainNameEdge !== undefined) ||
|
|
27
|
+
(props.r53Zone !== undefined && props.domainNameEdge === undefined)) {
|
|
28
|
+
throw new Error('If either of r53Zone or domainNameEdge are set then the other must be set');
|
|
29
|
+
}
|
|
30
|
+
if ((props.domainNameOrigin === undefined && props.certOrigin !== undefined) ||
|
|
31
|
+
(props.domainNameOrigin !== undefined && props.certOrigin === undefined)) {
|
|
32
|
+
throw new Error('If either of domainNameOrigin or certOrigin are set then the other must be set');
|
|
33
|
+
}
|
|
34
|
+
if ((props.domainNameEdge === undefined && props.certOrigin !== undefined) ||
|
|
35
|
+
(props.domainNameEdge !== undefined && props.certOrigin === undefined)) {
|
|
36
|
+
throw new Error('If either of domainNameOrigin or certOrigin are set then the other must be set');
|
|
37
|
+
}
|
|
38
|
+
const { r53Zone, domainNameEdge, domainNameOrigin, certOrigin, removalPolicy, assetNameRoot, assetNameSuffix, rootPathPrefix, } = props;
|
|
39
|
+
// API Gateway uses the `id` string as the gateway name without
|
|
40
|
+
// any randomization... we have to make sure the name is unique-ish
|
|
41
|
+
const apigatewayName = assetNameRoot
|
|
42
|
+
? `${assetNameRoot}${assetNameSuffix}`
|
|
43
|
+
: `${cdk.Stack.of(this).stackName}-microapps`;
|
|
44
|
+
//
|
|
45
|
+
// APIGateway domain names for CloudFront and origin
|
|
46
|
+
//
|
|
47
|
+
this._httpApi = new apigwy.HttpApi(this, 'gwy', {
|
|
48
|
+
apiName: apigatewayName,
|
|
49
|
+
createDefaultStage: false,
|
|
50
|
+
});
|
|
51
|
+
if (removalPolicy !== undefined) {
|
|
52
|
+
this._httpApi.applyRemovalPolicy(removalPolicy);
|
|
53
|
+
}
|
|
54
|
+
// Create the stage
|
|
55
|
+
const stage = new apigwy.HttpStage(this, 'stage', {
|
|
56
|
+
httpApi: this._httpApi,
|
|
57
|
+
autoDeploy: true,
|
|
58
|
+
// If rootPathPrefix is not defined this will be the $default stage
|
|
59
|
+
stageName: rootPathPrefix,
|
|
60
|
+
});
|
|
61
|
+
if (domainNameEdge !== undefined && certOrigin !== undefined) {
|
|
62
|
+
// Create Custom Domains for API Gateway
|
|
63
|
+
const dnAppsEdge = new apigwy.DomainName(this, 'microapps-apps-edge-dn', {
|
|
64
|
+
domainName: domainNameEdge,
|
|
65
|
+
certificate: certOrigin,
|
|
66
|
+
});
|
|
67
|
+
if (removalPolicy !== undefined) {
|
|
68
|
+
dnAppsEdge.applyRemovalPolicy(removalPolicy);
|
|
69
|
+
}
|
|
70
|
+
// Create the edge domain name mapping for the API
|
|
71
|
+
const apiMapping = new apigwy.ApiMapping(this, 'mapping', {
|
|
72
|
+
api: this._httpApi,
|
|
73
|
+
domainName: dnAppsEdge,
|
|
74
|
+
stage,
|
|
75
|
+
});
|
|
76
|
+
// 2022-01-16 - CDK is still generating CloudFormation with no dependency
|
|
77
|
+
// between the R53 RecordSet and the Mapping
|
|
78
|
+
apiMapping.node.addDependency(dnAppsEdge);
|
|
79
|
+
}
|
|
80
|
+
if (domainNameOrigin !== undefined && certOrigin !== undefined) {
|
|
81
|
+
this._dnAppsOrigin = new apigwy.DomainName(this, 'origin-dn', {
|
|
82
|
+
domainName: domainNameOrigin,
|
|
83
|
+
certificate: certOrigin,
|
|
84
|
+
});
|
|
85
|
+
if (removalPolicy !== undefined) {
|
|
86
|
+
this._dnAppsOrigin.applyRemovalPolicy(removalPolicy);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Enable access logs on API Gateway
|
|
90
|
+
const apiAccessLogs = new logs.LogGroup(this, 'logs', {
|
|
91
|
+
logGroupName: apigatewayName
|
|
92
|
+
? `/aws/apigwy/${apigatewayName}`
|
|
93
|
+
: `/aws/apigwy/${this.httpApi.httpApiName}`,
|
|
94
|
+
retention: logs.RetentionDays.TWO_WEEKS,
|
|
95
|
+
});
|
|
96
|
+
if (removalPolicy !== undefined) {
|
|
97
|
+
apiAccessLogs.applyRemovalPolicy(removalPolicy);
|
|
98
|
+
}
|
|
99
|
+
// const stage = this._httpApi.defaultStage?.node.defaultChild as apigwy.CfnStage;
|
|
100
|
+
stage.accessLogSettings = {
|
|
101
|
+
destinationArn: apiAccessLogs.logGroupArn,
|
|
102
|
+
format: JSON.stringify({
|
|
103
|
+
requestId: '$context.requestId',
|
|
104
|
+
userAgent: '$context.identity.userAgent',
|
|
105
|
+
sourceIp: '$context.identity.sourceIp',
|
|
106
|
+
requestTime: '$context.requestTime',
|
|
107
|
+
requestTimeEpoch: '$context.requestTimeEpoch',
|
|
108
|
+
httpMethod: '$context.httpMethod',
|
|
109
|
+
path: '$context.path',
|
|
110
|
+
status: '$context.status',
|
|
111
|
+
protocol: '$context.protocol',
|
|
112
|
+
responseLength: '$context.responseLength',
|
|
113
|
+
domainName: '$context.domainName',
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
// Create a logging role
|
|
117
|
+
// Tips: https://github.com/aws/aws-cdk/issues/11100
|
|
118
|
+
const apiGwyLogRole = new iam.Role(this, 'logs-role', {
|
|
119
|
+
managedPolicies: [
|
|
120
|
+
iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonAPIGatewayPushToCloudWatchLogs'),
|
|
121
|
+
],
|
|
122
|
+
assumedBy: new iam.ServicePrincipal('apigateway.amazonaws.com'),
|
|
123
|
+
});
|
|
124
|
+
apiAccessLogs.grantWrite(apiGwyLogRole);
|
|
125
|
+
//
|
|
126
|
+
// Let API Gateway accept requests using domainNameOrigin
|
|
127
|
+
// That is the origin URI that CloudFront uses for this gateway.
|
|
128
|
+
// The gateway will refuse the traffic if it doesn't have the
|
|
129
|
+
// domain name registered.
|
|
130
|
+
//
|
|
131
|
+
if (this._dnAppsOrigin !== undefined) {
|
|
132
|
+
const mappingAppsApis = new apigwy.ApiMapping(this, 'api-map-origin', {
|
|
133
|
+
api: this._httpApi,
|
|
134
|
+
domainName: this._dnAppsOrigin,
|
|
135
|
+
stage,
|
|
136
|
+
});
|
|
137
|
+
// 2022-01-16 - CDK is still generating CloudFormation with no dependency
|
|
138
|
+
// between the R53 RecordSet and the Mapping
|
|
139
|
+
mappingAppsApis.node.addDependency(this._dnAppsOrigin);
|
|
140
|
+
if (removalPolicy !== undefined) {
|
|
141
|
+
mappingAppsApis.applyRemovalPolicy(removalPolicy);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//
|
|
145
|
+
// Create the origin name for API Gateway
|
|
146
|
+
//
|
|
147
|
+
if (r53Zone !== undefined && this._dnAppsOrigin) {
|
|
148
|
+
const rrAppsOrigin = new r53.ARecord(this, 'origin-arecord', {
|
|
149
|
+
zone: r53Zone,
|
|
150
|
+
recordName: domainNameOrigin,
|
|
151
|
+
target: r53.RecordTarget.fromAlias(new r53targets.ApiGatewayv2DomainProperties(this._dnAppsOrigin.regionalDomainName, this._dnAppsOrigin.regionalHostedZoneId)),
|
|
152
|
+
});
|
|
153
|
+
if (removalPolicy !== undefined) {
|
|
154
|
+
rrAppsOrigin.applyRemovalPolicy(removalPolicy);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Domain Name applied to API Gateway origin.
|
|
160
|
+
*
|
|
161
|
+
* @stability stable
|
|
162
|
+
*/
|
|
163
|
+
get dnAppsOrigin() {
|
|
164
|
+
return this._dnAppsOrigin;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* API Gateway.
|
|
168
|
+
*
|
|
169
|
+
* @stability stable
|
|
170
|
+
*/
|
|
171
|
+
get httpApi() {
|
|
172
|
+
return this._httpApi;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.MicroAppsAPIGwy = MicroAppsAPIGwy;
|
|
176
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
177
|
+
MicroAppsAPIGwy[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsAPIGwy", version: "0.0.29" };
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzQVBJR3d5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwc0FQSUd3eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUFvRDtBQUVwRCx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBQzFDLDRDQUE0QztBQUM1QywyREFBMkQ7QUFDM0QscUNBQXFDOzs7O0FBb0NyQyxNQUFhLGVBQWdCLFNBQVEsR0FBRyxDQUFDLFNBQVM7Ozs7OztJQVloRCxZQUFZLEtBQW9CLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM5QztRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQztZQUNuRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLEVBQ25FO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsSUFDRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUM7WUFDeEUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLEVBQ3hFO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FDYixnRkFBZ0YsQ0FDakYsQ0FBQztTQUNIO1FBRUQsSUFDRSxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO1lBQ3RFLENBQUMsS0FB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QUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7O0FBVEgsMENBOExDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXBpZ3d5IGZyb20gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5djInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ0Bhd3MtY2RrL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ0Bhd3MtY2RrL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdAYXdzLWNkay9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyByNTMgZnJvbSAnQGF3cy1jZGsvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgcjUzdGFyZ2V0cyBmcm9tICdAYXdzLWNkay9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdAYXdzLWNkay9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBNaWNyb0FwcHNBUElHd3lQcm9wcyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBjZGsuUmVtb3ZhbFBvbGljeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVFZGdlPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVPcmlnaW4/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYXNzZXROYW1lUm9vdD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYXNzZXROYW1lU3VmZml4Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNlcnRPcmlnaW4/OiBhY20uSUNlcnRpZmljYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcjUzWm9uZT86IHI1My5JSG9zdGVkWm9uZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHJvb3RQYXRoUHJlZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNaWNyb0FwcHNBUElHd3kge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkbkFwcHNPcmlnaW4/OiBhcGlnd3kuSURvbWFpbk5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgaHR0cEFwaTogYXBpZ3d5Lkh0dHBBcGk7XG59XG5cbmV4cG9ydCBjbGFzcyBNaWNyb0FwcHNBUElHd3kgZXh0ZW5kcyBjZGsuQ29uc3RydWN0IGltcGxlbWVudHMgSU1pY3JvQXBwc0FQSUd3eSB7XG4gIHByaXZhdGUgX2RuQXBwc09yaWdpbjogYXBpZ3d5LkRvbWFpbk5hbWUgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBnZXQgZG5BcHBzT3JpZ2luKCk6IGFwaWd3eS5JRG9tYWluTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RuQXBwc09yaWdpbjtcbiAgfVxuXG4gIHByaXZhdGUgX2h0dHBBcGk6IGFwaWd3eS5IdHRwQXBpO1xuICBwdWJsaWMgZ2V0IGh0dHBBcGkoKTogYXBpZ3d5Lkh0dHBBcGkge1xuICAgIHJldHVybiB0aGlzLl9odHRwQXBpO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogTWljcm9BcHBzQVBJR3d5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvcHMgY2Fubm90IGJlIHVuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChwcm9wcy5yNTNab25lID09PSB1bmRlZmluZWQgJiYgcHJvcHMuZG9tYWluTmFtZUVkZ2UgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgIChwcm9wcy5yNTNab25lICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZG9tYWluTmFtZUVkZ2UgPT09IHVuZGVmaW5lZClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSWYgZWl0aGVyIG9mIHI1M1pvbmUgb3IgZG9tYWluTmFtZUVkZ2UgYXJlIHNldCB0aGVuIHRoZSBvdGhlciBtdXN0IGJlIHNldCcpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChwcm9wcy5kb21haW5OYW1lT3JpZ2luID09PSB1bmRlZmluZWQgJiYgcHJvcHMuY2VydE9yaWdpbiAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgKHByb3BzLmRvbWFpbk5hbWVPcmlnaW4gIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlaXRoZXIgb2YgZG9tYWluTmFtZU9yaWdpbiBvciBjZXJ0T3JpZ2luIGFyZSBzZXQgdGhlbiB0aGUgb3RoZXIgbXVzdCBiZSBzZXQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAocHJvcHMuZG9tYWluTmFtZUVkZ2UgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAocHJvcHMuZG9tYWluTmFtZUVkZ2UgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlaXRoZXIgb2YgZG9tYWluTmFtZU9yaWdpbiBvciBjZXJ0T3JpZ2luIGFyZSBzZXQgdGhlbiB0aGUgb3RoZXIgbXVzdCBiZSBzZXQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICByNTNab25lLFxuICAgICAgZG9tYWluTmFtZUVkZ2UsXG4gICAgICBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgY2VydE9yaWdpbixcbiAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICBhc3NldE5hbWVSb290LFxuICAgICAgYXNzZXROYW1lU3VmZml4LFxuICAgICAgcm9vdFBhdGhQcmVmaXgsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gQVBJIEdhdGV3YXkgdXNlcyB0aGUgYGlkYCBzdHJpbmcgYXMgdGhlIGdhdGV3YXkgbmFtZSB3aXRob3V0XG4gICAgLy8gYW55IHJhbmRvbWl6YXRpb24uLi4gd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlLWlzaFxuICAgIGNvbnN0IGFwaWdhdGV3YXlOYW1lID0gYXNzZXROYW1lUm9vdFxuICAgICAgPyBgJHthc3NldE5hbWVSb290fSR7YXNzZXROYW1lU3VmZml4fWBcbiAgICAgIDogYCR7Y2RrLlN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX0tbWljcm9hcHBzYDtcblxuICAgIC8vXG4gICAgLy8gQVBJR2F0ZXdheSBkb21haW4gbmFtZXMgZm9yIENsb3VkRnJvbnQgYW5kIG9yaWdpblxuICAgIC8vXG4gICAgdGhpcy5faHR0cEFwaSA9IG5ldyBhcGlnd3kuSHR0cEFwaSh0aGlzLCAnZ3d5Jywge1xuICAgICAgYXBpTmFtZTogYXBpZ2F0ZXdheU5hbWUsXG4gICAgICBjcmVhdGVEZWZhdWx0U3RhZ2U6IGZhbHNlLFxuICAgIH0pO1xuICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2h0dHBBcGkuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgc3RhZ2VcbiAgICBjb25zdCBzdGFnZSA9IG5ldyBhcGlnd3kuSHR0cFN0YWdlKHRoaXMsICdzdGFnZScsIHtcbiAgICAgIGh0dHBBcGk6IHRoaXMuX2h0dHBBcGksXG4gICAgICBhdXRvRGVwbG95OiB0cnVlLFxuICAgICAgLy8gSWYgcm9vdFBhdGhQcmVmaXggaXMgbm90IGRlZmluZWQgdGhpcyB3aWxsIGJlIHRoZSAkZGVmYXVsdCBzdGFnZVxuICAgICAgc3RhZ2VOYW1lOiByb290UGF0aFByZWZpeCxcbiAgICB9KTtcblxuICAgIGlmIChkb21haW5OYW1lRWRnZSAhPT0gdW5kZWZpbmVkICYmIGNlcnRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3JlYXRlIEN1c3RvbSBEb21haW5zIGZvciBBUEkgR2F0ZXdheVxuICAgICAgY29uc3QgZG5BcHBzRWRnZSA9IG5ldyBhcGlnd3kuRG9tYWluTmFtZSh0aGlzLCAnbWljcm9hcHBzLWFwcHMtZWRnZS1kbicsIHtcbiAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZUVkZ2UsXG4gICAgICAgIGNlcnRpZmljYXRlOiBjZXJ0T3JpZ2luLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRuQXBwc0VkZ2UuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIGVkZ2UgZG9tYWluIG5hbWUgbWFwcGluZyBmb3IgdGhlIEFQSVxuICAgICAgY29uc3QgYXBpTWFwcGluZyA9IG5ldyBhcGlnd3kuQXBpTWFwcGluZyh0aGlzLCAnbWFwcGluZycsIHtcbiAgICAgICAgYXBpOiB0aGlzLl9odHRwQXBpLFxuICAgICAgICBkb21haW5OYW1lOiBkbkFwcHNFZGdlLFxuICAgICAgICBzdGFnZSxcbiAgICAgIH0pO1xuICAgICAgLy8gMjAyMi0wMS0xNiAtIENESyBpcyBzdGlsbCBnZW5lcmF0aW5nIENsb3VkRm9ybWF0aW9uIHdpdGggbm8gZGVwZW5kZW5jeVxuICAgICAgLy8gYmV0d2VlbiB0aGUgUjUzIFJlY29yZFNldCBhbmQgdGhlIE1hcHBpbmdcbiAgICAgIGFwaU1hcHBpbmcubm9kZS5hZGREZXBlbmRlbmN5KGRuQXBwc0VkZ2UpO1xuICAgIH1cblxuICAgIGlmIChkb21haW5OYW1lT3JpZ2luICE9PSB1bmRlZmluZWQgJiYgY2VydE9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9kbkFwcHNPcmlnaW4gPSBuZXcgYXBpZ3d5LkRvbWFpbk5hbWUodGhpcywgJ29yaWdpbi1kbicsIHtcbiAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZU9yaWdpbixcbiAgICAgICAgY2VydGlmaWNhdGU6IGNlcnRPcmlnaW4sXG4gICAgICB9KTtcbiAgICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fZG5BcHBzT3JpZ2luLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbmFibGUgYWNjZXNzIGxvZ3Mgb24gQVBJIEdhdGV3YXlcbiAgICBjb25zdCBhcGlBY2Nlc3NMb2dzID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ2xvZ3MnLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IGFwaWdhdGV3YXlOYW1lXG4gICAgICAgID8gYC9hd3MvYXBpZ3d5LyR7YXBpZ2F0ZXdheU5hbWV9YFxuICAgICAgICA6IGAvYXdzL2FwaWd3eS8ke3RoaXMuaHR0cEFwaS5odHRwQXBpTmFtZX1gLFxuICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgIH0pO1xuICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFwaUFjY2Vzc0xvZ3MuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgIH1cbiAgICAvLyBjb25zdCBzdGFnZSA9IHRoaXMuX2h0dHBBcGkuZGVmYXVsdFN0YWdlPy5ub2RlLmRlZmF1bHRDaGlsZCBhcyBhcGlnd3kuQ2ZuU3RhZ2U7XG4gICAgKHN0YWdlIGFzIHVua25vd24gYXMgYXBpZ3d5LkNmblN0YWdlKS5hY2Nlc3NMb2dTZXR0aW5ncyA9IHtcbiAgICAgIGRlc3RpbmF0aW9uQXJuOiBhcGlBY2Nlc3NMb2dzLmxvZ0dyb3VwQXJuLFxuICAgICAgZm9ybWF0OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHJlcXVlc3RJZDogJyRjb250ZXh0LnJlcXVlc3RJZCcsXG4gICAgICAgIHVzZXJBZ2VudDogJyRjb250ZXh0LmlkZW50aXR5LnVzZXJBZ2VudCcsXG4gICAgICAgIHNvdXJjZUlwOiAnJGNvbnRleHQuaWRlbnRpdHkuc291cmNlSXAnLFxuICAgICAgICByZXF1ZXN0VGltZTogJyRjb250ZXh0LnJlcXVlc3RUaW1lJyxcbiAgICAgICAgcmVxdWVzdFRpbWVFcG9jaDogJyRjb250ZXh0LnJlcXVlc3RUaW1lRXBvY2gnLFxuICAgICAgICBodHRwTWV0aG9kOiAnJGNvbnRleHQuaHR0cE1ldGhvZCcsXG4gICAgICAgIHBhdGg6ICckY29udGV4dC5wYXRoJyxcbiAgICAgICAgc3RhdHVzOiAnJGNvbnRleHQuc3RhdHVzJyxcbiAgICAgICAgcHJvdG9jb2w6ICckY29udGV4dC5wcm90b2NvbCcsXG4gICAgICAgIHJlc3BvbnNlTGVuZ3RoOiAnJGNvbnRleHQucmVzcG9uc2VMZW5ndGgnLFxuICAgICAgICBkb21haW5OYW1lOiAnJGNvbnRleHQuZG9tYWluTmFtZScsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIGEgbG9nZ2luZyByb2xlXG4gICAgLy8gVGlwczogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xMTEwMFxuICAgIGNvbnN0IGFwaUd3eUxvZ1JvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ2xvZ3Mtcm9sZScsIHtcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgJ3NlcnZpY2Utcm9sZS9BbWF6b25BUElHYXRld2F5UHVzaFRvQ2xvdWRXYXRjaExvZ3MnLFxuICAgICAgICApLFxuICAgICAgXSxcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdhcGlnYXRld2F5LmFtYXpvbmF3cy5jb20nKSxcbiAgICB9KTtcbiAgICBhcGlBY2Nlc3NMb2dzLmdyYW50V3JpdGUoYXBpR3d5TG9nUm9sZSk7XG5cbiAgICAvL1xuICAgIC8vIExldCBBUEkgR2F0ZXdheSBhY2NlcHQgcmVxdWVzdHMgdXNpbmcgZG9tYWluTmFtZU9yaWdpblxuICAgIC8vIFRoYXQgaXMgdGhlIG9yaWdpbiBVUkkgdGhhdCBDbG91ZEZyb250IHVzZXMgZm9yIHRoaXMgZ2F0ZXdheS5cbiAgICAvLyBUaGUgZ2F0ZXdheSB3aWxsIHJlZnVzZSB0aGUgdHJhZmZpYyBpZiBpdCBkb2Vzbid0IGhhdmUgdGhlXG4gICAgLy8gZG9tYWluIG5hbWUgcmVnaXN0ZXJlZC5cbiAgICAvL1xuICAgIGlmICh0aGlzLl9kbkFwcHNPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbWFwcGluZ0FwcHNBcGlzID0gbmV3IGFwaWd3eS5BcGlNYXBwaW5nKHRoaXMsICdhcGktbWFwLW9yaWdpbicsIHtcbiAgICAgICAgYXBpOiB0aGlzLl9odHRwQXBpLFxuICAgICAgICBkb21haW5OYW1lOiB0aGlzLl9kbkFwcHNPcmlnaW4sXG4gICAgICAgIHN0YWdlLFxuICAgICAgfSk7XG4gICAgICAvLyAyMDIyLTAxLTE2IC0gQ0RLIGlzIHN0aWxsIGdlbmVyYXRpbmcgQ2xvdWRGb3JtYXRpb24gd2l0aCBubyBkZXBlbmRlbmN5XG4gICAgICAvLyBiZXR3ZWVuIHRoZSBSNTMgUmVjb3JkU2V0IGFuZCB0aGUgTWFwcGluZ1xuICAgICAgbWFwcGluZ0FwcHNBcGlzLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLl9kbkFwcHNPcmlnaW4pO1xuICAgICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtYXBwaW5nQXBwc0FwaXMuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gQ3JlYXRlIHRoZSBvcmlnaW4gbmFtZSBmb3IgQVBJIEdhdGV3YXlcbiAgICAvL1xuICAgIGlmIChyNTNab25lICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fZG5BcHBzT3JpZ2luKSB7XG4gICAgICBjb25zdCByckFwcHNPcmlnaW4gPSBuZXcgcjUzLkFSZWNvcmQodGhpcywgJ29yaWdpbi1hcmVjb3JkJywge1xuICAgICAgICB6b25lOiByNTNab25lLFxuICAgICAgICByZWNvcmROYW1lOiBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgICB0YXJnZXQ6IHI1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgIG5ldyByNTN0YXJnZXRzLkFwaUdhdGV3YXl2MkRvbWFpblByb3BlcnRpZXMoXG4gICAgICAgICAgICB0aGlzLl9kbkFwcHNPcmlnaW4ucmVnaW9uYWxEb21haW5OYW1lLFxuICAgICAgICAgICAgdGhpcy5fZG5BcHBzT3JpZ2luLnJlZ2lvbmFsSG9zdGVkWm9uZUlkLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcnJBcHBzT3JpZ2luLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/lib/MicroAppsCF.d.ts
CHANGED
|
@@ -1,26 +1,188 @@
|
|
|
1
|
+
import * as apigwy from '@aws-cdk/aws-apigatewayv2';
|
|
1
2
|
import * as acm from '@aws-cdk/aws-certificatemanager';
|
|
2
3
|
import * as cf from '@aws-cdk/aws-cloudfront';
|
|
4
|
+
import * as cforigins from '@aws-cdk/aws-cloudfront-origins';
|
|
5
|
+
import * as r53 from '@aws-cdk/aws-route53';
|
|
6
|
+
import * as s3 from '@aws-cdk/aws-s3';
|
|
3
7
|
import * as cdk from '@aws-cdk/core';
|
|
4
|
-
|
|
5
|
-
|
|
8
|
+
/**
|
|
9
|
+
* @stability stable
|
|
10
|
+
*/
|
|
11
|
+
export interface IMicroAppsCF {
|
|
12
|
+
/**
|
|
13
|
+
* @stability stable
|
|
14
|
+
*/
|
|
6
15
|
readonly cloudFrontDistro: cf.Distribution;
|
|
7
16
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
/**
|
|
18
|
+
* @stability stable
|
|
19
|
+
*/
|
|
20
|
+
export interface MicroAppsCFProps {
|
|
21
|
+
/**
|
|
22
|
+
* RemovalPolicy override for child resources.
|
|
23
|
+
*
|
|
24
|
+
* Note: if set to DESTROY the S3 buckes will have `autoDeleteObjects` set to `true`
|
|
25
|
+
*
|
|
26
|
+
* @default - per resource default
|
|
27
|
+
* @stability stable
|
|
28
|
+
*/
|
|
29
|
+
readonly removalPolicy?: cdk.RemovalPolicy;
|
|
30
|
+
/**
|
|
31
|
+
* S3 bucket origin for deployed applications.
|
|
32
|
+
*
|
|
33
|
+
* @stability stable
|
|
34
|
+
*/
|
|
35
|
+
readonly bucketAppsOrigin: cforigins.S3Origin;
|
|
36
|
+
/**
|
|
37
|
+
* S3 bucket for CloudFront logs.
|
|
38
|
+
*
|
|
39
|
+
* @stability stable
|
|
40
|
+
*/
|
|
41
|
+
readonly bucketLogs?: s3.IBucket;
|
|
42
|
+
/**
|
|
43
|
+
* CloudFront Distribution domain name.
|
|
44
|
+
*
|
|
45
|
+
* @default auto-assigned
|
|
46
|
+
* @stability stable
|
|
47
|
+
* @example
|
|
48
|
+
*
|
|
49
|
+
* apps.pwrdrvr.com
|
|
50
|
+
*/
|
|
51
|
+
readonly domainNameEdge?: string;
|
|
52
|
+
/**
|
|
53
|
+
* API Gateway custom origin domain name.
|
|
54
|
+
*
|
|
55
|
+
* @default - retrieved from httpApi, if possible
|
|
56
|
+
* @stability stable
|
|
57
|
+
* @example
|
|
58
|
+
*
|
|
59
|
+
* apps.pwrdrvr.com
|
|
60
|
+
*/
|
|
61
|
+
readonly domainNameOrigin?: string;
|
|
62
|
+
/**
|
|
63
|
+
* API Gateway v2 HTTP API for apps.
|
|
64
|
+
*
|
|
65
|
+
* @stability stable
|
|
66
|
+
*/
|
|
67
|
+
readonly httpApi: apigwy.HttpApi;
|
|
68
|
+
/**
|
|
69
|
+
* Optional asset name root.
|
|
70
|
+
*
|
|
71
|
+
* @default - resource names auto assigned
|
|
72
|
+
* @stability stable
|
|
73
|
+
* @example
|
|
74
|
+
*
|
|
75
|
+
* microapps
|
|
76
|
+
*/
|
|
77
|
+
readonly assetNameRoot?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Optional asset name suffix.
|
|
80
|
+
*
|
|
81
|
+
* @default none
|
|
82
|
+
* @stability stable
|
|
83
|
+
* @example
|
|
84
|
+
*
|
|
85
|
+
* -dev-pr-12
|
|
86
|
+
*/
|
|
87
|
+
readonly assetNameSuffix?: string;
|
|
88
|
+
/**
|
|
89
|
+
* ACM Certificate that covers `domainNameEdge` name.
|
|
90
|
+
*
|
|
91
|
+
* @stability stable
|
|
92
|
+
*/
|
|
93
|
+
readonly certEdge?: acm.ICertificate;
|
|
94
|
+
/**
|
|
95
|
+
* Route53 zone in which to create optional `domainNameEdge` record.
|
|
96
|
+
*
|
|
97
|
+
* @stability stable
|
|
98
|
+
*/
|
|
99
|
+
readonly r53Zone?: r53.IHostedZone;
|
|
100
|
+
/**
|
|
101
|
+
* Path prefix on the root of the CloudFront distribution.
|
|
102
|
+
*
|
|
103
|
+
* @stability stable
|
|
104
|
+
* @example
|
|
105
|
+
*
|
|
106
|
+
* dev/
|
|
107
|
+
*/
|
|
108
|
+
readonly rootPathPrefix?: string;
|
|
20
109
|
}
|
|
21
|
-
|
|
110
|
+
/**
|
|
111
|
+
* @stability stable
|
|
112
|
+
*/
|
|
113
|
+
export interface CreateAPIOriginPolicyOptions {
|
|
114
|
+
/**
|
|
115
|
+
* @stability stable
|
|
116
|
+
*/
|
|
117
|
+
readonly assetNameRoot?: string;
|
|
118
|
+
/**
|
|
119
|
+
* @stability stable
|
|
120
|
+
*/
|
|
121
|
+
readonly assetNameSuffix?: string;
|
|
122
|
+
/**
|
|
123
|
+
* Edge domain name used by CloudFront - If set a custom OriginRequestPolicy will be created that prevents the Host header from being passed to the origin.
|
|
124
|
+
*
|
|
125
|
+
* @stability stable
|
|
126
|
+
*/
|
|
127
|
+
readonly domainNameEdge?: string;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* @stability stable
|
|
131
|
+
*/
|
|
132
|
+
export interface AddRoutesOptions {
|
|
133
|
+
/**
|
|
134
|
+
* @stability stable
|
|
135
|
+
*/
|
|
136
|
+
readonly apiGwyOrigin: cf.IOrigin;
|
|
137
|
+
/**
|
|
138
|
+
* @stability stable
|
|
139
|
+
*/
|
|
140
|
+
readonly bucketAppsOrigin: cforigins.S3Origin;
|
|
141
|
+
/**
|
|
142
|
+
* @stability stable
|
|
143
|
+
*/
|
|
144
|
+
readonly distro: cf.Distribution;
|
|
145
|
+
/**
|
|
146
|
+
* @stability stable
|
|
147
|
+
*/
|
|
148
|
+
readonly apigwyOriginRequestPolicy: cf.IOriginRequestPolicy;
|
|
149
|
+
/**
|
|
150
|
+
* @stability stable
|
|
151
|
+
*/
|
|
152
|
+
readonly rootPathPrefix?: string;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* @stability stable
|
|
156
|
+
*/
|
|
157
|
+
export declare class MicroAppsCF extends cdk.Construct implements IMicroAppsCF {
|
|
158
|
+
/**
|
|
159
|
+
* Create or get the origin request policy.
|
|
160
|
+
*
|
|
161
|
+
* If a custom domain name is NOT used for the origin then a policy
|
|
162
|
+
* will be created.
|
|
163
|
+
*
|
|
164
|
+
* If a custom domain name IS used for the origin then the ALL_VIEWER
|
|
165
|
+
* policy will be returned. This policy passes the Host header to the
|
|
166
|
+
* origin, which is fine when using a custom domain name on the origin.
|
|
167
|
+
*
|
|
168
|
+
* @stability stable
|
|
169
|
+
*/
|
|
170
|
+
static createAPIOriginPolicy(scope: cdk.Construct, props: CreateAPIOriginPolicyOptions): cf.IOriginRequestPolicy;
|
|
171
|
+
/**
|
|
172
|
+
* Add API Gateway and S3 routes to an existing CloudFront Distribution.
|
|
173
|
+
*
|
|
174
|
+
* @stability stable
|
|
175
|
+
*/
|
|
176
|
+
static addRoutes(_scope: cdk.Construct, props: AddRoutesOptions): void;
|
|
22
177
|
private _cloudFrontDistro;
|
|
178
|
+
/**
|
|
179
|
+
* @stability stable
|
|
180
|
+
*/
|
|
23
181
|
get cloudFrontDistro(): cf.Distribution;
|
|
24
|
-
|
|
182
|
+
/**
|
|
183
|
+
* MicroApps - Create just CloudFront resources.
|
|
184
|
+
*
|
|
185
|
+
* @stability stable
|
|
186
|
+
*/
|
|
187
|
+
constructor(scope: cdk.Construct, id: string, props: MicroAppsCFProps);
|
|
25
188
|
}
|
|
26
|
-
export {};
|