@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.
@@ -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==
@@ -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
- import { IMicroAppsS3Exports } from './MicroAppsS3';
5
- export interface IMicroAppsCFExports {
8
+ /**
9
+ * @stability stable
10
+ */
11
+ export interface IMicroAppsCF {
12
+ /**
13
+ * @stability stable
14
+ */
6
15
  readonly cloudFrontDistro: cf.Distribution;
7
16
  }
8
- interface MicroAppsCFProps extends cdk.ResourceProps {
9
- readonly autoDeleteEverything: boolean;
10
- readonly s3Exports: IMicroAppsS3Exports;
11
- readonly reverseDomainName: string;
12
- readonly domainName: string;
13
- readonly domainNameEdge: string;
14
- readonly domainNameOrigin: string;
15
- readonly assetNameRoot: string;
16
- readonly assetNameSuffix: string;
17
- readonly certEdge: acm.ICertificate;
18
- readonly r53ZoneName: string;
19
- readonly r53ZoneID: string;
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
- export declare class MicroAppsCF extends cdk.Construct implements IMicroAppsCFExports {
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
- constructor(scope: cdk.Construct, id: string, props?: MicroAppsCFProps);
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 {};