@studion/infra-code-blocks
Version:
Studion common infra components
41 lines (40 loc) • 2.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatabaseReplica = void 0;
const aws = require("@pulumi/aws");
const pulumi = require("@pulumi/pulumi");
const constants_1 = require("../constants");
const defaults = {
multiAz: false,
applyImmediately: false,
allocatedStorage: 20,
maxAllocatedStorage: 100,
instanceClass: 'db.t4g.micro',
enableMonitoring: false,
engineVersion: '17.2',
};
class DatabaseReplica extends pulumi.ComponentResource {
constructor(name, args, opts = {}) {
super('studion:DatabaseReplica', name, {}, opts);
this.name = name;
const argsWithDefaults = Object.assign({}, defaults, args);
this.monitoringRole = argsWithDefaults.monitoringRole;
this.instance = this.createDatabaseInstance(args);
this.registerOutputs();
}
createDatabaseInstance(args) {
const argsWithDefaults = Object.assign({}, defaults, args);
const stack = pulumi.getStack();
const monitoringOptions = argsWithDefaults.enableMonitoring && this.monitoringRole
? {
monitoringInterval: 60,
monitoringRoleArn: this.monitoringRole.arn,
performanceInsightsEnabled: true,
performanceInsightsRetentionPeriod: 7,
}
: {};
const instance = new aws.rds.Instance(`${this.name}-rds`, Object.assign(Object.assign({ identifierPrefix: `${this.name}-`, engine: 'postgres', engineVersion: argsWithDefaults.engineVersion, allocatedStorage: argsWithDefaults.allocatedStorage, maxAllocatedStorage: argsWithDefaults.maxAllocatedStorage, instanceClass: argsWithDefaults.instanceClass, dbSubnetGroupName: argsWithDefaults.dbSubnetGroupName, vpcSecurityGroupIds: [argsWithDefaults.dbSecurityGroupId], storageEncrypted: true, multiAz: argsWithDefaults.multiAz, publiclyAccessible: false, applyImmediately: argsWithDefaults.applyImmediately, autoMinorVersionUpgrade: true, maintenanceWindow: 'Mon:07:00-Mon:07:30', replicateSourceDb: argsWithDefaults.replicateSourceDb, parameterGroupName: argsWithDefaults.parameterGroupName, skipFinalSnapshot: true }, monitoringOptions), { tags: Object.assign(Object.assign({}, constants_1.commonTags), argsWithDefaults.tags) }), { parent: this });
return instance;
}
}
exports.DatabaseReplica = DatabaseReplica;