@digitraffic/common 2022.11.2-1 → 2022.11.10-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.
Files changed (37) hide show
  1. package/dist/aws/infra/canaries/database-checker.d.ts +22 -8
  2. package/dist/aws/infra/canaries/database-checker.js +36 -27
  3. package/dist/aws/infra/canaries/database-checker.js.map +1 -1
  4. package/dist/aws/infra/import-util.d.ts +21 -0
  5. package/dist/aws/infra/import-util.js +53 -0
  6. package/dist/aws/infra/import-util.js.map +1 -0
  7. package/dist/aws/infra/stack/rest_apis.d.ts +1 -1
  8. package/dist/aws/infra/stack/rest_apis.js +2 -2
  9. package/dist/aws/infra/stack/rest_apis.js.map +1 -1
  10. package/dist/aws/infra/stacks/db-dns-stack.d.ts +11 -0
  11. package/dist/aws/infra/stacks/db-dns-stack.js +63 -0
  12. package/dist/aws/infra/stacks/db-dns-stack.js.map +1 -0
  13. package/dist/aws/infra/stacks/db-proxy-stack.d.ts +19 -0
  14. package/dist/aws/infra/stacks/db-proxy-stack.js +74 -0
  15. package/dist/aws/infra/stacks/db-proxy-stack.js.map +1 -0
  16. package/dist/aws/infra/stacks/db-stack.d.ts +31 -0
  17. package/dist/aws/infra/stacks/db-stack.js +91 -0
  18. package/dist/aws/infra/stacks/db-stack.js.map +1 -0
  19. package/dist/aws/infra/stacks/intra-stack-configuration.d.ts +5 -0
  20. package/dist/aws/infra/stacks/intra-stack-configuration.js +3 -0
  21. package/dist/aws/infra/stacks/intra-stack-configuration.js.map +1 -0
  22. package/dist/aws/infra/stacks/network-stack.d.ts +12 -0
  23. package/dist/aws/infra/stacks/network-stack.js +36 -0
  24. package/dist/aws/infra/stacks/network-stack.js.map +1 -0
  25. package/dist/aws/infra/usage-plans.d.ts +3 -2
  26. package/dist/aws/infra/usage-plans.js +5 -4
  27. package/dist/aws/infra/usage-plans.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/aws/infra/canaries/database-checker.ts +42 -36
  30. package/src/aws/infra/import-util.ts +57 -0
  31. package/src/aws/infra/stack/rest_apis.ts +2 -2
  32. package/src/aws/infra/stacks/db-dns-stack.ts +88 -0
  33. package/src/aws/infra/stacks/db-proxy-stack.ts +129 -0
  34. package/src/aws/infra/stacks/db-stack.ts +165 -0
  35. package/src/aws/infra/stacks/intra-stack-configuration.ts +6 -0
  36. package/src/aws/infra/stacks/network-stack.ts +46 -0
  37. package/src/aws/infra/usage-plans.ts +15 -6
@@ -5,17 +5,31 @@ declare abstract class DatabaseCheck<T> {
5
5
  protected constructor(name: string, sql: string);
6
6
  abstract check(value: T): void;
7
7
  }
8
- interface BaseResponse {
8
+ interface CountResponse {
9
+ count: number;
9
10
  }
10
- export declare class DatabaseChecker {
11
+ /**
12
+ * Checker for sql that checks the count. Meaning that the
13
+ * sql must be structured as select(*) from table where something.
14
+ */
15
+ export declare class DatabaseCountChecker {
11
16
  credentialsFunction: () => Promise<void>;
12
- checks: DatabaseCheck<BaseResponse>[];
17
+ checks: DatabaseCheck<CountResponse>[];
13
18
  private constructor();
14
- static createForProxy(): DatabaseChecker;
15
- static createForRds(): DatabaseChecker;
16
- one(name: string, sql: string): this;
17
- empty(name: string, sql: string): this;
18
- notEmpty(name: string, sql: string): this;
19
+ static createForProxy(): DatabaseCountChecker;
20
+ static createForRds(): DatabaseCountChecker;
21
+ /**
22
+ * Expect that the count is 1
23
+ */
24
+ expectOne(name: string, sql: string): this;
25
+ /**
26
+ * Expect that the count is 0
27
+ */
28
+ expectZero(name: string, sql: string): this;
29
+ /**
30
+ * Expect that the count is 1 or more
31
+ */
32
+ expectOneOrMore(name: string, sql: string): this;
19
33
  expect(): Promise<string>;
20
34
  }
21
35
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DatabaseChecker = void 0;
3
+ exports.DatabaseCountChecker = void 0;
4
4
  const database_1 = require("../../../database/database");
5
5
  const proxy_holder_1 = require("../../runtime/secrets/proxy-holder");
6
6
  const rds_holder_1 = require("../../runtime/secrets/rds-holder");
@@ -17,34 +17,30 @@ class DatabaseCheck {
17
17
  class CountDatabaseCheck extends DatabaseCheck {
18
18
  constructor(name, sql, minCount, maxCount) {
19
19
  super(name, sql);
20
+ if (!sql.toLowerCase().includes("select count(*)")) {
21
+ throw new Error("sql must contain select count(*)");
22
+ }
20
23
  if (minCount == null && maxCount == null) {
21
- throw new Error("no max or min given!");
24
+ throw new Error("no max or min given");
22
25
  }
23
26
  this.minCount = minCount;
24
27
  this.maxCount = maxCount;
25
28
  }
26
29
  check(value) {
27
- if (!value) {
28
- this.failed = true;
29
- throw new Error("no return value");
30
- }
31
- else {
32
- if ("count" in value) {
33
- if (this.minCount && value.count < this.minCount) {
34
- this.failed = true;
35
- throw new Error(`count was ${value.count}, minimum is ${this.minCount}`);
36
- }
37
- if (this.maxCount && value.count > this.maxCount) {
38
- this.failed = true;
39
- throw new Error(`count was ${value.count}, max is ${this.maxCount}`);
40
- }
30
+ if ("count" in value) {
31
+ if (this.minCount && value.count < this.minCount) {
32
+ this.failed = true;
33
+ throw new Error(`count was ${value.count}, minimum is ${this.minCount}`);
41
34
  }
42
- else {
35
+ if (this.maxCount && value.count > this.maxCount) {
43
36
  this.failed = true;
44
- console.info("received " + JSON.stringify(value));
45
- throw new Error("no count available");
37
+ throw new Error(`count was ${value.count}, max is ${this.maxCount}`);
46
38
  }
47
39
  }
40
+ else {
41
+ this.failed = true;
42
+ throw new Error("no count available");
43
+ }
48
44
  }
49
45
  }
50
46
  const stepConfig = {
@@ -53,7 +49,11 @@ const stepConfig = {
53
49
  screenshotOnStepSuccess: false,
54
50
  screenshotOnStepFailure: false,
55
51
  };
56
- class DatabaseChecker {
52
+ /**
53
+ * Checker for sql that checks the count. Meaning that the
54
+ * sql must be structured as select(*) from table where something.
55
+ */
56
+ class DatabaseCountChecker {
57
57
  constructor(credentialsFunction) {
58
58
  this.credentialsFunction = credentialsFunction;
59
59
  this.checks = [];
@@ -61,20 +61,29 @@ class DatabaseChecker {
61
61
  synthetics.getConfiguration().withFailedCanaryMetric(true);
62
62
  }
63
63
  static createForProxy() {
64
- return new DatabaseChecker(() => new proxy_holder_1.ProxyHolder((0, utils_1.getEnvVariable)("SECRET_ID")).setCredentials());
64
+ return new DatabaseCountChecker(() => new proxy_holder_1.ProxyHolder((0, utils_1.getEnvVariable)("SECRET_ID")).setCredentials());
65
65
  }
66
66
  static createForRds() {
67
- return new DatabaseChecker(() => new rds_holder_1.RdsHolder((0, utils_1.getEnvVariable)("SECRET_ID")).setCredentials());
67
+ return new DatabaseCountChecker(() => new rds_holder_1.RdsHolder((0, utils_1.getEnvVariable)("SECRET_ID")).setCredentials());
68
68
  }
69
- one(name, sql) {
69
+ /**
70
+ * Expect that the count is 1
71
+ */
72
+ expectOne(name, sql) {
70
73
  this.checks.push(new CountDatabaseCheck(name, sql, 1, 1));
71
74
  return this;
72
75
  }
73
- empty(name, sql) {
76
+ /**
77
+ * Expect that the count is 0
78
+ */
79
+ expectZero(name, sql) {
74
80
  this.checks.push(new CountDatabaseCheck(name, sql, null, 0));
75
81
  return this;
76
82
  }
77
- notEmpty(name, sql) {
83
+ /**
84
+ * Expect that the count is 1 or more
85
+ */
86
+ expectOneOrMore(name, sql) {
78
87
  this.checks.push(new CountDatabaseCheck(name, sql, 1, null));
79
88
  return this;
80
89
  }
@@ -86,7 +95,7 @@ class DatabaseChecker {
86
95
  await (0, database_1.inDatabaseReadonly)(async (db) => {
87
96
  for (const check of this.checks) {
88
97
  console.info("canary checking sql " + check.sql);
89
- const value = await db.oneOrNone(check.sql);
98
+ const value = await db.one(check.sql);
90
99
  const checkFunction = () => {
91
100
  check.check(value);
92
101
  };
@@ -99,5 +108,5 @@ class DatabaseChecker {
99
108
  return "OK";
100
109
  }
101
110
  }
102
- exports.DatabaseChecker = DatabaseChecker;
111
+ exports.DatabaseCountChecker = DatabaseCountChecker;
103
112
  //# sourceMappingURL=database-checker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database-checker.js","sourceRoot":"","sources":["../../../../src/aws/infra/canaries/database-checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database-checker.js","sourceRoot":"","sources":["../../../../src/aws/infra/canaries/database-checker.ts"],"names":[],"mappings":";;;AAAA,yDAA4E;AAC5E,qEAAiE;AACjE,iEAA6D;AAC7D,gDAAsD;AAEtD,8DAA8D;AAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAEzC,MAAe,aAAa;IAKxB,YAAsB,IAAY,EAAE,GAAW;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;CAGJ;AAMD,MAAM,kBAAmB,SAAQ,aAA4B;IAIzD,YACI,IAAY,EACZ,GAAW,EACX,QAAuB,EACvB,QAAuB;QAEvB,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEjB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;YAChD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACvD;QAED,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SAC1C;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAoB;QACtB,IAAI,OAAO,IAAI,KAAK,EAAE;YAClB,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,MAAM,IAAI,KAAK,CACX,aAAa,KAAK,CAAC,KAAK,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAC1D,CAAC;aACL;YACD,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,MAAM,IAAI,KAAK,CACX,aAAa,KAAK,CAAC,KAAK,YAAY,IAAI,CAAC,QAAQ,EAAE,CACtD,CAAC;aACL;SACJ;aAAM;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YAEnB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACzC;IACL,CAAC;CACJ;AAED,MAAM,UAAU,GAAG;IACf,qBAAqB,EAAE,IAAI;IAC3B,qBAAqB,EAAE,KAAK;IAC5B,uBAAuB,EAAE,KAAK;IAC9B,uBAAuB,EAAE,KAAK;CACjC,CAAC;AAEF;;;GAGG;AACH,MAAa,oBAAoB;IAI7B,YAAoB,mBAAwC;QACxD,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,UAAU,CAAC,gBAAgB,EAAE,CAAC,qBAAqB,EAAE,CAAC;QAEtD,UAAU,CAAC,gBAAgB,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,cAAc;QACjB,OAAO,IAAI,oBAAoB,CAAC,GAAG,EAAE,CACjC,IAAI,0BAAW,CAAC,IAAA,sBAAc,EAAC,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,CAChE,CAAC;IACN,CAAC;IAED,MAAM,CAAC,YAAY;QACf,OAAO,IAAI,oBAAoB,CAAC,GAAG,EAAE,CACjC,IAAI,sBAAS,CAAC,IAAA,sBAAc,EAAC,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,CAC9D,CAAC;IACN,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY,EAAE,GAAW;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY,EAAE,GAAW;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,IAAY,EAAE,GAAW;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAE7D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;SAChC;QAED,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjC,MAAM,IAAA,6BAAkB,EAAC,KAAK,EAAE,EAAc,EAAE,EAAE;YAC9C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC7B,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEjD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAgB,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrD,MAAM,aAAa,GAAG,GAAG,EAAE;oBACvB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC,CAAC;gBAEF,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;aACjE;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;SAC7B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA7ED,oDA6EC"}
@@ -0,0 +1,21 @@
1
+ import { IVpc } from "aws-cdk-lib/aws-ec2";
2
+ import { Stack } from "aws-cdk-lib";
3
+ import { Construct } from "constructs";
4
+ export declare class OldStackImports {
5
+ static AURORAINSTANCE_SG_IMPORT_NAME: string;
6
+ static RDSPROXY_SG_IMPORT_NAME: string;
7
+ }
8
+ /**
9
+ * Import VPC from other stack outputs
10
+ */
11
+ export declare function importVpc(scope: Construct, environmentName: string): IVpc;
12
+ /**
13
+ * Import value from other stack output. Stack outputs are named with
14
+ * digitraffic-${environmentName}-${name} pattern and this function takes care of it
15
+ */
16
+ export declare function importValue(environmentName: string, name: string): string;
17
+ /**
18
+ * Export value as stack output. Use same naming pattern as importValue.
19
+ */
20
+ export declare function exportValue(stack: Stack, environmentName: string, name: string, value: string): void;
21
+ export declare function outputName(environmentName: string, name: string): string;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.outputName = exports.exportValue = exports.importValue = exports.importVpc = exports.OldStackImports = void 0;
4
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ class OldStackImports {
7
+ }
8
+ exports.OldStackImports = OldStackImports;
9
+ OldStackImports.AURORAINSTANCE_SG_IMPORT_NAME = "AuroraInstanceSG";
10
+ OldStackImports.RDSPROXY_SG_IMPORT_NAME = "RDSProxySG";
11
+ /**
12
+ * Import VPC from other stack outputs
13
+ */
14
+ function importVpc(scope, environmentName) {
15
+ const vpcId = importValue(environmentName, "VPCID");
16
+ const privateSubnetIds = [
17
+ importValue(environmentName, "digitrafficprivateASubnet"),
18
+ importValue(environmentName, "digitrafficprivateBSubnet"),
19
+ ];
20
+ const availabilityZones = ["euw1-az1", "euw1-az2"];
21
+ // VPC reference construction requires vpcId and availability zones
22
+ // private subnets are used in Lambda configuration
23
+ return aws_ec2_1.Vpc.fromVpcAttributes(scope, "vpc", {
24
+ vpcId,
25
+ privateSubnetIds,
26
+ availabilityZones,
27
+ });
28
+ }
29
+ exports.importVpc = importVpc;
30
+ /**
31
+ * Import value from other stack output. Stack outputs are named with
32
+ * digitraffic-${environmentName}-${name} pattern and this function takes care of it
33
+ */
34
+ function importValue(environmentName, name) {
35
+ return aws_cdk_lib_1.Fn.importValue(outputName(environmentName, name));
36
+ }
37
+ exports.importValue = importValue;
38
+ /**
39
+ * Export value as stack output. Use same naming pattern as importValue.
40
+ */
41
+ function exportValue(stack, environmentName, name, value) {
42
+ const exportName = outputName(environmentName, name);
43
+ new aws_cdk_lib_1.CfnOutput(stack, exportName, {
44
+ exportName,
45
+ value,
46
+ });
47
+ }
48
+ exports.exportValue = exportValue;
49
+ function outputName(environmentName, name) {
50
+ return `digitraffic-${environmentName}-${name}`;
51
+ }
52
+ exports.outputName = outputName;
53
+ //# sourceMappingURL=import-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-util.js","sourceRoot":"","sources":["../../../src/aws/infra/import-util.ts"],"names":[],"mappings":";;;AAAA,iDAAgD;AAChD,6CAAmD;AAGnD,MAAa,eAAe;;AAA5B,0CAGC;AAFiB,6CAA6B,GAAG,kBAAkB,CAAC;AACnD,uCAAuB,GAAG,YAAY,CAAC;AAGzD;;GAEG;AACH,SAAgB,SAAS,CAAC,KAAgB,EAAE,eAAuB;IAC/D,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG;QACrB,WAAW,CAAC,eAAe,EAAE,2BAA2B,CAAC;QACzD,WAAW,CAAC,eAAe,EAAE,2BAA2B,CAAC;KAC5D,CAAC;IACF,MAAM,iBAAiB,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEnD,mEAAmE;IACnE,mDAAmD;IACnD,OAAO,aAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE;QACvC,KAAK;QACL,gBAAgB;QAChB,iBAAiB;KACpB,CAAC,CAAC;AACP,CAAC;AAfD,8BAeC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,eAAuB,EAAE,IAAY;IAC7D,OAAO,gBAAE,CAAC,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAFD,kCAEC;AAED;;GAEG;AACH,SAAgB,WAAW,CACvB,KAAY,EACZ,eAAuB,EACvB,IAAY,EACZ,KAAa;IAEb,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IAErD,IAAI,uBAAS,CAAC,KAAK,EAAE,UAAU,EAAE;QAC7B,UAAU;QACV,KAAK;KACR,CAAC,CAAC;AACP,CAAC;AAZD,kCAYC;AAED,SAAgB,UAAU,CAAC,eAAuB,EAAE,IAAY;IAC5D,OAAO,eAAe,eAAe,IAAI,IAAI,EAAE,CAAC;AACpD,CAAC;AAFD,gCAEC"}
@@ -10,7 +10,7 @@ export declare class DigitrafficRestApi extends RestApi {
10
10
  constructor(stack: DigitrafficStack, apiId: string, apiName: string, allowFromIpAddresses?: string[] | undefined, config?: Partial<RestApiProps>);
11
11
  hostname(): string;
12
12
  createUsagePlan(apiKeyId: string, apiKeyName: string): string;
13
- createUsagePlanV2(apiName: string): string;
13
+ createUsagePlanV2(apiName: string, apiKey?: string): string;
14
14
  addJsonModel(modelName: string, schema: JsonSchema): ModelWithReference;
15
15
  addCSVModel(modelName: string): ModelWithReference;
16
16
  private getModelWithReference;
@@ -38,8 +38,8 @@ class DigitrafficRestApi extends aws_apigateway_1.RestApi {
38
38
  this.apiKeyIds.push(newKeyId);
39
39
  return newKeyId;
40
40
  }
41
- createUsagePlanV2(apiName) {
42
- const newKeyId = (0, usage_plans_1.createDefaultUsagePlan)(this, apiName).keyId;
41
+ createUsagePlanV2(apiName, apiKey) {
42
+ const newKeyId = (0, usage_plans_1.createDefaultUsagePlan)(this, apiName, apiKey).keyId;
43
43
  this.apiKeyIds.push(newKeyId);
44
44
  return newKeyId;
45
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rest_apis.js","sourceRoot":"","sources":["../../../../src/aws/infra/stack/rest_apis.ts"],"names":[],"mappings":";;;AAAA,+DAWoC;AACpC,iDAK6B;AAG7B,gDAAyE;AAEzE,wDAA6D;AAC7D,uDAAmD;AAGnD,2BAA4B;AAE5B,MAAa,kBAAmB,SAAQ,wBAAO;IAI3C,YACI,KAAuB,EACvB,KAAa,EACb,OAAe,EACf,oBAA2C,EAC3C,MAA8B;QAE9B,MAAM,cAAc,GAChB,oBAAoB,IAAI,IAAI;YACxB,CAAC,CAAC,2BAA2B,EAAE;YAC/B,CAAC,CAAC,iCAAiC,CAAC,oBAAoB,CAAC,CAAC;QAElE,kDAAkD;QAClD,MAAM,SAAS,GAAG;YACd,GAAG;gBACC,aAAa,EAAE;oBACX,YAAY,EAAE,mCAAkB,CAAC,KAAK;iBACzC;gBACD,WAAW,EAAE,OAAO;gBACpB,aAAa,EAAE,CAAC,6BAAY,CAAC,QAAQ,CAAC;gBACtC,MAAM,EAAE,cAAc;aACzB;YACD,GAAG,MAAM;SACZ,CAAC;QAEF,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAE/B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,mBAAmB;YACpB,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,mBAAmB,IAAI,IAAI,CAAC;QAEnE,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,QAAQ;QACJ,OAAO,GAAG,IAAI,CAAC,SAAS,gBACnB,IAAI,CAAC,KAA0B,CAAC,MACrC,gBAAgB,CAAC;IACrB,CAAC;IAED,eAAe,CAAC,QAAgB,EAAE,UAAkB;QAChD,MAAM,QAAQ,GAAG,IAAA,6BAAe,EAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC;QAEnE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE9B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,iBAAiB,CAAC,OAAe;QAC7B,MAAM,QAAQ,GAAG,IAAA,oCAAsB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC;QAE7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE9B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,MAAkB;QAC9C,OAAO,IAAI,CAAC,qBAAqB,CAC7B,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YACrB,WAAW,EAAE,sBAAS,CAAC,gBAAgB;YACvC,SAAS;YACT,MAAM;SACT,CAAC,CACL,CAAC;IACN,CAAC;IAED,WAAW,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,qBAAqB,CAC7B,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YACrB,WAAW,EAAE,sBAAS,CAAC,QAAQ;YAC/B,SAAS;YACT,MAAM,EAAE,EAAE;SACb,CAAC,CACL,CAAC;IACN,CAAC;IAEO,qBAAqB,CAAC,KAAY;QACtC,OAAO,CAAC,CAAC,KAAK,CACV,gBAAgB,EAChB,IAAA,6BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAChD,KAAK,CACc,CAAC;IAC5B,CAAC;IAEO,oBAAoB,CACxB,QAAkB,EAClB,aAAqB,EACrB,YAAoB,EACpB,IAAY,EACZ,UAAmC;QAEnC,MAAM,QAAQ,GAA0C;YACpD,IAAI;YACJ,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;SACtD,CAAC;QAEF,IAAI,qCAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE;YAC/C,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS;YACjC,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;SACzC,CAAC,CAAC;IACP,CAAC;IAED,gBAAgB,CACZ,QAAkB,EAClB,GAAG,iBAAsC;QAEzC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAC7B,IAAI,CAAC,oBAAoB,CACrB,QAAQ,EACR,EAAE,CAAC,aAAa,EAChB,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,aAAa,gBAAgB,EACpD,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,uBAAuB,CAC7B,CACJ,CAAC;SACL;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;SAChE;IACL,CAAC;CACJ;AA9HD,gDA8HC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,OAAgB,EAAE,KAAgB;IAC5D,IAAI,gCAAe,CACf,KAAK,EACL,sCAAsC,OAAO,CAAC,WAAW,EAAE,EAC3D;QACI,OAAO;QACP,IAAI,EAAE,6BAAY,CAAC,4BAA4B;QAC/C,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE;YACP,CAAC,sBAAS,CAAC,gBAAgB,CAAC,EAAE,0BAA0B;SAC3D;KACJ,CACJ,CAAC;AACN,CAAC;AAbD,sCAaC;AAED,SAAgB,aAAa,CAAC,OAAgB,EAAE,KAAgB;IAC5D,IAAI,gCAAe,CACf,KAAK,EACL,gCAAgC,OAAO,CAAC,WAAW,EAAE,EACrD;QACI,OAAO;QACP,IAAI,EAAE,6BAAY,CAAC,YAAY;QAC/B,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE;YACb,kBAAkB,EAAE,SAAS;SAChC;KACJ,CACJ,CAAC;AACN,CAAC;AAbD,sCAaC;AAED;;;;;;;;GAQG;AACH,SAAgB,0CAA0C,CACtD,UAAkB,EAClB,OAAe,EACf,OAAgB,EAChB,KAAgB;IAEhB,IAAI,gCAAe,CACf,KAAK,EACL,sCAAsC,OAAO,CAAC,WAAW,EAAE,EAC3D;QACI,OAAO;QACP,IAAI,EAAE,6BAAY,CAAC,4BAA4B;QAC/C,UAAU,EAAE,GAAG,UAAU,EAAE;QAC3B,SAAS,EAAE;YACP,CAAC,sBAAS,CAAC,gBAAgB,CAAC,EAAE,eAAe,OAAO,GAAG;SAC1D;KACJ,CACJ,CAAC;AACN,CAAC;AAlBD,gGAkBC;AAED,SAAgB,aAAa,CACzB,KAAgB,EAChB,KAAa,EACb,OAAe,EACf,oBAA2C;IAE3C,MAAM,cAAc,GAChB,oBAAoB,IAAI,IAAI;QACxB,CAAC,CAAC,2BAA2B,EAAE;QAC/B,CAAC,CAAC,iCAAiC,CAAC,oBAAoB,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,wBAAO,CAAC,KAAK,EAAE,KAAK,EAAE;QACtC,aAAa,EAAE;YACX,YAAY,EAAE,mCAAkB,CAAC,KAAK;SACzC;QACD,WAAW,EAAE,OAAO;QACpB,aAAa,EAAE,CAAC,6BAAY,CAAC,QAAQ,CAAC;QACtC,MAAM,EAAE,cAAc;KACzB,CAAC,CAAC;IACH,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,OAAO,CAAC;AACnB,CAAC;AApBD,sCAoBC;AAED,SAAgB,2BAA2B;IACvC,OAAO,IAAI,wBAAc,CAAC;QACtB,UAAU,EAAE;YACR,IAAI,yBAAe,CAAC;gBAChB,MAAM,EAAE,gBAAM,CAAC,KAAK;gBACpB,OAAO,EAAE,CAAC,oBAAoB,CAAC;gBAC/B,SAAS,EAAE,CAAC,GAAG,CAAC;gBAChB,UAAU,EAAE,CAAC,IAAI,sBAAY,EAAE,CAAC;aACnC,CAAC;SACL;KACJ,CAAC,CAAC;AACP,CAAC;AAXD,kEAWC;AAED,SAAgB,iCAAiC,CAC7C,oBAA8B;IAE9B,OAAO,IAAI,wBAAc,CAAC;QACtB,UAAU,EAAE;YACR,IAAI,yBAAe,CAAC;gBAChB,MAAM,EAAE,gBAAM,CAAC,KAAK;gBACpB,UAAU,EAAE;oBACR,SAAS,EAAE;wBACP,cAAc,EAAE,oBAAoB;qBACvC;iBACJ;gBACD,OAAO,EAAE,CAAC,oBAAoB,CAAC;gBAC/B,SAAS,EAAE,CAAC,GAAG,CAAC;gBAChB,UAAU,EAAE,CAAC,IAAI,sBAAY,EAAE,CAAC;aACnC,CAAC;SACL;KACJ,CAAC,CAAC;AACP,CAAC;AAlBD,8EAkBC"}
1
+ {"version":3,"file":"rest_apis.js","sourceRoot":"","sources":["../../../../src/aws/infra/stack/rest_apis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Stack } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ import { InfraStackConfiguration } from "./intra-stack-configuration";
4
+ /**
5
+ * Creates a dns local zone and creates records for cluster endpoints and proxy endpoints.
6
+ *
7
+ */
8
+ export declare class DbDnsStack extends Stack {
9
+ constructor(scope: Construct, id: string, isc: InfraStackConfiguration);
10
+ createDnsRecords(isc: InfraStackConfiguration): void;
11
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DbDnsStack = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
6
+ const import_util_1 = require("../import-util");
7
+ const db_stack_1 = require("./db-stack");
8
+ const db_proxy_stack_1 = require("./db-proxy-stack");
9
+ const DEFAULT_RECORD_TTL = aws_cdk_lib_1.Duration.seconds(30);
10
+ /**
11
+ * Creates a dns local zone and creates records for cluster endpoints and proxy endpoints.
12
+ *
13
+ */
14
+ class DbDnsStack extends aws_cdk_lib_1.Stack {
15
+ constructor(scope, id, isc) {
16
+ super(scope, id, {
17
+ env: isc.env,
18
+ });
19
+ this.createDnsRecords(isc);
20
+ }
21
+ createDnsRecords(isc) {
22
+ const vpc = (0, import_util_1.importVpc)(this, isc.environmentName);
23
+ const zone = new aws_route53_1.PrivateHostedZone(this, "DNSHostedZone", {
24
+ zoneName: isc.environmentName + ".local",
25
+ vpc,
26
+ });
27
+ zone.applyRemovalPolicy(aws_cdk_lib_1.RemovalPolicy.RETAIN);
28
+ const clusterReaderEndpoint = (0, import_util_1.importValue)(isc.environmentName, db_stack_1.DbStack.CLUSTER_READ_ENDPOINT_EXPORT_NAME);
29
+ const clusterWriterEndpoint = (0, import_util_1.importValue)(isc.environmentName, db_stack_1.DbStack.CLUSTER_WRITE_ENDPOINT_EXPORT_NAME);
30
+ const proxyReaderEndpoint = (0, import_util_1.importValue)(isc.environmentName, db_proxy_stack_1.DbProxyStack.PROXY_READER_EXPORT_NAME);
31
+ const proxyWriterEndpoint = (0, import_util_1.importValue)(isc.environmentName, db_proxy_stack_1.DbProxyStack.PROXY_WRITER_EXPORT_NAME);
32
+ new aws_route53_1.RecordSet(this, "ReaderRecord", {
33
+ recordType: aws_route53_1.RecordType.CNAME,
34
+ recordName: `db-ro.${isc.environmentName}.local`,
35
+ target: aws_route53_1.RecordTarget.fromValues(clusterReaderEndpoint),
36
+ ttl: DEFAULT_RECORD_TTL,
37
+ zone,
38
+ });
39
+ new aws_route53_1.RecordSet(this, "WriterRecord", {
40
+ recordType: aws_route53_1.RecordType.CNAME,
41
+ recordName: `db.${isc.environmentName}.local`,
42
+ target: aws_route53_1.RecordTarget.fromValues(clusterWriterEndpoint),
43
+ ttl: DEFAULT_RECORD_TTL,
44
+ zone,
45
+ });
46
+ new aws_route53_1.RecordSet(this, "ProxyReaderRecord", {
47
+ recordType: aws_route53_1.RecordType.CNAME,
48
+ recordName: `proxy-ro.${isc.environmentName}.local`,
49
+ target: aws_route53_1.RecordTarget.fromValues(proxyReaderEndpoint),
50
+ ttl: DEFAULT_RECORD_TTL,
51
+ zone,
52
+ });
53
+ new aws_route53_1.RecordSet(this, "ProxyWriterRecord", {
54
+ recordType: aws_route53_1.RecordType.CNAME,
55
+ recordName: `proxy.${isc.environmentName}.local`,
56
+ target: aws_route53_1.RecordTarget.fromValues(proxyWriterEndpoint),
57
+ ttl: DEFAULT_RECORD_TTL,
58
+ zone,
59
+ });
60
+ }
61
+ }
62
+ exports.DbDnsStack = DbDnsStack;
63
+ //# sourceMappingURL=db-dns-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-dns-stack.js","sourceRoot":"","sources":["../../../../src/aws/infra/stacks/db-dns-stack.ts"],"names":[],"mappings":";;;AAAA,6CAA6D;AAE7D,yDAKiC;AAEjC,gDAAwD;AACxD,yCAAqC;AACrC,qDAAgD;AAEhD,MAAM,kBAAkB,GAAG,sBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAEhD;;;GAGG;AACH,MAAa,UAAW,SAAQ,mBAAK;IACjC,YAAY,KAAgB,EAAE,EAAU,EAAE,GAA4B;QAClE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE;YACb,GAAG,EAAE,GAAG,CAAC,GAAG;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,gBAAgB,CAAC,GAA4B;QACzC,MAAM,GAAG,GAAG,IAAA,uBAAS,EAAC,IAAI,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,+BAAiB,CAAC,IAAI,EAAE,eAAe,EAAE;YACtD,QAAQ,EAAE,GAAG,CAAC,eAAe,GAAG,QAAQ;YACxC,GAAG;SACN,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,CAAC,2BAAa,CAAC,MAAM,CAAC,CAAC;QAE9C,MAAM,qBAAqB,GAAG,IAAA,yBAAW,EACrC,GAAG,CAAC,eAAe,EACnB,kBAAO,CAAC,iCAAiC,CAC5C,CAAC;QACF,MAAM,qBAAqB,GAAG,IAAA,yBAAW,EACrC,GAAG,CAAC,eAAe,EACnB,kBAAO,CAAC,kCAAkC,CAC7C,CAAC;QAEF,MAAM,mBAAmB,GAAG,IAAA,yBAAW,EACnC,GAAG,CAAC,eAAe,EACnB,6BAAY,CAAC,wBAAwB,CACxC,CAAC;QACF,MAAM,mBAAmB,GAAG,IAAA,yBAAW,EACnC,GAAG,CAAC,eAAe,EACnB,6BAAY,CAAC,wBAAwB,CACxC,CAAC;QAEF,IAAI,uBAAS,CAAC,IAAI,EAAE,cAAc,EAAE;YAChC,UAAU,EAAE,wBAAU,CAAC,KAAK;YAC5B,UAAU,EAAE,SAAS,GAAG,CAAC,eAAe,QAAQ;YAChD,MAAM,EAAE,0BAAY,CAAC,UAAU,CAAC,qBAAqB,CAAC;YACtD,GAAG,EAAE,kBAAkB;YACvB,IAAI;SACP,CAAC,CAAC;QAEH,IAAI,uBAAS,CAAC,IAAI,EAAE,cAAc,EAAE;YAChC,UAAU,EAAE,wBAAU,CAAC,KAAK;YAC5B,UAAU,EAAE,MAAM,GAAG,CAAC,eAAe,QAAQ;YAC7C,MAAM,EAAE,0BAAY,CAAC,UAAU,CAAC,qBAAqB,CAAC;YACtD,GAAG,EAAE,kBAAkB;YACvB,IAAI;SACP,CAAC,CAAC;QAEH,IAAI,uBAAS,CAAC,IAAI,EAAE,mBAAmB,EAAE;YACrC,UAAU,EAAE,wBAAU,CAAC,KAAK;YAC5B,UAAU,EAAE,YAAY,GAAG,CAAC,eAAe,QAAQ;YACnD,MAAM,EAAE,0BAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC;YACpD,GAAG,EAAE,kBAAkB;YACvB,IAAI;SACP,CAAC,CAAC;QAEH,IAAI,uBAAS,CAAC,IAAI,EAAE,mBAAmB,EAAE;YACrC,UAAU,EAAE,wBAAU,CAAC,KAAK;YAC5B,UAAU,EAAE,SAAS,GAAG,CAAC,eAAe,QAAQ;YAChD,MAAM,EAAE,0BAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC;YACpD,GAAG,EAAE,kBAAkB;YACvB,IAAI;SACP,CAAC,CAAC;IACP,CAAC;CACJ;AApED,gCAoEC"}
@@ -0,0 +1,19 @@
1
+ import { Stack } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ import { CfnDBProxyEndpoint, DatabaseProxy } from "aws-cdk-lib/aws-rds";
4
+ import { ISecret } from "aws-cdk-lib/aws-secretsmanager";
5
+ import { IVpc } from "aws-cdk-lib/aws-ec2";
6
+ import { InfraStackConfiguration } from "./intra-stack-configuration";
7
+ import { DbConfiguration } from "./db-stack";
8
+ /**
9
+ * A stack that creates a Database proxy.
10
+ */
11
+ export declare class DbProxyStack extends Stack {
12
+ static PROXY_READER_EXPORT_NAME: string;
13
+ static PROXY_WRITER_EXPORT_NAME: string;
14
+ readonly isc: InfraStackConfiguration;
15
+ constructor(scope: Construct, id: string, isc: InfraStackConfiguration, configuration: DbConfiguration);
16
+ createProxy(vpc: IVpc, secret: ISecret, configuration: DbConfiguration): DatabaseProxy;
17
+ createProxyEndpoints(vpc: IVpc, proxy: DatabaseProxy, securityGroupId: string): CfnDBProxyEndpoint;
18
+ setOutputs(configuration: DbConfiguration, proxy: DatabaseProxy, proxyEndpoint: CfnDBProxyEndpoint): void;
19
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DbProxyStack = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_rds_1 = require("aws-cdk-lib/aws-rds");
6
+ const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
7
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
8
+ const db_stack_1 = require("./db-stack");
9
+ const import_util_1 = require("../import-util");
10
+ /**
11
+ * A stack that creates a Database proxy.
12
+ */
13
+ class DbProxyStack extends aws_cdk_lib_1.Stack {
14
+ constructor(scope, id, isc, configuration) {
15
+ super(scope, id, {
16
+ env: isc.env,
17
+ });
18
+ this.isc = isc;
19
+ const vpc = (0, import_util_1.importVpc)(this, isc.environmentName);
20
+ const secret = aws_secretsmanager_1.Secret.fromSecretAttributes(this, "proxy-secret", {
21
+ secretCompleteArn: configuration.secretArn,
22
+ });
23
+ const proxy = this.createProxy(vpc, secret, configuration);
24
+ const readerEndpoint = this.createProxyEndpoints(vpc, proxy, configuration.securityGroupId);
25
+ this.setOutputs(configuration, proxy, readerEndpoint);
26
+ }
27
+ createProxy(vpc, secret, configuration) {
28
+ const proxyId = `${this.isc.environmentName}-proxy`;
29
+ const securityGroup = aws_ec2_1.SecurityGroup.fromSecurityGroupId(this, "securitygroup", configuration.securityGroupId);
30
+ const cluster = aws_rds_1.DatabaseCluster.fromDatabaseClusterAttributes(this, "db-cluster", {
31
+ clusterIdentifier: (0, import_util_1.importValue)(this.isc.environmentName, db_stack_1.DbStack.CLUSTER_IDENTIFIER_EXPORT_NAME),
32
+ engine: aws_rds_1.DatabaseClusterEngine.AURORA_POSTGRESQL,
33
+ port: db_stack_1.DbStack.CLUSTER_PORT,
34
+ });
35
+ // CDK tries to allow connections between proxy and cluster
36
+ // this does not work on cluster references
37
+ cluster.connections.allowDefaultPortFrom = () => {
38
+ /* nothing */
39
+ };
40
+ return new aws_rds_1.DatabaseProxy(this, proxyId, {
41
+ dbProxyName: configuration.dbProxyName ?? "AuroraProxy",
42
+ securityGroups: [securityGroup],
43
+ proxyTarget: aws_rds_1.ProxyTarget.fromCluster(cluster),
44
+ idleClientTimeout: aws_cdk_lib_1.Duration.seconds(1800),
45
+ maxConnectionsPercent: 50,
46
+ maxIdleConnectionsPercent: 25,
47
+ borrowTimeout: aws_cdk_lib_1.Duration.seconds(120),
48
+ requireTLS: false,
49
+ secrets: [secret],
50
+ vpc: vpc,
51
+ });
52
+ }
53
+ createProxyEndpoints(vpc, proxy, securityGroupId) {
54
+ return new aws_rds_1.CfnDBProxyEndpoint(this, "ReaderEndpoint", {
55
+ dbProxyEndpointName: "ReaderEndpoint",
56
+ dbProxyName: proxy.dbProxyName,
57
+ vpcSubnetIds: vpc.privateSubnets.map((sub) => sub.subnetId),
58
+ vpcSecurityGroupIds: [securityGroupId],
59
+ targetRole: "READ_ONLY",
60
+ });
61
+ }
62
+ setOutputs(configuration, proxy, proxyEndpoint) {
63
+ const readerEndpoint = configuration.instances > 1
64
+ ? proxyEndpoint.attrEndpoint
65
+ : proxy.endpoint;
66
+ // if only one instance, then there is no reader-endpoint
67
+ (0, import_util_1.exportValue)(this, this.isc.environmentName, DbProxyStack.PROXY_READER_EXPORT_NAME, readerEndpoint);
68
+ (0, import_util_1.exportValue)(this, this.isc.environmentName, DbProxyStack.PROXY_WRITER_EXPORT_NAME, proxy.endpoint);
69
+ }
70
+ }
71
+ exports.DbProxyStack = DbProxyStack;
72
+ DbProxyStack.PROXY_READER_EXPORT_NAME = "db-reader-endpoint";
73
+ DbProxyStack.PROXY_WRITER_EXPORT_NAME = "db-writer-endpoint";
74
+ //# sourceMappingURL=db-proxy-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-proxy-stack.js","sourceRoot":"","sources":["../../../../src/aws/infra/stacks/db-proxy-stack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Stack } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ import { AuroraPostgresEngineVersion, DatabaseCluster } from "aws-cdk-lib/aws-rds";
4
+ import { InstanceType } from "aws-cdk-lib/aws-ec2";
5
+ import { InfraStackConfiguration } from "./intra-stack-configuration";
6
+ export interface DbConfiguration {
7
+ readonly secretArn: string;
8
+ readonly dbVersion: AuroraPostgresEngineVersion;
9
+ readonly dbInstanceType: InstanceType;
10
+ readonly snapshotIdentifier: string;
11
+ readonly instances: number;
12
+ readonly customParameterGroup: boolean;
13
+ readonly securityGroupId: string;
14
+ readonly dbProxyName?: string;
15
+ }
16
+ /**
17
+ * How to upgrade major version?
18
+ * 0. Set correct SG for db-stack and db-proxy-stack(this step will be removed in the future)
19
+ * 1. Update db-stack WITHOUT parameter group
20
+ * 2. Upgrade extensions by hand
21
+ * 3. Upgrade database from the AWS console
22
+ * 4. Update db-stack with the upgraded version and custom parameter group
23
+ */
24
+ export declare class DbStack extends Stack {
25
+ static CLUSTER_IDENTIFIER_EXPORT_NAME: string;
26
+ static CLUSTER_READ_ENDPOINT_EXPORT_NAME: string;
27
+ static CLUSTER_WRITE_ENDPOINT_EXPORT_NAME: string;
28
+ static CLUSTER_PORT: number;
29
+ constructor(scope: Construct, id: string, isc: InfraStackConfiguration, configuration: DbConfiguration);
30
+ createAuroraCluster(isc: InfraStackConfiguration, configuration: DbConfiguration): DatabaseCluster;
31
+ }
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DbStack = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
6
+ const aws_rds_1 = require("aws-cdk-lib/aws-rds");
7
+ const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
8
+ const import_util_1 = require("../import-util");
9
+ /**
10
+ * How to upgrade major version?
11
+ * 0. Set correct SG for db-stack and db-proxy-stack(this step will be removed in the future)
12
+ * 1. Update db-stack WITHOUT parameter group
13
+ * 2. Upgrade extensions by hand
14
+ * 3. Upgrade database from the AWS console
15
+ * 4. Update db-stack with the upgraded version and custom parameter group
16
+ */
17
+ class DbStack extends aws_cdk_lib_1.Stack {
18
+ constructor(scope, id, isc, configuration) {
19
+ super(scope, id, {
20
+ env: isc.env,
21
+ });
22
+ const cluster = this.createAuroraCluster(isc, configuration);
23
+ (0, import_util_1.exportValue)(this, isc.environmentName, DbStack.CLUSTER_IDENTIFIER_EXPORT_NAME, cluster.clusterIdentifier);
24
+ (0, import_util_1.exportValue)(this, isc.environmentName, DbStack.CLUSTER_WRITE_ENDPOINT_EXPORT_NAME, cluster.clusterEndpoint.hostname);
25
+ (0, import_util_1.exportValue)(this, isc.environmentName, DbStack.CLUSTER_READ_ENDPOINT_EXPORT_NAME, cluster.clusterReadEndpoint.hostname);
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
35
+ ? new aws_rds_1.ParameterGroup(this, `parameter-group-${configuration.dbVersion.auroraPostgresMajorVersion}`, {
36
+ engine: aws_rds_1.DatabaseClusterEngine.auroraPostgres({
37
+ version: configuration.dbVersion,
38
+ }),
39
+ parameters: {
40
+ "pg_stat_statements.track": "ALL",
41
+ random_page_cost: "1",
42
+ },
43
+ })
44
+ : aws_rds_1.ParameterGroup.fromParameterGroupName(this, "ParameterGroup", `default.aurora-postgresql${configuration.dbVersion.auroraPostgresMajorVersion}`);
45
+ const cluster = new aws_rds_1.DatabaseClusterFromSnapshot(this, instanceName, {
46
+ snapshotIdentifier: configuration.snapshotIdentifier,
47
+ engine: aws_rds_1.DatabaseClusterEngine.auroraPostgres({
48
+ version: configuration.dbVersion,
49
+ }),
50
+ instances: configuration.instances,
51
+ instanceUpdateBehaviour: aws_rds_1.InstanceUpdateBehaviour.ROLLING,
52
+ instanceIdentifierBase: instanceName + "-",
53
+ cloudwatchLogsExports: ["postgresql"],
54
+ backup: {
55
+ retention: aws_cdk_lib_1.Duration.days(35),
56
+ preferredWindow: "01:00-02:00",
57
+ },
58
+ preferredMaintenanceWindow: "mon:03:00-mon:04:00",
59
+ deletionProtection: true,
60
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN,
61
+ port: DbStack.CLUSTER_PORT,
62
+ instanceProps: {
63
+ autoMinorVersionUpgrade: true,
64
+ allowMajorVersionUpgrade: false,
65
+ enablePerformanceInsights: true,
66
+ vpc,
67
+ securityGroups: [securityGroup],
68
+ vpcSubnets: {
69
+ subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_NAT,
70
+ },
71
+ instanceType: configuration.dbInstanceType,
72
+ parameterGroup,
73
+ },
74
+ credentials: aws_rds_1.Credentials.fromSecret(secret),
75
+ parameterGroup,
76
+ });
77
+ // this workaround should prevent stack failing on version upgrade
78
+ const cfnInstances = cluster.node.children.filter((child) => child instanceof aws_rds_1.CfnDBInstance);
79
+ if (cfnInstances.length === 0) {
80
+ throw new Error("Couldn't pull CfnDBInstances from the L1 constructs!");
81
+ }
82
+ cfnInstances.forEach((cfnInstance) => delete cfnInstance.engineVersion);
83
+ return cluster;
84
+ }
85
+ }
86
+ exports.DbStack = DbStack;
87
+ DbStack.CLUSTER_IDENTIFIER_EXPORT_NAME = "db-cluster";
88
+ DbStack.CLUSTER_READ_ENDPOINT_EXPORT_NAME = "db-cluster-reader-endpoint";
89
+ DbStack.CLUSTER_WRITE_ENDPOINT_EXPORT_NAME = "db-cluster-writer-endpoint";
90
+ DbStack.CLUSTER_PORT = 5432;
91
+ //# sourceMappingURL=db-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-stack.js","sourceRoot":"","sources":["../../../../src/aws/infra/stacks/db-stack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Environment } from "aws-cdk-lib";
2
+ export interface InfraStackConfiguration {
3
+ readonly env: Environment;
4
+ readonly environmentName: string;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=intra-stack-configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intra-stack-configuration.js","sourceRoot":"","sources":["../../../../src/aws/infra/stacks/intra-stack-configuration.ts"],"names":[],"mappings":""}