@fjall/components-infrastructure 0.72.0 → 0.73.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.
@@ -2,23 +2,36 @@ import { Construct } from "constructs";
2
2
  import App from "../../app";
3
3
  import { Secret } from "../../resources/aws/secrets";
4
4
  import { Connections, IConnectable, IVpc } from "aws-cdk-lib/aws-ec2";
5
- import { IInstanceEngine } from "aws-cdk-lib/aws-rds";
6
- type StorageType = "Aurora" | "Instance" | "FreeTier";
7
- export type CommonStorageProps = {
5
+ import { IInstanceEngine, IClusterEngine } from "aws-cdk-lib/aws-rds";
6
+ type BaseStorageProps = {
8
7
  vpc?: IVpc;
9
- type: StorageType;
10
8
  databaseName: string;
11
9
  instanceType?: string;
12
10
  };
13
- export type AuroraStorageProps = {} & CommonStorageProps;
14
- export type InstanceStorageProps = {
11
+ export interface AuroraStorageProps extends BaseStorageProps {
12
+ type: "Aurora";
13
+ engine?: IClusterEngine;
14
+ }
15
+ export interface GlobalAuroraStorageProps extends BaseStorageProps {
16
+ type: "GlobalAurora";
17
+ primaryRegion: string;
18
+ globalClusterIdentifier?: string;
19
+ engine?: IClusterEngine;
20
+ }
21
+ export interface InstanceStorageProps extends BaseStorageProps {
22
+ type: "Instance";
15
23
  engine?: IInstanceEngine;
16
24
  allocatedStorage?: number;
17
25
  port?: number;
18
- } & CommonStorageProps;
19
- export type IStorageProps = AuroraStorageProps | InstanceStorageProps;
26
+ }
27
+ export interface FreeTierStorageProps extends BaseStorageProps {
28
+ type: "FreeTier";
29
+ engine?: IInstanceEngine;
30
+ port?: number;
31
+ }
32
+ export type IStorageProps = AuroraStorageProps | InstanceStorageProps | GlobalAuroraStorageProps | FreeTierStorageProps;
20
33
  export declare class StorageFactory {
21
- static build(id: string, props: IStorageProps): (app: App, scope: Construct) => Storage;
34
+ static build<T extends IStorageProps>(id: string, props: T): (app: App, scope: Construct) => Storage;
22
35
  }
23
36
  export declare class Storage extends Construct implements IConnectable {
24
37
  id: string;
@@ -29,6 +42,10 @@ export declare class Storage extends Construct implements IConnectable {
29
42
  private database;
30
43
  constructor(scope: Construct, id: string, props: IStorageProps);
31
44
  addStorage(props: IStorageProps): void;
45
+ private addAurora;
46
+ private addAuroraGlobal;
47
+ private addRdsInstance;
48
+ private addRdsFreeTier;
32
49
  getCredentials(): Secret;
33
50
  getHostEndpoint(): string;
34
51
  getHostPort(): string;
@@ -3,14 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Storage = exports.StorageFactory = void 0;
4
4
  const constructs_1 = require("constructs");
5
5
  const database_1 = require("../../resources/aws/database");
6
+ const rdsAuroraGlobal_1 = require("../../resources/aws/database/rdsAuroraGlobal");
6
7
  class StorageFactory {
7
8
  static build(id, props) {
8
9
  return (app, scope) => {
9
10
  const storageProps = {
10
- ...{
11
- vpc: props.vpc || app.getDefaultVpc()
12
- },
13
- ...props
11
+ ...props,
12
+ vpc: (props.vpc || app.getDefaultVpc())
14
13
  };
15
14
  return new Storage(scope, id, storageProps);
16
15
  };
@@ -26,42 +25,67 @@ class Storage extends constructs_1.Construct {
26
25
  this.addStorage(props);
27
26
  }
28
27
  addStorage(props) {
29
- if (props.type === "Aurora") {
30
- if (!props.vpc) {
31
- throw new Error("VPC is required for Aurora database");
32
- }
33
- this.database = new database_1.RdsAurora(this, `${props.databaseName}Rds`, {
34
- vpc: props.vpc,
35
- databaseName: props.databaseName
36
- });
37
- }
38
- else if (props.type === "Instance") {
39
- const iProps = props;
40
- this.database = new database_1.RdsInstance(this, `${iProps.databaseName}Rds`, {
41
- // Common props
42
- vpc: iProps.vpc,
43
- databaseName: iProps.databaseName,
44
- instanceType: iProps.instanceType,
45
- // Instance specific props
46
- allocatedStorage: iProps.allocatedStorage,
47
- port: iProps.port,
48
- engine: iProps.engine
49
- });
50
- }
51
- else if (props.type === "FreeTier") {
52
- const fProps = props;
53
- this.database = new database_1.RdsFreeTier(this, `${fProps.databaseName}Rds`, {
54
- // Common props
55
- vpc: fProps.vpc,
56
- databaseName: fProps.databaseName,
57
- // Instance specific props
58
- port: fProps.port,
59
- engine: fProps.engine
60
- });
61
- }
62
- else {
63
- throw new Error("Invalid database type");
28
+ switch (props.type) {
29
+ case "Aurora":
30
+ this.addAurora(props);
31
+ break;
32
+ case "GlobalAurora":
33
+ this.addAuroraGlobal(props);
34
+ break;
35
+ case "Instance":
36
+ this.addRdsInstance(props);
37
+ break;
38
+ case "FreeTier":
39
+ this.addRdsFreeTier(props);
40
+ break;
41
+ default:
42
+ // Exhaustiveness check
43
+ const _exhaustive = props;
44
+ throw new Error(`Unsupported storage type ${props.type}`);
64
45
  }
46
+ }
47
+ addAurora(props) {
48
+ if (!props.vpc)
49
+ throw new Error("VPC is required for Aurora database");
50
+ this.database = new database_1.RdsAurora(this, `${props.databaseName}Rds`, {
51
+ vpc: props.vpc,
52
+ databaseName: props.databaseName,
53
+ engine: props.engine
54
+ });
55
+ this.connections = this.database.connections;
56
+ }
57
+ addAuroraGlobal(props) {
58
+ if (!props.vpc)
59
+ throw new Error("VPC is required for Global Aurora database");
60
+ if (!props.primaryRegion)
61
+ throw new Error("primaryRegion is required for Global Aurora database");
62
+ this.database = new rdsAuroraGlobal_1.RdsAuroraGlobal(this, `${props.databaseName}RdsGlobal`, {
63
+ vpc: props.vpc,
64
+ databaseName: props.databaseName,
65
+ primaryRegion: props.primaryRegion,
66
+ globalClusterIdentifier: props.globalClusterIdentifier,
67
+ engine: props.engine
68
+ });
69
+ this.connections = this.database.connections;
70
+ }
71
+ addRdsInstance(props) {
72
+ this.database = new database_1.RdsInstance(this, `${props.databaseName}Rds`, {
73
+ vpc: props.vpc,
74
+ databaseName: props.databaseName,
75
+ instanceType: props.instanceType,
76
+ allocatedStorage: props.allocatedStorage,
77
+ port: props.port,
78
+ engine: props.engine
79
+ });
80
+ this.connections = this.database.connections;
81
+ }
82
+ addRdsFreeTier(props) {
83
+ this.database = new database_1.RdsFreeTier(this, `${props.databaseName}Rds`, {
84
+ vpc: props.vpc,
85
+ databaseName: props.databaseName,
86
+ port: props.port,
87
+ engine: props.engine
88
+ });
65
89
  this.connections = this.database.connections;
66
90
  }
67
91
  getCredentials() {
@@ -78,4 +102,4 @@ class Storage extends constructs_1.Construct {
78
102
  }
79
103
  }
80
104
  exports.Storage = Storage;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwyQ0FBdUM7QUFHdkMsMkRBSXNDO0FBeUJ0QyxNQUFhLGNBQWM7SUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBb0I7UUFDM0MsT0FBTyxDQUFDLEdBQVEsRUFBRSxLQUFnQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLEdBQUc7b0JBQ0QsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRTtpQkFDdEM7Z0JBQ0QsR0FBRyxLQUFLO2FBQ1QsQ0FBQztZQUNGLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFaRCx3Q0FZQztBQUVELE1BQWEsT0FBUSxTQUFRLHNCQUFTO0lBVXBDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBb0I7UUFDN0IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksb0JBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsWUFBWSxLQUFLLEVBQUU7Z0JBQzlELEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7YUFDakMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxLQUE2QixDQUFDO1lBRTdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQkFBVyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEtBQUssRUFBRTtnQkFDakUsZUFBZTtnQkFDZixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ2YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUNqQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7Z0JBQ2pDLDBCQUEwQjtnQkFDMUIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtnQkFDekMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxLQUE2QixDQUFDO1lBRTdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQkFBVyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEtBQUssRUFBRTtnQkFDakUsZUFBZTtnQkFDZixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ2YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUNqQywwQkFBMEI7Z0JBQzFCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2FBQ3RCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQTFFRCwwQkEwRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5pbXBvcnQge1xuICBSZHNBdXJvcmEsXG4gIFJkc0ZyZWVUaWVyLFxuICBSZHNJbnN0YW5jZVxufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZVwiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuXG5pbXBvcnQgeyBDb25uZWN0aW9ucywgSUNvbm5lY3RhYmxlLCBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IElJbnN0YW5jZUVuZ2luZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCI7XG5cbnR5cGUgU3RvcmFnZVR5cGUgPSBcIkF1cm9yYVwiIHwgXCJJbnN0YW5jZVwiIHwgXCJGcmVlVGllclwiO1xuXG5leHBvcnQgdHlwZSBDb21tb25TdG9yYWdlUHJvcHMgPSB7XG4gIHZwYz86IElWcGM7XG4gIHR5cGU6IFN0b3JhZ2VUeXBlO1xuICBkYXRhYmFzZU5hbWU6IHN0cmluZztcbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQXVyb3JhU3RvcmFnZVByb3BzID0ge30gJiBDb21tb25TdG9yYWdlUHJvcHM7XG5cbmV4cG9ydCB0eXBlIEluc3RhbmNlU3RvcmFnZVByb3BzID0ge1xuICBlbmdpbmU/OiBJSW5zdGFuY2VFbmdpbmU7XG4gIGFsbG9jYXRlZFN0b3JhZ2U/OiBudW1iZXI7XG4gIHBvcnQ/OiBudW1iZXI7XG59ICYgQ29tbW9uU3RvcmFnZVByb3BzO1xuXG5leHBvcnQgdHlwZSBJU3RvcmFnZVByb3BzID0gQXVyb3JhU3RvcmFnZVByb3BzIHwgSW5zdGFuY2VTdG9yYWdlUHJvcHM7XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogSVN0b3JhZ2VQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JhZ2VQcm9wcyA9IHtcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogcHJvcHMudnBjIHx8IGFwcC5nZXREZWZhdWx0VnBjKClcbiAgICAgICAgfSxcbiAgICAgICAgLi4ucHJvcHNcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IFN0b3JhZ2Uoc2NvcGUsIGlkLCBzdG9yYWdlUHJvcHMpO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHB1YmxpYyB2cGM6IElWcGM7XG5cbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGRhdGFiYXNlOiBSZHNBdXJvcmEgfCBSZHNJbnN0YW5jZSB8IFJkc0ZyZWVUaWVyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJU3RvcmFnZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWU7XG4gICAgdGhpcy5hZGRTdG9yYWdlKHByb3BzKTtcbiAgfVxuXG4gIGFkZFN0b3JhZ2UocHJvcHM6IElTdG9yYWdlUHJvcHMpIHtcbiAgICBpZiAocHJvcHMudHlwZSA9PT0gXCJBdXJvcmFcIikge1xuICAgICAgaWYgKCFwcm9wcy52cGMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVlBDIGlzIHJlcXVpcmVkIGZvciBBdXJvcmEgZGF0YWJhc2VcIik7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0F1cm9yYSh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzYCwge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocHJvcHMudHlwZSA9PT0gXCJJbnN0YW5jZVwiKSB7XG4gICAgICBjb25zdCBpUHJvcHMgPSBwcm9wcyBhcyBJbnN0YW5jZVN0b3JhZ2VQcm9wcztcblxuICAgICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNJbnN0YW5jZSh0aGlzLCBgJHtpUHJvcHMuZGF0YWJhc2VOYW1lfVJkc2AsIHtcbiAgICAgICAgLy8gQ29tbW9uIHByb3BzXG4gICAgICAgIHZwYzogaVByb3BzLnZwYyxcbiAgICAgICAgZGF0YWJhc2VOYW1lOiBpUHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBpbnN0YW5jZVR5cGU6IGlQcm9wcy5pbnN0YW5jZVR5cGUsXG4gICAgICAgIC8vIEluc3RhbmNlIHNwZWNpZmljIHByb3BzXG4gICAgICAgIGFsbG9jYXRlZFN0b3JhZ2U6IGlQcm9wcy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgICBwb3J0OiBpUHJvcHMucG9ydCxcbiAgICAgICAgZW5naW5lOiBpUHJvcHMuZW5naW5lXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLnR5cGUgPT09IFwiRnJlZVRpZXJcIikge1xuICAgICAgY29uc3QgZlByb3BzID0gcHJvcHMgYXMgSW5zdGFuY2VTdG9yYWdlUHJvcHM7XG5cbiAgICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzRnJlZVRpZXIodGhpcywgYCR7ZlByb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICAgIC8vIENvbW1vbiBwcm9wc1xuICAgICAgICB2cGM6IGZQcm9wcy52cGMsXG4gICAgICAgIGRhdGFiYXNlTmFtZTogZlByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgLy8gSW5zdGFuY2Ugc3BlY2lmaWMgcHJvcHNcbiAgICAgICAgcG9ydDogZlByb3BzLnBvcnQsXG4gICAgICAgIGVuZ2luZTogZlByb3BzLmVuZ2luZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGF0YWJhc2UgdHlwZVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIGdldENyZWRlbnRpYWxzKCk6IFNlY3JldCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0Q3JlZGVudGlhbHMoKTtcbiAgfVxuXG4gIGdldEhvc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldEhvc3RFbmRwb2ludCgpO1xuICB9XG5cbiAgZ2V0SG9zdFBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRIb3N0UG9ydCgpO1xuICB9XG5cbiAgZ2V0RGF0YWJhc2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VOYW1lO1xuICB9XG59XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwyQ0FBdUM7QUFHdkMsMkRBSXNDO0FBQ3RDLGtGQUErRTtBQTZDL0UsTUFBYSxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQTBCLEVBQVUsRUFBRSxLQUFRO1FBQ3hELE9BQU8sQ0FBQyxHQUFRLEVBQUUsS0FBZ0IsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixHQUFJLEtBQWE7Z0JBQ2pCLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFTO2FBQzNDLENBQUM7WUFDUCxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBVkQsd0NBVUM7QUFFRCxNQUFhLE9BQVEsU0FBUSxzQkFBUztJQVVwQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQW9CO1FBQzdCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QixNQUFNO1lBQ1IsS0FBSyxjQUFj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QVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUEzR0QsMEJBMkdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHtcbiAgUmRzQXVyb3JhLFxuICBSZHNGcmVlVGllcixcbiAgUmRzSW5zdGFuY2Vcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvZGF0YWJhc2VcIjtcbmltcG9ydCB7IFJkc0F1cm9yYUdsb2JhbCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL3Jkc0F1cm9yYUdsb2JhbFwiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuXG5pbXBvcnQgeyBDb25uZWN0aW9ucywgSUNvbm5lY3RhYmxlLCBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IElJbnN0YW5jZUVuZ2luZSwgSUNsdXN0ZXJFbmdpbmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiO1xuXG50eXBlIFN0b3JhZ2VUeXBlID0gXCJBdXJvcmFcIiB8IFwiSW5zdGFuY2VcIiB8IFwiRnJlZVRpZXJcIiB8IFwiR2xvYmFsQXVyb3JhXCI7XG5cbnR5cGUgQmFzZVN0b3JhZ2VQcm9wcyA9IHtcbiAgdnBjPzogSVZwYztcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIGluc3RhbmNlVHlwZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhU3RvcmFnZVByb3BzIGV4dGVuZHMgQmFzZVN0b3JhZ2VQcm9wcyB7XG4gIHR5cGU6IFwiQXVyb3JhXCI7XG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbEF1cm9yYVN0b3JhZ2VQcm9wcyBleHRlbmRzIEJhc2VTdG9yYWdlUHJvcHMge1xuICB0eXBlOiBcIkdsb2JhbEF1cm9yYVwiO1xuICBwcmltYXJ5UmVnaW9uOiBzdHJpbmc7XG4gIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nO1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVN0b3JhZ2VQcm9wcyBleHRlbmRzIEJhc2VTdG9yYWdlUHJvcHMge1xuICB0eXBlOiBcIkluc3RhbmNlXCI7XG4gIGVuZ2luZT86IElJbnN0YW5jZUVuZ2luZTtcbiAgYWxsb2NhdGVkU3RvcmFnZT86IG51bWJlcjtcbiAgcG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGcmVlVGllclN0b3JhZ2VQcm9wcyBleHRlbmRzIEJhc2VTdG9yYWdlUHJvcHMge1xuICB0eXBlOiBcIkZyZWVUaWVyXCI7XG4gIGVuZ2luZT86IElJbnN0YW5jZUVuZ2luZTtcbiAgcG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgSVN0b3JhZ2VQcm9wcyA9XG4gIHwgQXVyb3JhU3RvcmFnZVByb3BzXG4gIHwgSW5zdGFuY2VTdG9yYWdlUHJvcHNcbiAgfCBHbG9iYWxBdXJvcmFTdG9yYWdlUHJvcHNcbiAgfCBGcmVlVGllclN0b3JhZ2VQcm9wcztcblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VGYWN0b3J5IHtcbiAgc3RhdGljIGJ1aWxkPFQgZXh0ZW5kcyBJU3RvcmFnZVByb3BzPihpZDogc3RyaW5nLCBwcm9wczogVCkge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JhZ2VQcm9wcyA9IHtcbiAgICAgICAgLi4uKHByb3BzIGFzIGFueSksXG4gICAgICAgIHZwYzogKHByb3BzLnZwYyB8fCBhcHAuZ2V0RGVmYXVsdFZwYygpKSBhcyBJVnBjXG4gICAgICB9IGFzIFQ7XG4gICAgICByZXR1cm4gbmV3IFN0b3JhZ2Uoc2NvcGUsIGlkLCBzdG9yYWdlUHJvcHMpO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHB1YmxpYyB2cGM6IElWcGM7XG5cbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGRhdGFiYXNlOiBSZHNBdXJvcmEgfCBSZHNJbnN0YW5jZSB8IFJkc0ZyZWVUaWVyIHwgUmRzQXVyb3JhR2xvYmFsO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJU3RvcmFnZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWU7XG4gICAgdGhpcy5hZGRTdG9yYWdlKHByb3BzKTtcbiAgfVxuXG4gIGFkZFN0b3JhZ2UocHJvcHM6IElTdG9yYWdlUHJvcHMpIHtcbiAgICBzd2l0Y2ggKHByb3BzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJBdXJvcmFcIjpcbiAgICAgICAgdGhpcy5hZGRBdXJvcmEocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJHbG9iYWxBdXJvcmFcIjpcbiAgICAgICAgdGhpcy5hZGRBdXJvcmFHbG9iYWwocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJJbnN0YW5jZVwiOlxuICAgICAgICB0aGlzLmFkZFJkc0luc3RhbmNlKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRnJlZVRpZXJcIjpcbiAgICAgICAgdGhpcy5hZGRSZHNGcmVlVGllcihwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRXhoYXVzdGl2ZW5lc3MgY2hlY2tcbiAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gcHJvcHM7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc3RvcmFnZSB0eXBlICR7KHByb3BzIGFzIGFueSkudHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEF1cm9yYShwcm9wczogQXVyb3JhU3RvcmFnZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgQXVyb3JhIGRhdGFiYXNlXCIpO1xuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzQXVyb3JhKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmVcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXVyb3JhR2xvYmFsKHByb3BzOiBHbG9iYWxBdXJvcmFTdG9yYWdlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnZwYylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgR2xvYmFsIEF1cm9yYSBkYXRhYmFzZVwiKTtcbiAgICBpZiAoIXByb3BzLnByaW1hcnlSZWdpb24pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcmltYXJ5UmVnaW9uIGlzIHJlcXVpcmVkIGZvciBHbG9iYWwgQXVyb3JhIGRhdGFiYXNlXCIpO1xuXG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNBdXJvcmFHbG9iYWwoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc0dsb2JhbGAsXG4gICAgICB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgcHJpbWFyeVJlZ2lvbjogcHJvcHMucHJpbWFyeVJlZ2lvbixcbiAgICAgICAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI6IHByb3BzLmdsb2JhbENsdXN0ZXJJZGVudGlmaWVyLFxuICAgICAgICBlbmdpbmU6IHByb3BzLmVuZ2luZVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZFJkc0luc3RhbmNlKHByb3BzOiBJbnN0YW5jZVN0b3JhZ2VQcm9wcykge1xuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzSW5zdGFuY2UodGhpcywgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc2AsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZSxcbiAgICAgIGFsbG9jYXRlZFN0b3JhZ2U6IHByb3BzLmFsbG9jYXRlZFN0b3JhZ2UsXG4gICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmVcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmRzRnJlZVRpZXIocHJvcHM6IEZyZWVUaWVyU3RvcmFnZVByb3BzKSB7XG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNGcmVlVGllcih0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICBlbmdpbmU6IHByb3BzLmVuZ2luZVxuICAgIH0pO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbHMoKTogU2VjcmV0IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRDcmVkZW50aWFscygpO1xuICB9XG5cbiAgZ2V0SG9zdEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCk7XG4gIH1cblxuICBnZXRIb3N0UG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldEhvc3RQb3J0KCk7XG4gIH1cblxuICBnZXREYXRhYmFzZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZU5hbWU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { Construct } from "constructs";
2
+ import { IVpc, Connections, IConnectable } from "aws-cdk-lib/aws-ec2";
3
+ import { IClusterEngine } from "aws-cdk-lib/aws-rds";
4
+ import { Secret } from "../secrets";
5
+ interface RdsAuroraGlobalProps {
6
+ vpc: IVpc;
7
+ databaseName: string;
8
+ /** primary region where the initial cluster & global cluster resource are created */
9
+ primaryRegion: string;
10
+ /** optional deterministic id for the global cluster (should be shared across stacks/regions) */
11
+ globalClusterIdentifier?: string;
12
+ /** optional engine to forward to the underlying cluster */
13
+ engine?: IClusterEngine;
14
+ }
15
+ export declare class RdsAuroraGlobal extends Construct implements IConnectable {
16
+ connections: Connections;
17
+ private globalCluster?;
18
+ private primaryCluster?;
19
+ private regionalCluster?;
20
+ private props;
21
+ private currentRegion;
22
+ private globalId;
23
+ constructor(scope: Construct, id: string, props: RdsAuroraGlobalProps);
24
+ getGlobalClusterIdentifier(): string;
25
+ getPrimaryClusterIdentifier(): string;
26
+ private getGlobalClusterEngineString;
27
+ addGlobalCluster(): void;
28
+ addAuroraCluster(): void;
29
+ addOutputs(): void;
30
+ getCredentials(): Secret;
31
+ getHostEndpoint(): string;
32
+ getHostPort(): string;
33
+ }
34
+ export {};
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RdsAuroraGlobal = 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 constructs_1 = require("constructs");
7
+ const rdsAurora_1 = require("./rdsAurora");
8
+ class RdsAuroraGlobal extends constructs_1.Construct {
9
+ constructor(scope, id, props) {
10
+ super(scope, id);
11
+ this.props = props;
12
+ this.currentRegion = aws_cdk_lib_1.Stack.of(this).region;
13
+ this.globalId =
14
+ props.globalClusterIdentifier || `${props.databaseName}-global`;
15
+ // create clusters / global cluster depending on region
16
+ this.addAuroraCluster();
17
+ this.addGlobalCluster();
18
+ this.addOutputs();
19
+ }
20
+ // --- public helpers ---
21
+ getGlobalClusterIdentifier() {
22
+ return this.globalId;
23
+ }
24
+ getPrimaryClusterIdentifier() {
25
+ return `${this.props.databaseName}-primary-cluster`;
26
+ }
27
+ getGlobalClusterEngineString() {
28
+ // Default to aurora-postgresql if no engine specified (matches existing behavior)
29
+ if (!this.props.engine)
30
+ return "aurora-postgresql";
31
+ // DatabaseClusterEngine has engineType which will be "aurora-postgresql" or "aurora-mysql"
32
+ return this.props.engine.engineType || "aurora-postgresql";
33
+ }
34
+ // create the CfnGlobalCluster only in the primary region
35
+ addGlobalCluster() {
36
+ if (this.props.primaryRegion !== this.currentRegion)
37
+ return;
38
+ // create the global cluster resource referencing the primary cluster identifier
39
+ this.globalCluster = new aws_rds_1.CfnGlobalCluster(this, `${this.props.databaseName}GlobalCluster`, {
40
+ globalClusterIdentifier: this.globalId,
41
+ engine: this.getGlobalClusterEngineString(),
42
+ sourceDbClusterIdentifier: this.getPrimaryClusterIdentifier()
43
+ });
44
+ // ensure the underlying primary DBCluster L1 has the globalClusterIdentifier set
45
+ if (this.primaryCluster) {
46
+ const primaryL1 = this.primaryCluster.node.defaultChild;
47
+ if (primaryL1) {
48
+ primaryL1.globalClusterIdentifier = this.globalId;
49
+ }
50
+ }
51
+ }
52
+ // create an Aurora cluster in this region (primary or secondary)
53
+ addAuroraCluster() {
54
+ if (this.props.primaryRegion === this.currentRegion) {
55
+ // primary
56
+ this.primaryCluster = new rdsAurora_1.RdsAurora(this, `${this.props.databaseName}Primary`, {
57
+ vpc: this.props.vpc,
58
+ databaseName: this.props.databaseName,
59
+ engine: this.props.engine,
60
+ clusterIdentifier: this.getPrimaryClusterIdentifier()
61
+ });
62
+ this.connections = this.primaryCluster.connections;
63
+ }
64
+ else {
65
+ // secondary region
66
+ this.regionalCluster = new rdsAurora_1.RdsAurora(this, `${this.props.databaseName}Regional`, {
67
+ vpc: this.props.vpc,
68
+ databaseName: this.props.databaseName,
69
+ engine: this.props.engine,
70
+ clusterIdentifier: `${this.props.databaseName}-secondary-${this.currentRegion}`
71
+ });
72
+ // set the L1 DBCluster property so CloudFormation will join it to the global cluster
73
+ if (this.regionalCluster) {
74
+ const regionalL1 = this.regionalCluster.node
75
+ .defaultChild;
76
+ if (regionalL1) {
77
+ regionalL1.globalClusterIdentifier = this.globalId;
78
+ }
79
+ this.connections = this.regionalCluster.connections;
80
+ }
81
+ }
82
+ }
83
+ addOutputs() {
84
+ new aws_cdk_lib_1.CfnOutput(this, `${this.props.databaseName}GlobalClusterIdentifierOutput`, {
85
+ value: this.globalId,
86
+ exportName: `${this.props.databaseName}GlobalClusterIdentifier`
87
+ });
88
+ }
89
+ getCredentials() {
90
+ if (this.primaryCluster)
91
+ return this.primaryCluster.getCredentials();
92
+ if (this.regionalCluster)
93
+ return this.regionalCluster.getCredentials();
94
+ throw new Error("No Aurora cluster available to return credentials from");
95
+ }
96
+ getHostEndpoint() {
97
+ if (this.primaryCluster)
98
+ return this.primaryCluster.getHostEndpoint();
99
+ if (this.regionalCluster)
100
+ return this.regionalCluster.getHostEndpoint();
101
+ throw new Error("No Aurora cluster available to return endpoint from");
102
+ }
103
+ getHostPort() {
104
+ if (this.primaryCluster)
105
+ return this.primaryCluster.getHostPort();
106
+ if (this.regionalCluster)
107
+ return this.regionalCluster.getHostPort();
108
+ throw new Error("No Aurora cluster available to return port from");
109
+ }
110
+ }
111
+ exports.RdsAuroraGlobal = RdsAuroraGlobal;
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzQXVyb3JhR2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhR2xvYmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUErQztBQUMvQyxpREFBcUU7QUFDckUsMkNBQXVDO0FBR3ZDLDJDQUF3QztBQWN4QyxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7SUFVNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRO1lBQ1gsS0FBSyxDQUFDLHVCQUF1QixJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksU0FBUyxDQUFDO1FBRWxFLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELHlCQUF5QjtJQUN6QiwwQkFBMEI7UUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxrQkFBa0IsQ0FBQztJQUN0RCxDQUFDO0lBRU8sNEJBQTRCO1FBQ2xDLGtGQUFrRjtRQUNsRixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxtQkFBbUIsQ0FBQztRQUVuRCwyRkFBMkY7UUFDM0YsT0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE1B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eUJBQXlCO1NBQ2hFLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyRSxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEUsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUFFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4RSxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xFLElBQUksSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7Q0FDRjtBQXJJRCwwQ0FxSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDZm5HbG9iYWxDbHVzdGVyLCBDZm5EQkNsdXN0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElWcGMsIENvbm5lY3Rpb25zLCBJQ29ubmVjdGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgSUNsdXN0ZXJFbmdpbmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiO1xuaW1wb3J0IHsgUmRzQXVyb3JhIH0gZnJvbSBcIi4vcmRzQXVyb3JhXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vc2VjcmV0c1wiO1xuXG5pbnRlcmZhY2UgUmRzQXVyb3JhR2xvYmFsUHJvcHMge1xuICB2cGM6IElWcGM7XG4gIGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuICAvKiogcHJpbWFyeSByZWdpb24gd2hlcmUgdGhlIGluaXRpYWwgY2x1c3RlciAmIGdsb2JhbCBjbHVzdGVyIHJlc291cmNlIGFyZSBjcmVhdGVkICovXG4gIHByaW1hcnlSZWdpb246IHN0cmluZztcbiAgLyoqIG9wdGlvbmFsIGRldGVybWluaXN0aWMgaWQgZm9yIHRoZSBnbG9iYWwgY2x1c3RlciAoc2hvdWxkIGJlIHNoYXJlZCBhY3Jvc3Mgc3RhY2tzL3JlZ2lvbnMpICovXG4gIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogb3B0aW9uYWwgZW5naW5lIHRvIGZvcndhcmQgdG8gdGhlIHVuZGVybHlpbmcgY2x1c3RlciAqL1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbn1cblxuZXhwb3J0IGNsYXNzIFJkc0F1cm9yYUdsb2JhbCBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSBnbG9iYWxDbHVzdGVyPzogQ2ZuR2xvYmFsQ2x1c3RlcjtcbiAgcHJpdmF0ZSBwcmltYXJ5Q2x1c3Rlcj86IFJkc0F1cm9yYTtcbiAgcHJpdmF0ZSByZWdpb25hbENsdXN0ZXI/OiBSZHNBdXJvcmE7XG4gIHByaXZhdGUgcHJvcHM6IFJkc0F1cm9yYUdsb2JhbFByb3BzO1xuICBwcml2YXRlIGN1cnJlbnRSZWdpb246IHN0cmluZztcbiAgcHJpdmF0ZSBnbG9iYWxJZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSZHNBdXJvcmFHbG9iYWxQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5jdXJyZW50UmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgIHRoaXMuZ2xvYmFsSWQgPVxuICAgICAgcHJvcHMuZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXIgfHwgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfS1nbG9iYWxgO1xuXG4gICAgLy8gY3JlYXRlIGNsdXN0ZXJzIC8gZ2xvYmFsIGNsdXN0ZXIgZGVwZW5kaW5nIG9uIHJlZ2lvblxuICAgIHRoaXMuYWRkQXVyb3JhQ2x1c3RlcigpO1xuICAgIHRoaXMuYWRkR2xvYmFsQ2x1c3RlcigpO1xuICAgIHRoaXMuYWRkT3V0cHV0cygpO1xuICB9XG5cbiAgLy8gLS0tIHB1YmxpYyBoZWxwZXJzIC0tLVxuICBnZXRHbG9iYWxDbHVzdGVySWRlbnRpZmllcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdsb2JhbElkO1xuICB9XG5cbiAgZ2V0UHJpbWFyeUNsdXN0ZXJJZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucHJvcHMuZGF0YWJhc2VOYW1lfS1wcmltYXJ5LWNsdXN0ZXJgO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHbG9iYWxDbHVzdGVyRW5naW5lU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgLy8gRGVmYXVsdCB0byBhdXJvcmEtcG9zdGdyZXNxbCBpZiBubyBlbmdpbmUgc3BlY2lmaWVkIChtYXRjaGVzIGV4aXN0aW5nIGJlaGF2aW9yKVxuICAgIGlmICghdGhpcy5wcm9wcy5lbmdpbmUpIHJldHVybiBcImF1cm9yYS1wb3N0Z3Jlc3FsXCI7XG5cbiAgICAvLyBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUgaGFzIGVuZ2luZVR5cGUgd2hpY2ggd2lsbCBiZSBcImF1cm9yYS1wb3N0Z3Jlc3FsXCIgb3IgXCJhdXJvcmEtbXlzcWxcIlxuICAgIHJldHVybiAodGhpcy5wcm9wcy5lbmdpbmUgYXMgYW55KS5lbmdpbmVUeXBlIHx8IFwiYXVyb3JhLXBvc3RncmVzcWxcIjtcbiAgfVxuXG4gIC8vIGNyZWF0ZSB0aGUgQ2ZuR2xvYmFsQ2x1c3RlciBvbmx5IGluIHRoZSBwcmltYXJ5IHJlZ2lvblxuICBhZGRHbG9iYWxDbHVzdGVyKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnByaW1hcnlSZWdpb24gIT09IHRoaXMuY3VycmVudFJlZ2lvbikgcmV0dXJuO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBnbG9iYWwgY2x1c3RlciByZXNvdXJjZSByZWZlcmVuY2luZyB0aGUgcHJpbWFyeSBjbHVzdGVyIGlkZW50aWZpZXJcbiAgICB0aGlzLmdsb2JhbENsdXN0ZXIgPSBuZXcgQ2ZuR2xvYmFsQ2x1c3RlcihcbiAgICAgIHRoaXMsXG4gICAgICBgJHt0aGlzLnByb3BzLmRhdGFiYXNlTmFtZX1HbG9iYWxDbHVzdGVyYCxcbiAgICAgIHtcbiAgICAgICAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI6IHRoaXMuZ2xvYmFsSWQsXG4gICAgICAgIGVuZ2luZTogdGhpcy5nZXRHbG9iYWxDbHVzdGVyRW5naW5lU3RyaW5nKCksXG4gICAgICAgIHNvdXJjZURiQ2x1c3RlcklkZW50aWZpZXI6IHRoaXMuZ2V0UHJpbWFyeUNsdXN0ZXJJZGVudGlmaWVyKClcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHByaW1hcnkgREJDbHVzdGVyIEwxIGhhcyB0aGUgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXIgc2V0XG4gICAgaWYgKHRoaXMucHJpbWFyeUNsdXN0ZXIpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlMMSA9IHRoaXMucHJpbWFyeUNsdXN0ZXIubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuREJDbHVzdGVyO1xuICAgICAgaWYgKHByaW1hcnlMMSkge1xuICAgICAgICBwcmltYXJ5TDEuZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXIgPSB0aGlzLmdsb2JhbElkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGNyZWF0ZSBhbiBBdXJvcmEgY2x1c3RlciBpbiB0aGlzIHJlZ2lvbiAocHJpbWFyeSBvciBzZWNvbmRhcnkpXG4gIGFkZEF1cm9yYUNsdXN0ZXIoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJpbWFyeVJlZ2lvbiA9PT0gdGhpcy5jdXJyZW50UmVnaW9uKSB7XG4gICAgICAvLyBwcmltYXJ5XG4gICAgICB0aGlzLnByaW1hcnlDbHVzdGVyID0gbmV3IFJkc0F1cm9yYShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5kYXRhYmFzZU5hbWV9UHJpbWFyeWAsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHRoaXMucHJvcHMudnBjLFxuICAgICAgICAgIGRhdGFiYXNlTmFtZTogdGhpcy5wcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgZW5naW5lOiB0aGlzLnByb3BzLmVuZ2luZSxcbiAgICAgICAgICBjbHVzdGVySWRlbnRpZmllcjogdGhpcy5nZXRQcmltYXJ5Q2x1c3RlcklkZW50aWZpZXIoKVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMucHJpbWFyeUNsdXN0ZXIuY29ubmVjdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNlY29uZGFyeSByZWdpb25cbiAgICAgIHRoaXMucmVnaW9uYWxDbHVzdGVyID0gbmV3IFJkc0F1cm9yYShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5kYXRhYmFzZU5hbWV9UmVnaW9uYWxgLFxuICAgICAgICB7XG4gICAgICAgICAgdnBjOiB0aGlzLnByb3BzLnZwYyxcbiAgICAgICAgICBkYXRhYmFzZU5hbWU6IHRoaXMucHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICAgIGVuZ2luZTogdGhpcy5wcm9wcy5lbmdpbmUsXG4gICAgICAgICAgY2x1c3RlcklkZW50aWZpZXI6IGAke3RoaXMucHJvcHMuZGF0YWJhc2VOYW1lfS1zZWNvbmRhcnktJHt0aGlzLmN1cnJlbnRSZWdpb259YFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBzZXQgdGhlIEwxIERCQ2x1c3RlciBwcm9wZXJ0eSBzbyBDbG91ZEZvcm1hdGlvbiB3aWxsIGpvaW4gaXQgdG8gdGhlIGdsb2JhbCBjbHVzdGVyXG4gICAgICBpZiAodGhpcy5yZWdpb25hbENsdXN0ZXIpIHtcbiAgICAgICAgY29uc3QgcmVnaW9uYWxMMSA9IHRoaXMucmVnaW9uYWxDbHVzdGVyLm5vZGVcbiAgICAgICAgICAuZGVmYXVsdENoaWxkIGFzIENmbkRCQ2x1c3RlcjtcbiAgICAgICAgaWYgKHJlZ2lvbmFsTDEpIHtcbiAgICAgICAgICByZWdpb25hbEwxLmdsb2JhbENsdXN0ZXJJZGVudGlmaWVyID0gdGhpcy5nbG9iYWxJZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5yZWdpb25hbENsdXN0ZXIuY29ubmVjdGlvbnM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkT3V0cHV0cygpIHtcbiAgICBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3RoaXMucHJvcHMuZGF0YWJhc2VOYW1lfUdsb2JhbENsdXN0ZXJJZGVudGlmaWVyT3V0cHV0YCxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZ2xvYmFsSWQsXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke3RoaXMucHJvcHMuZGF0YWJhc2VOYW1lfUdsb2JhbENsdXN0ZXJJZGVudGlmaWVyYFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRDcmVkZW50aWFscygpOiBTZWNyZXQge1xuICAgIGlmICh0aGlzLnByaW1hcnlDbHVzdGVyKSByZXR1cm4gdGhpcy5wcmltYXJ5Q2x1c3Rlci5nZXRDcmVkZW50aWFscygpO1xuICAgIGlmICh0aGlzLnJlZ2lvbmFsQ2x1c3RlcikgcmV0dXJuIHRoaXMucmVnaW9uYWxDbHVzdGVyLmdldENyZWRlbnRpYWxzKCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQXVyb3JhIGNsdXN0ZXIgYXZhaWxhYmxlIHRvIHJldHVybiBjcmVkZW50aWFscyBmcm9tXCIpO1xuICB9XG5cbiAgZ2V0SG9zdEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJpbWFyeUNsdXN0ZXIpIHJldHVybiB0aGlzLnByaW1hcnlDbHVzdGVyLmdldEhvc3RFbmRwb2ludCgpO1xuICAgIGlmICh0aGlzLnJlZ2lvbmFsQ2x1c3RlcikgcmV0dXJuIHRoaXMucmVnaW9uYWxDbHVzdGVyLmdldEhvc3RFbmRwb2ludCgpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIEF1cm9yYSBjbHVzdGVyIGF2YWlsYWJsZSB0byByZXR1cm4gZW5kcG9pbnQgZnJvbVwiKTtcbiAgfVxuXG4gIGdldEhvc3RQb3J0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJpbWFyeUNsdXN0ZXIpIHJldHVybiB0aGlzLnByaW1hcnlDbHVzdGVyLmdldEhvc3RQb3J0KCk7XG4gICAgaWYgKHRoaXMucmVnaW9uYWxDbHVzdGVyKSByZXR1cm4gdGhpcy5yZWdpb25hbENsdXN0ZXIuZ2V0SG9zdFBvcnQoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBBdXJvcmEgY2x1c3RlciBhdmFpbGFibGUgdG8gcmV0dXJuIHBvcnQgZnJvbVwiKTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/components-infrastructure",
3
- "version": "0.72.0",
3
+ "version": "0.73.2",
4
4
  "bin": {
5
5
  "infrastructure": "bin/infrastructure.js"
6
6
  },
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@aws-sdk/client-organizations": "^3.716.0",
38
- "@fjall/util": "^0.72.0",
38
+ "@fjall/util": "^0.73.2",
39
39
  "@pepperize/cdk-organizations": "^0.7.135",
40
40
  "cdk-time-sleep": "^1.0.0",
41
41
  "constructs": "^10.0.0",
@@ -44,7 +44,7 @@
44
44
  "overrides": {
45
45
  "@smithy/core": "2.5.5"
46
46
  },
47
- "gitHead": "be0408762d5f20ef87932f859267503b75069c4f",
47
+ "gitHead": "cfe49280842a341a64da4aa70abe5052eb163397",
48
48
  "peerDependencies": {
49
49
  "aws-cdk": "^2.206.0",
50
50
  "aws-cdk-lib": "^2.206.0",