@digitraffic/common 2023.1.26-1 → 2023.1.30-2

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.
@@ -1,13 +1,16 @@
1
1
  import { Stack } from "aws-cdk-lib";
2
2
  import { Construct } from "constructs";
3
- import { AuroraPostgresEngineVersion, DatabaseCluster } from "aws-cdk-lib/aws-rds";
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: string;
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
- createAuroraCluster(isc, configuration) {
28
- const instanceName = isc.environmentName + "-db";
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
- const cluster = new aws_rds_1.DatabaseClusterFromSnapshot(this, instanceName, {
47
- snapshotIdentifier: configuration.snapshotIdentifier,
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) {
@@ -11,6 +11,10 @@ class NetworkStack extends aws_cdk_lib_1.Stack {
11
11
  });
12
12
  this.vpc = this.createVpc(configuration);
13
13
  (0, import_util_1.exportValue)(this, isc.environmentName, "VPCID", this.vpc.vpcId);
14
+ (0, import_util_1.exportValue)(this, isc.environmentName, "digitrafficpublicASubnet", this.vpc.publicSubnets[0].subnetId);
15
+ (0, import_util_1.exportValue)(this, isc.environmentName, "digitrafficpublicBSubnet", this.vpc.publicSubnets[1].subnetId);
16
+ (0, import_util_1.exportValue)(this, isc.environmentName, "digitrafficprivateASubnet", this.vpc.privateSubnets[0].subnetId);
17
+ (0, import_util_1.exportValue)(this, isc.environmentName, "digitrafficprivateBSubnet", this.vpc.privateSubnets[1].subnetId);
14
18
  }
15
19
  createVpc(configuration) {
16
20
  return new aws_ec2_1.Vpc(this, "DigitrafficVPC", {
@@ -18,7 +22,7 @@ class NetworkStack extends aws_cdk_lib_1.Stack {
18
22
  availabilityZones: ["eu-west-1a", "eu-west-1b"],
19
23
  enableDnsHostnames: true,
20
24
  enableDnsSupport: true,
21
- cidr: configuration.cidr,
25
+ ipAddresses: aws_ec2_1.IpAddresses.cidr(configuration.cidr),
22
26
  subnetConfiguration: [
23
27
  {
24
28
  name: "public",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitraffic/common",
3
- "version": "2023.01.26-1",
3
+ "version": "2023.01.30-2",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,23 +17,22 @@
17
17
  "src/**/*.ts"
18
18
  ],
19
19
  "peerDependencies": {
20
- "@aws-cdk/aws-synthetics-alpha": "^2.50.0-alpha.0",
20
+ "@aws-cdk/aws-synthetics-alpha": "2.62.2-alpha.0",
21
21
  "@types/geojson": "^7946.0.10",
22
- "aws-cdk-lib": "^2.51.1",
23
- "aws-sdk": "^2.1241.0",
24
- "axios": "^1.2.0",
22
+ "aws-cdk-lib": "^2.62.2",
23
+ "aws-sdk": "^2.1304.0",
24
+ "axios": "^1.2.6",
25
25
  "change-case": "^4.1.2",
26
- "constructs": "^10.1.131",
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",
30
30
  "pg-native": "^3.0.1",
31
- "pg-promise": "^10.12.0",
32
- "spex": "^3.0.0"
31
+ "pg-promise": "^10.12.0"
33
32
  },
34
33
  "devDependencies": {
35
- "@aws-cdk/aws-synthetics-alpha": "2.60.0-alpha.0",
36
- "@types/aws-lambda": "^8.10.109",
34
+ "@aws-cdk/aws-synthetics-alpha": "2.62.2-alpha.0",
35
+ "@types/aws-lambda": "^8.10.110",
37
36
  "@types/geojson": "^7946.0.10",
38
37
  "@types/jest": "^29.2.5",
39
38
  "@types/node": "^18.11.18",
@@ -41,12 +40,12 @@
41
40
  "@types/sinon": "^10.0.13",
42
41
  "@typescript-eslint/eslint-plugin": "^5.48.2",
43
42
  "@typescript-eslint/parser": "^5.48.2",
44
- "aws-cdk-lib": "^2.60.0",
45
- "aws-sdk": "^2.1295.0",
46
- "axios": "^1.2.2",
43
+ "aws-cdk-lib": "^2.62.2",
44
+ "aws-sdk": "^2.1304.0",
45
+ "axios": "^1.2.6",
47
46
  "change-case": "^4.1.2",
48
47
  "constructs": "^10.1.222",
49
- "eslint": "^8.32.0",
48
+ "eslint": "^8.33.0",
50
49
  "eslint-config-prettier": "^8.6.0",
51
50
  "eslint-plugin-deprecation": "1.3.3",
52
51
  "geojson-validation": "^1.0.2",
@@ -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: string;
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
- createAuroraCluster(
83
- isc: InfraStackConfiguration,
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
- const cluster = new DatabaseClusterFromSnapshot(this, instanceName, {
119
- snapshotIdentifier: configuration.snapshotIdentifier,
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
 
@@ -24,6 +24,30 @@ export class NetworkStack extends Stack {
24
24
 
25
25
  this.vpc = this.createVpc(configuration);
26
26
  exportValue(this, isc.environmentName, "VPCID", this.vpc.vpcId);
27
+ exportValue(
28
+ this,
29
+ isc.environmentName,
30
+ "digitrafficpublicASubnet",
31
+ this.vpc.publicSubnets[0].subnetId
32
+ );
33
+ exportValue(
34
+ this,
35
+ isc.environmentName,
36
+ "digitrafficpublicBSubnet",
37
+ this.vpc.publicSubnets[1].subnetId
38
+ );
39
+ exportValue(
40
+ this,
41
+ isc.environmentName,
42
+ "digitrafficprivateASubnet",
43
+ this.vpc.privateSubnets[0].subnetId
44
+ );
45
+ exportValue(
46
+ this,
47
+ isc.environmentName,
48
+ "digitrafficprivateBSubnet",
49
+ this.vpc.privateSubnets[1].subnetId
50
+ );
27
51
  }
28
52
 
29
53
  createVpc(configuration: NetworkConfiguration): Vpc {
@@ -32,7 +56,7 @@ export class NetworkStack extends Stack {
32
56
  availabilityZones: ["eu-west-1a", "eu-west-1b"],
33
57
  enableDnsHostnames: true,
34
58
  enableDnsSupport: true,
35
- cidr: configuration.cidr,
59
+ ipAddresses: IpAddresses.cidr(configuration.cidr),
36
60
  subnetConfiguration: [
37
61
  {
38
62
  name: "public",