@fjall/components-infrastructure 0.72.0 → 0.73.0

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,33 @@
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
+ addGlobalCluster(): void;
27
+ addAuroraCluster(): void;
28
+ addOutputs(): void;
29
+ getCredentials(): Secret;
30
+ getHostEndpoint(): string;
31
+ getHostPort(): string;
32
+ }
33
+ export {};
@@ -0,0 +1,105 @@
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
+ // create the CfnGlobalCluster only in the primary region
28
+ addGlobalCluster() {
29
+ if (this.props.primaryRegion !== this.currentRegion)
30
+ return;
31
+ // create the global cluster resource referencing the primary cluster identifier
32
+ this.globalCluster = new aws_rds_1.CfnGlobalCluster(this, `${this.props.databaseName}GlobalCluster`, {
33
+ globalClusterIdentifier: this.globalId,
34
+ engine: "aurora-postgresql",
35
+ sourceDbClusterIdentifier: this.getPrimaryClusterIdentifier()
36
+ });
37
+ // ensure the underlying primary DBCluster L1 has the globalClusterIdentifier set
38
+ if (this.primaryCluster) {
39
+ const primaryL1 = this.primaryCluster.node.defaultChild;
40
+ if (primaryL1) {
41
+ primaryL1.globalClusterIdentifier = this.globalId;
42
+ }
43
+ }
44
+ }
45
+ // create an Aurora cluster in this region (primary or secondary)
46
+ addAuroraCluster() {
47
+ if (this.props.primaryRegion === this.currentRegion) {
48
+ // primary
49
+ this.primaryCluster = new rdsAurora_1.RdsAurora(this, `${this.props.databaseName}Primary`, {
50
+ vpc: this.props.vpc,
51
+ databaseName: this.props.databaseName,
52
+ engine: this.props.engine,
53
+ clusterIdentifier: this.getPrimaryClusterIdentifier()
54
+ });
55
+ this.connections = this.primaryCluster.connections;
56
+ }
57
+ else {
58
+ // secondary region
59
+ this.regionalCluster = new rdsAurora_1.RdsAurora(this, `${this.props.databaseName}Regional`, {
60
+ vpc: this.props.vpc,
61
+ databaseName: this.props.databaseName,
62
+ engine: this.props.engine,
63
+ clusterIdentifier: `${this.props.databaseName}-secondary-${this.currentRegion}`
64
+ });
65
+ // set the L1 DBCluster property so CloudFormation will join it to the global cluster
66
+ if (this.regionalCluster) {
67
+ const regionalL1 = this.regionalCluster.node
68
+ .defaultChild;
69
+ if (regionalL1) {
70
+ regionalL1.globalClusterIdentifier = this.globalId;
71
+ }
72
+ this.connections = this.regionalCluster.connections;
73
+ }
74
+ }
75
+ }
76
+ addOutputs() {
77
+ new aws_cdk_lib_1.CfnOutput(this, `${this.props.databaseName}GlobalClusterIdentifierOutput`, {
78
+ value: this.globalId,
79
+ exportName: `${this.props.databaseName}GlobalClusterIdentifier`
80
+ });
81
+ }
82
+ getCredentials() {
83
+ if (this.primaryCluster)
84
+ return this.primaryCluster.getCredentials();
85
+ if (this.regionalCluster)
86
+ return this.regionalCluster.getCredentials();
87
+ throw new Error("No Aurora cluster available to return credentials from");
88
+ }
89
+ getHostEndpoint() {
90
+ if (this.primaryCluster)
91
+ return this.primaryCluster.getHostEndpoint();
92
+ if (this.regionalCluster)
93
+ return this.regionalCluster.getHostEndpoint();
94
+ throw new Error("No Aurora cluster available to return endpoint from");
95
+ }
96
+ getHostPort() {
97
+ if (this.primaryCluster)
98
+ return this.primaryCluster.getHostPort();
99
+ if (this.regionalCluster)
100
+ return this.regionalCluster.getHostPort();
101
+ throw new Error("No Aurora cluster available to return port from");
102
+ }
103
+ }
104
+ exports.RdsAuroraGlobal = RdsAuroraGlobal;
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzQXVyb3JhR2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhR2xvYmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUErQztBQUMvQyxpREFBcUU7QUFDckUsMkNBQXVDO0FBR3ZDLDJDQUF3QztBQWN4QyxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7SUFVNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRO1lBQ1gsS0FBSyxDQUFDLHVCQUF1QixJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksU0FBUyxDQUFDO1FBRWxFLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELHlCQUF5QjtJQUN6QiwwQkFBMEI7UUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxrQkFBa0IsQ0FBQztJQUN0RCxDQUFDO0lBRUQseURBQXlEO0lBQ3pELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBRTVELGdGQUFnRjtRQUNoRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUks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TUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN0RSxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEUsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUFFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRSxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDckUsQ0FBQztDQUNGO0FBN0hELDBDQTZIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENmbkdsb2JhbENsdXN0ZXIsIENmbkRCQ2x1c3RlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVZwYywgQ29ubmVjdGlvbnMsIElDb25uZWN0YWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBJQ2x1c3RlckVuZ2luZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCI7XG5pbXBvcnQgeyBSZHNBdXJvcmEgfSBmcm9tIFwiLi9yZHNBdXJvcmFcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCIuLi9zZWNyZXRzXCI7XG5cbmludGVyZmFjZSBSZHNBdXJvcmFHbG9iYWxQcm9wcyB7XG4gIHZwYzogSVZwYztcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBwcmltYXJ5IHJlZ2lvbiB3aGVyZSB0aGUgaW5pdGlhbCBjbHVzdGVyICYgZ2xvYmFsIGNsdXN0ZXIgcmVzb3VyY2UgYXJlIGNyZWF0ZWQgKi9cbiAgcHJpbWFyeVJlZ2lvbjogc3RyaW5nO1xuICAvKiogb3B0aW9uYWwgZGV0ZXJtaW5pc3RpYyBpZCBmb3IgdGhlIGdsb2JhbCBjbHVzdGVyIChzaG91bGQgYmUgc2hhcmVkIGFjcm9zcyBzdGFja3MvcmVnaW9ucykgKi9cbiAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBvcHRpb25hbCBlbmdpbmUgdG8gZm9yd2FyZCB0byB0aGUgdW5kZXJseWluZyBjbHVzdGVyICovXG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xufVxuXG5leHBvcnQgY2xhc3MgUmRzQXVyb3JhR2xvYmFsIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIGdsb2JhbENsdXN0ZXI/OiBDZm5HbG9iYWxDbHVzdGVyO1xuICBwcml2YXRlIHByaW1hcnlDbHVzdGVyPzogUmRzQXVyb3JhO1xuICBwcml2YXRlIHJlZ2lvbmFsQ2x1c3Rlcj86IFJkc0F1cm9yYTtcbiAgcHJpdmF0ZSBwcm9wczogUmRzQXVyb3JhR2xvYmFsUHJvcHM7XG4gIHByaXZhdGUgY3VycmVudFJlZ2lvbjogc3RyaW5nO1xuICBwcml2YXRlIGdsb2JhbElkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJkc0F1cm9yYUdsb2JhbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmN1cnJlbnRSZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgdGhpcy5nbG9iYWxJZCA9XG4gICAgICBwcm9wcy5nbG9iYWxDbHVzdGVySWRlbnRpZmllciB8fCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9LWdsb2JhbGA7XG5cbiAgICAvLyBjcmVhdGUgY2x1c3RlcnMgLyBnbG9iYWwgY2x1c3RlciBkZXBlbmRpbmcgb24gcmVnaW9uXG4gICAgdGhpcy5hZGRBdXJvcmFDbHVzdGVyKCk7XG4gICAgdGhpcy5hZGRHbG9iYWxDbHVzdGVyKCk7XG4gICAgdGhpcy5hZGRPdXRwdXRzKCk7XG4gIH1cblxuICAvLyAtLS0gcHVibGljIGhlbHBlcnMgLS0tXG4gIGdldEdsb2JhbENsdXN0ZXJJZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2xvYmFsSWQ7XG4gIH1cblxuICBnZXRQcmltYXJ5Q2x1c3RlcklkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wcm9wcy5kYXRhYmFzZU5hbWV9LXByaW1hcnktY2x1c3RlcmA7XG4gIH1cblxuICAvLyBjcmVhdGUgdGhlIENmbkdsb2JhbENsdXN0ZXIgb25seSBpbiB0aGUgcHJpbWFyeSByZWdpb25cbiAgYWRkR2xvYmFsQ2x1c3RlcigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcmltYXJ5UmVnaW9uICE9PSB0aGlzLmN1cnJlbnRSZWdpb24pIHJldHVybjtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZ2xvYmFsIGNsdXN0ZXIgcmVzb3VyY2UgcmVmZXJlbmNpbmcgdGhlIHByaW1hcnkgY2x1c3RlciBpZGVudGlmaWVyXG4gICAgdGhpcy5nbG9iYWxDbHVzdGVyID0gbmV3IENmbkdsb2JhbENsdXN0ZXIoXG4gICAgICB0aGlzLFxuICAgICAgYCR7dGhpcy5wcm9wcy5kYXRhYmFzZU5hbWV9R2xvYmFsQ2x1c3RlcmAsXG4gICAgICB7XG4gICAgICAgIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyOiB0aGlzLmdsb2JhbElkLFxuICAgICAgICBlbmdpbmU6IFwiYXVyb3JhLXBvc3RncmVzcWxcIixcbiAgICAgICAgc291cmNlRGJDbHVzdGVySWRlbnRpZmllcjogdGhpcy5nZXRQcmltYXJ5Q2x1c3RlcklkZW50aWZpZXIoKVxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgcHJpbWFyeSBEQkNsdXN0ZXIgTDEgaGFzIHRoZSBnbG9iYWxDbHVzdGVySWRlbnRpZmllciBzZXRcbiAgICBpZiAodGhpcy5wcmltYXJ5Q2x1c3Rlcikge1xuICAgICAgY29uc3QgcHJpbWFyeUwxID0gdGhpcy5wcmltYXJ5Q2x1c3Rlci5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5EQkNsdXN0ZXI7XG4gICAgICBpZiAocHJpbWFyeUwxKSB7XG4gICAgICAgIHByaW1hcnlMMS5nbG9iYWxDbHVzdGVySWRlbnRpZmllciA9IHRoaXMuZ2xvYmFsSWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gY3JlYXRlIGFuIEF1cm9yYSBjbHVzdGVyIGluIHRoaXMgcmVnaW9uIChwcmltYXJ5IG9yIHNlY29uZGFyeSlcbiAgYWRkQXVyb3JhQ2x1c3RlcigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcmltYXJ5UmVnaW9uID09PSB0aGlzLmN1cnJlbnRSZWdpb24pIHtcbiAgICAgIC8vIHByaW1hcnlcbiAgICAgIHRoaXMucHJpbWFyeUNsdXN0ZXIgPSBuZXcgUmRzQXVyb3JhKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHt0aGlzLnByb3BzLmRhdGFiYXNlTmFtZX1QcmltYXJ5YCxcbiAgICAgICAge1xuICAgICAgICAgIHZwYzogdGhpcy5wcm9wcy52cGMsXG4gICAgICAgICAgZGF0YWJhc2VOYW1lOiB0aGlzLnByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgICBlbmdpbmU6IHRoaXMucHJvcHMuZW5naW5lLFxuICAgICAgICAgIGNsdXN0ZXJJZGVudGlmaWVyOiB0aGlzLmdldFByaW1hcnlDbHVzdGVySWRlbnRpZmllcigpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5wcmltYXJ5Q2x1c3Rlci5jb25uZWN0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2Vjb25kYXJ5IHJlZ2lvblxuICAgICAgdGhpcy5yZWdpb25hbENsdXN0ZXIgPSBuZXcgUmRzQXVyb3JhKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHt0aGlzLnByb3BzLmRhdGFiYXNlTmFtZX1SZWdpb25hbGAsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHRoaXMucHJvcHMudnBjLFxuICAgICAgICAgIGRhdGFiYXNlTmFtZTogdGhpcy5wcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgZW5naW5lOiB0aGlzLnByb3BzLmVuZ2luZSxcbiAgICAgICAgICBjbHVzdGVySWRlbnRpZmllcjogYCR7dGhpcy5wcm9wcy5kYXRhYmFzZU5hbWV9LXNlY29uZGFyeS0ke3RoaXMuY3VycmVudFJlZ2lvbn1gXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIC8vIHNldCB0aGUgTDEgREJDbHVzdGVyIHByb3BlcnR5IHNvIENsb3VkRm9ybWF0aW9uIHdpbGwgam9pbiBpdCB0byB0aGUgZ2xvYmFsIGNsdXN0ZXJcbiAgICAgIGlmICh0aGlzLnJlZ2lvbmFsQ2x1c3Rlcikge1xuICAgICAgICBjb25zdCByZWdpb25hbEwxID0gdGhpcy5yZWdpb25hbENsdXN0ZXIubm9kZVxuICAgICAgICAgIC5kZWZhdWx0Q2hpbGQgYXMgQ2ZuREJDbHVzdGVyO1xuICAgICAgICBpZiAocmVnaW9uYWxMMSkge1xuICAgICAgICAgIHJlZ2lvbmFsTDEuZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXIgPSB0aGlzLmdsb2JhbElkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLnJlZ2lvbmFsQ2x1c3Rlci5jb25uZWN0aW9ucztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRPdXRwdXRzKCkge1xuICAgIG5ldyBDZm5PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7dGhpcy5wcm9wcy5kYXRhYmFzZU5hbWV9R2xvYmFsQ2x1c3RlcklkZW50aWZpZXJPdXRwdXRgLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogdGhpcy5nbG9iYWxJZCxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7dGhpcy5wcm9wcy5kYXRhYmFzZU5hbWV9R2xvYmFsQ2x1c3RlcklkZW50aWZpZXJgXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGdldENyZWRlbnRpYWxzKCk6IFNlY3JldCB7XG4gICAgaWYgKHRoaXMucHJpbWFyeUNsdXN0ZXIpIHJldHVybiB0aGlzLnByaW1hcnlDbHVzdGVyLmdldENyZWRlbnRpYWxzKCk7XG4gICAgaWYgKHRoaXMucmVnaW9uYWxDbHVzdGVyKSByZXR1cm4gdGhpcy5yZWdpb25hbENsdXN0ZXIuZ2V0Q3JlZGVudGlhbHMoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBBdXJvcmEgY2x1c3RlciBhdmFpbGFibGUgdG8gcmV0dXJuIGNyZWRlbnRpYWxzIGZyb21cIik7XG4gIH1cblxuICBnZXRIb3N0RW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5wcmltYXJ5Q2x1c3RlcikgcmV0dXJuIHRoaXMucHJpbWFyeUNsdXN0ZXIuZ2V0SG9zdEVuZHBvaW50KCk7XG4gICAgaWYgKHRoaXMucmVnaW9uYWxDbHVzdGVyKSByZXR1cm4gdGhpcy5yZWdpb25hbENsdXN0ZXIuZ2V0SG9zdEVuZHBvaW50KCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQXVyb3JhIGNsdXN0ZXIgYXZhaWxhYmxlIHRvIHJldHVybiBlbmRwb2ludCBmcm9tXCIpO1xuICB9XG5cbiAgZ2V0SG9zdFBvcnQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5wcmltYXJ5Q2x1c3RlcikgcmV0dXJuIHRoaXMucHJpbWFyeUNsdXN0ZXIuZ2V0SG9zdFBvcnQoKTtcbiAgICBpZiAodGhpcy5yZWdpb25hbENsdXN0ZXIpIHJldHVybiB0aGlzLnJlZ2lvbmFsQ2x1c3Rlci5nZXRIb3N0UG9ydCgpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIEF1cm9yYSBjbHVzdGVyIGF2YWlsYWJsZSB0byByZXR1cm4gcG9ydCBmcm9tXCIpO1xuICB9XG59XG4iXX0=
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.0",
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.0",
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": "a22589084a006f939a83a59556cf05f2570b007e",
48
48
  "peerDependencies": {
49
49
  "aws-cdk": "^2.206.0",
50
50
  "aws-cdk-lib": "^2.206.0",