@digitraffic/common 2023.1.23-3 → 2023.1.30-1
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/aws/infra/api/response.js +7 -3
- package/dist/aws/infra/canaries/url-checker.d.ts +1 -1
- package/dist/aws/infra/canaries/url-checker.js +1 -0
- package/dist/aws/infra/stacks/db-stack.d.ts +7 -2
- package/dist/aws/infra/stacks/db-stack.js +21 -10
- package/dist/aws/infra/stacks/network-stack.js +1 -1
- package/package.json +9 -9
- package/src/aws/infra/api/response.ts +7 -3
- package/src/aws/infra/canaries/url-checker.ts +3 -1
- package/src/aws/infra/stacks/db-stack.ts +49 -21
- package/src/aws/infra/stacks/network-stack.ts +2 -2
@@ -90,9 +90,13 @@ class DigitrafficMethodResponse {
|
|
90
90
|
[mediaType]: model,
|
91
91
|
},
|
92
92
|
responseParameters: {
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
...(!disableCors && {
|
94
|
+
"method.response.header.Access-Control-Allow-Origin": true,
|
95
|
+
}),
|
96
|
+
...(deprecation && {
|
97
|
+
"method.response.header.Deprecation": true,
|
98
|
+
"method.response.header.Sunset": true,
|
99
|
+
}),
|
96
100
|
},
|
97
101
|
};
|
98
102
|
}
|
@@ -34,7 +34,7 @@ export declare class ContentChecker {
|
|
34
34
|
static checkResponse(fn: (body: string, res: IncomingMessage) => void): CheckerFunction;
|
35
35
|
}
|
36
36
|
export declare class ContentTypeChecker {
|
37
|
-
static checkContentType(contentType: MediaType):
|
37
|
+
static checkContentType(contentType: MediaType): CheckerFunction;
|
38
38
|
}
|
39
39
|
export declare class GeoJsonChecker {
|
40
40
|
static validFeatureCollection(fn?: (json: FeatureCollection) => void): CheckerFunction;
|
@@ -1,13 +1,16 @@
|
|
1
1
|
import { Stack } from "aws-cdk-lib";
|
2
2
|
import { Construct } from "constructs";
|
3
|
-
import {
|
3
|
+
import { IVpc } from "aws-cdk-lib/aws-ec2";
|
4
|
+
import { AuroraPostgresEngineVersion, DatabaseCluster, DatabaseClusterProps, IParameterGroup } from "aws-cdk-lib/aws-rds";
|
5
|
+
import { ISecret } from "aws-cdk-lib/aws-secretsmanager";
|
4
6
|
import { InstanceType } from "aws-cdk-lib/aws-ec2";
|
5
7
|
import { InfraStackConfiguration } from "./intra-stack-configuration";
|
8
|
+
import { ISecurityGroup } from "aws-cdk-lib/aws-ec2/lib/security-group";
|
6
9
|
export interface DbConfiguration {
|
7
10
|
readonly secretArn: string;
|
8
11
|
readonly dbVersion: AuroraPostgresEngineVersion;
|
9
12
|
readonly dbInstanceType: InstanceType;
|
10
|
-
readonly snapshotIdentifier
|
13
|
+
readonly snapshotIdentifier?: string;
|
11
14
|
readonly instances: number;
|
12
15
|
readonly customParameterGroup: boolean;
|
13
16
|
readonly securityGroupId: string;
|
@@ -27,5 +30,7 @@ export declare class DbStack extends Stack {
|
|
27
30
|
static CLUSTER_WRITE_ENDPOINT_EXPORT_NAME: string;
|
28
31
|
static CLUSTER_PORT: number;
|
29
32
|
constructor(scope: Construct, id: string, isc: InfraStackConfiguration, configuration: DbConfiguration);
|
33
|
+
createParamaterGroup(configuration: DbConfiguration): IParameterGroup;
|
34
|
+
createClusterParameters(configuration: DbConfiguration, instanceName: string, vpc: IVpc, securityGroup: ISecurityGroup, parameterGroup: IParameterGroup, secret: ISecret): DatabaseClusterProps;
|
30
35
|
createAuroraCluster(isc: InfraStackConfiguration, configuration: DbConfiguration): DatabaseCluster;
|
31
36
|
}
|
@@ -24,14 +24,8 @@ class DbStack extends aws_cdk_lib_1.Stack {
|
|
24
24
|
(0, import_util_1.exportValue)(this, isc.environmentName, DbStack.CLUSTER_WRITE_ENDPOINT_EXPORT_NAME, cluster.clusterEndpoint.hostname);
|
25
25
|
(0, import_util_1.exportValue)(this, isc.environmentName, DbStack.CLUSTER_READ_ENDPOINT_EXPORT_NAME, cluster.clusterReadEndpoint.hostname);
|
26
26
|
}
|
27
|
-
|
28
|
-
|
29
|
-
const secret = aws_secretsmanager_1.Secret.fromSecretAttributes(this, "db-secret", {
|
30
|
-
secretCompleteArn: configuration.secretArn,
|
31
|
-
});
|
32
|
-
const securityGroup = aws_ec2_1.SecurityGroup.fromSecurityGroupId(this, "securitygroup", configuration.securityGroupId);
|
33
|
-
const vpc = (0, import_util_1.importVpc)(this, isc.environmentName);
|
34
|
-
const parameterGroup = configuration.customParameterGroup
|
27
|
+
createParamaterGroup(configuration) {
|
28
|
+
return configuration.customParameterGroup
|
35
29
|
? new aws_rds_1.ParameterGroup(this, `parameter-group-${configuration.dbVersion.auroraPostgresMajorVersion}`, {
|
36
30
|
engine: aws_rds_1.DatabaseClusterEngine.auroraPostgres({
|
37
31
|
version: configuration.dbVersion,
|
@@ -43,8 +37,9 @@ class DbStack extends aws_cdk_lib_1.Stack {
|
|
43
37
|
},
|
44
38
|
})
|
45
39
|
: aws_rds_1.ParameterGroup.fromParameterGroupName(this, "ParameterGroup", `default.aurora-postgresql${configuration.dbVersion.auroraPostgresMajorVersion}`);
|
46
|
-
|
47
|
-
|
40
|
+
}
|
41
|
+
createClusterParameters(configuration, instanceName, vpc, securityGroup, parameterGroup, secret) {
|
42
|
+
return {
|
48
43
|
engine: aws_rds_1.DatabaseClusterEngine.auroraPostgres({
|
49
44
|
version: configuration.dbVersion,
|
50
45
|
}),
|
@@ -74,7 +69,23 @@ class DbStack extends aws_cdk_lib_1.Stack {
|
|
74
69
|
},
|
75
70
|
credentials: aws_rds_1.Credentials.fromSecret(secret),
|
76
71
|
parameterGroup,
|
72
|
+
};
|
73
|
+
}
|
74
|
+
createAuroraCluster(isc, configuration) {
|
75
|
+
const instanceName = isc.environmentName + "-db";
|
76
|
+
const secret = aws_secretsmanager_1.Secret.fromSecretAttributes(this, "db-secret", {
|
77
|
+
secretCompleteArn: configuration.secretArn,
|
77
78
|
});
|
79
|
+
const securityGroup = aws_ec2_1.SecurityGroup.fromSecurityGroupId(this, "securitygroup", configuration.securityGroupId);
|
80
|
+
const vpc = (0, import_util_1.importVpc)(this, isc.environmentName);
|
81
|
+
const parameterGroup = this.createParamaterGroup(configuration);
|
82
|
+
const parameters = this.createClusterParameters(configuration, instanceName, vpc, securityGroup, parameterGroup, secret);
|
83
|
+
const cluster = configuration.snapshotIdentifier
|
84
|
+
? new aws_rds_1.DatabaseClusterFromSnapshot(this, instanceName, {
|
85
|
+
...parameters,
|
86
|
+
...{ snapshotIdentifier: configuration.snapshotIdentifier },
|
87
|
+
})
|
88
|
+
: new aws_rds_1.DatabaseCluster(this, instanceName, parameters);
|
78
89
|
// this workaround should prevent stack failing on version upgrade
|
79
90
|
const cfnInstances = cluster.node.children.filter((child) => child instanceof aws_rds_1.CfnDBInstance);
|
80
91
|
if (cfnInstances.length === 0) {
|
@@ -18,7 +18,7 @@ class NetworkStack extends aws_cdk_lib_1.Stack {
|
|
18
18
|
availabilityZones: ["eu-west-1a", "eu-west-1b"],
|
19
19
|
enableDnsHostnames: true,
|
20
20
|
enableDnsSupport: true,
|
21
|
-
|
21
|
+
ipAddresses: aws_ec2_1.IpAddresses.cidr(configuration.cidr),
|
22
22
|
subnetConfiguration: [
|
23
23
|
{
|
24
24
|
name: "public",
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@digitraffic/common",
|
3
|
-
"version": "2023.01.
|
3
|
+
"version": "2023.01.30-1",
|
4
4
|
"description": "",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -17,13 +17,13 @@
|
|
17
17
|
"src/**/*.ts"
|
18
18
|
],
|
19
19
|
"peerDependencies": {
|
20
|
-
"@aws-cdk/aws-synthetics-alpha": "
|
20
|
+
"@aws-cdk/aws-synthetics-alpha": "2.62.2-alpha.0",
|
21
21
|
"@types/geojson": "^7946.0.10",
|
22
|
-
"aws-cdk-lib": "^2.
|
23
|
-
"aws-sdk": "^2.
|
22
|
+
"aws-cdk-lib": "^2.62.2",
|
23
|
+
"aws-sdk": "^2.1304.0",
|
24
24
|
"axios": "^1.2.0",
|
25
25
|
"change-case": "^4.1.2",
|
26
|
-
"constructs": "^10.1.
|
26
|
+
"constructs": "^10.1.235",
|
27
27
|
"geojson-validation": "^1.0.2",
|
28
28
|
"moment": "^2.29.4",
|
29
29
|
"node-ttl": "^0.2.0",
|
@@ -32,8 +32,8 @@
|
|
32
32
|
"spex": "^3.0.0"
|
33
33
|
},
|
34
34
|
"devDependencies": {
|
35
|
-
"@aws-cdk/aws-synthetics-alpha": "2.
|
36
|
-
"@types/aws-lambda": "^8.10.
|
35
|
+
"@aws-cdk/aws-synthetics-alpha": "2.62.2-alpha.0",
|
36
|
+
"@types/aws-lambda": "^8.10.110",
|
37
37
|
"@types/geojson": "^7946.0.10",
|
38
38
|
"@types/jest": "^29.2.5",
|
39
39
|
"@types/node": "^18.11.18",
|
@@ -41,8 +41,8 @@
|
|
41
41
|
"@types/sinon": "^10.0.13",
|
42
42
|
"@typescript-eslint/eslint-plugin": "^5.48.2",
|
43
43
|
"@typescript-eslint/parser": "^5.48.2",
|
44
|
-
"aws-cdk-lib": "^2.
|
45
|
-
"aws-sdk": "^2.
|
44
|
+
"aws-cdk-lib": "^2.62.2",
|
45
|
+
"aws-sdk": "^2.1304.0",
|
46
46
|
"axios": "^1.2.2",
|
47
47
|
"change-case": "^4.1.2",
|
48
48
|
"constructs": "^10.1.222",
|
@@ -119,9 +119,13 @@ export class DigitrafficMethodResponse {
|
|
119
119
|
[mediaType]: model,
|
120
120
|
},
|
121
121
|
responseParameters: {
|
122
|
-
|
123
|
-
|
124
|
-
|
122
|
+
...(!disableCors && {
|
123
|
+
"method.response.header.Access-Control-Allow-Origin": true,
|
124
|
+
}),
|
125
|
+
...(deprecation && {
|
126
|
+
"method.response.header.Deprecation": true,
|
127
|
+
"method.response.header.Sunset": true,
|
128
|
+
}),
|
125
129
|
},
|
126
130
|
};
|
127
131
|
}
|
@@ -318,7 +318,7 @@ export class ContentChecker {
|
|
318
318
|
}
|
319
319
|
|
320
320
|
export class ContentTypeChecker {
|
321
|
-
static checkContentType(contentType: MediaType) {
|
321
|
+
static checkContentType(contentType: MediaType): CheckerFunction {
|
322
322
|
return (res: IncomingMessage) => {
|
323
323
|
if (!res.statusCode) {
|
324
324
|
throw new Error("statusCode missing");
|
@@ -339,6 +339,8 @@ export class ContentTypeChecker {
|
|
339
339
|
`Wrong content-type ${res.headers["content-type"]!}`
|
340
340
|
);
|
341
341
|
}
|
342
|
+
|
343
|
+
return Promise.resolve();
|
342
344
|
};
|
343
345
|
}
|
344
346
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { Duration, RemovalPolicy, Stack } from "aws-cdk-lib";
|
2
2
|
import { Construct } from "constructs";
|
3
|
-
import { SecurityGroup, SubnetType } from "aws-cdk-lib/aws-ec2";
|
3
|
+
import { IVpc, SecurityGroup, SubnetType } from "aws-cdk-lib/aws-ec2";
|
4
4
|
import {
|
5
5
|
AuroraPostgresEngineVersion,
|
6
6
|
CfnDBInstance,
|
@@ -8,20 +8,23 @@ import {
|
|
8
8
|
DatabaseCluster,
|
9
9
|
DatabaseClusterEngine,
|
10
10
|
DatabaseClusterFromSnapshot,
|
11
|
+
DatabaseClusterProps,
|
11
12
|
InstanceUpdateBehaviour,
|
13
|
+
IParameterGroup,
|
12
14
|
ParameterGroup,
|
13
15
|
} from "aws-cdk-lib/aws-rds";
|
14
|
-
import { Secret } from "aws-cdk-lib/aws-secretsmanager";
|
16
|
+
import { ISecret, Secret } from "aws-cdk-lib/aws-secretsmanager";
|
15
17
|
import { exportValue, importVpc } from "../import-util";
|
16
18
|
import { InstanceType } from "aws-cdk-lib/aws-ec2";
|
17
19
|
import { InfraStackConfiguration } from "./intra-stack-configuration";
|
20
|
+
import { ISecurityGroup } from "aws-cdk-lib/aws-ec2/lib/security-group";
|
18
21
|
|
19
22
|
export interface DbConfiguration {
|
20
23
|
readonly secretArn: string;
|
21
24
|
|
22
25
|
readonly dbVersion: AuroraPostgresEngineVersion;
|
23
26
|
readonly dbInstanceType: InstanceType;
|
24
|
-
readonly snapshotIdentifier
|
27
|
+
readonly snapshotIdentifier?: string;
|
25
28
|
readonly instances: number;
|
26
29
|
readonly customParameterGroup: boolean;
|
27
30
|
readonly securityGroupId: string;
|
@@ -79,22 +82,8 @@ export class DbStack extends Stack {
|
|
79
82
|
);
|
80
83
|
}
|
81
84
|
|
82
|
-
|
83
|
-
|
84
|
-
configuration: DbConfiguration
|
85
|
-
): DatabaseCluster {
|
86
|
-
const instanceName = isc.environmentName + "-db";
|
87
|
-
const secret = Secret.fromSecretAttributes(this, "db-secret", {
|
88
|
-
secretCompleteArn: configuration.secretArn,
|
89
|
-
});
|
90
|
-
const securityGroup = SecurityGroup.fromSecurityGroupId(
|
91
|
-
this,
|
92
|
-
"securitygroup",
|
93
|
-
configuration.securityGroupId
|
94
|
-
);
|
95
|
-
const vpc = importVpc(this, isc.environmentName);
|
96
|
-
|
97
|
-
const parameterGroup = configuration.customParameterGroup
|
85
|
+
createParamaterGroup(configuration: DbConfiguration) {
|
86
|
+
return configuration.customParameterGroup
|
98
87
|
? new ParameterGroup(
|
99
88
|
this,
|
100
89
|
`parameter-group-${configuration.dbVersion.auroraPostgresMajorVersion}`,
|
@@ -114,9 +103,17 @@ export class DbStack extends Stack {
|
|
114
103
|
"ParameterGroup",
|
115
104
|
`default.aurora-postgresql${configuration.dbVersion.auroraPostgresMajorVersion}`
|
116
105
|
);
|
106
|
+
}
|
117
107
|
|
118
|
-
|
119
|
-
|
108
|
+
createClusterParameters(
|
109
|
+
configuration: DbConfiguration,
|
110
|
+
instanceName: string,
|
111
|
+
vpc: IVpc,
|
112
|
+
securityGroup: ISecurityGroup,
|
113
|
+
parameterGroup: IParameterGroup,
|
114
|
+
secret: ISecret
|
115
|
+
): DatabaseClusterProps {
|
116
|
+
return {
|
120
117
|
engine: DatabaseClusterEngine.auroraPostgres({
|
121
118
|
version: configuration.dbVersion,
|
122
119
|
}),
|
@@ -146,7 +143,38 @@ export class DbStack extends Stack {
|
|
146
143
|
},
|
147
144
|
credentials: Credentials.fromSecret(secret),
|
148
145
|
parameterGroup,
|
146
|
+
};
|
147
|
+
}
|
148
|
+
|
149
|
+
createAuroraCluster(
|
150
|
+
isc: InfraStackConfiguration,
|
151
|
+
configuration: DbConfiguration
|
152
|
+
): DatabaseCluster {
|
153
|
+
const instanceName = isc.environmentName + "-db";
|
154
|
+
const secret = Secret.fromSecretAttributes(this, "db-secret", {
|
155
|
+
secretCompleteArn: configuration.secretArn,
|
149
156
|
});
|
157
|
+
const securityGroup = SecurityGroup.fromSecurityGroupId(
|
158
|
+
this,
|
159
|
+
"securitygroup",
|
160
|
+
configuration.securityGroupId
|
161
|
+
);
|
162
|
+
const vpc = importVpc(this, isc.environmentName);
|
163
|
+
const parameterGroup = this.createParamaterGroup(configuration);
|
164
|
+
const parameters = this.createClusterParameters(
|
165
|
+
configuration,
|
166
|
+
instanceName,
|
167
|
+
vpc,
|
168
|
+
securityGroup,
|
169
|
+
parameterGroup,
|
170
|
+
secret
|
171
|
+
);
|
172
|
+
const cluster = configuration.snapshotIdentifier
|
173
|
+
? new DatabaseClusterFromSnapshot(this, instanceName, {
|
174
|
+
...parameters,
|
175
|
+
...{ snapshotIdentifier: configuration.snapshotIdentifier },
|
176
|
+
})
|
177
|
+
: new DatabaseCluster(this, instanceName, parameters);
|
150
178
|
|
151
179
|
// this workaround should prevent stack failing on version upgrade
|
152
180
|
const cfnInstances = cluster.node.children.filter(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { Stack } from "aws-cdk-lib";
|
2
2
|
import { Construct } from "constructs";
|
3
|
-
import { IVpc, SubnetType, Vpc } from "aws-cdk-lib/aws-ec2";
|
3
|
+
import { IpAddresses, IVpc, SubnetType, Vpc } from "aws-cdk-lib/aws-ec2";
|
4
4
|
import { InfraStackConfiguration } from "./intra-stack-configuration";
|
5
5
|
import { exportValue } from "../import-util";
|
6
6
|
|
@@ -32,7 +32,7 @@ export class NetworkStack extends Stack {
|
|
32
32
|
availabilityZones: ["eu-west-1a", "eu-west-1b"],
|
33
33
|
enableDnsHostnames: true,
|
34
34
|
enableDnsSupport: true,
|
35
|
-
|
35
|
+
ipAddresses: IpAddresses.cidr(configuration.cidr),
|
36
36
|
subnetConfiguration: [
|
37
37
|
{
|
38
38
|
name: "public",
|