@studion/infra-code-blocks
Version:
Studion common infra components
66 lines (65 loc) • 2.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatabaseReplica = void 0;
const aws = require("@pulumi/aws");
const pulumi = require("@pulumi/pulumi");
const common_tags_1 = require("../../shared/common-tags");
const merge_with_defaults_1 = require("../../shared/merge-with-defaults");
const defaults = {
multiAz: false,
applyImmediately: false,
allocatedStorage: 20,
maxAllocatedStorage: 100,
instanceClass: 'db.t4g.micro',
allowMajorVersionUpgrade: false,
autoMinorVersionUpgrade: true,
engineVersion: '18',
};
class DatabaseReplica extends pulumi.ComponentResource {
name;
instance;
constructor(name, args, opts = {}) {
super('studion:database:DatabaseReplica', name, {}, {
...opts,
aliases: [...(opts.aliases || []), { type: 'studion:DatabaseReplica' }],
});
this.name = name;
this.instance = this.createDatabaseInstance(args, opts);
this.registerOutputs();
}
createDatabaseInstance(args, opts) {
const argsWithDefaults = (0, merge_with_defaults_1.mergeWithDefaults)(defaults, args);
const monitoringOptions = argsWithDefaults.monitoringRole
? {
monitoringInterval: 60,
monitoringRoleArn: argsWithDefaults.monitoringRole.arn,
performanceInsightsEnabled: true,
performanceInsightsRetentionPeriod: 7,
}
: {};
const instance = new aws.rds.Instance(`${this.name}-rds`, {
identifierPrefix: `${this.name}-`,
engine: 'postgres',
engineVersion: argsWithDefaults.engineVersion,
allocatedStorage: argsWithDefaults.allocatedStorage,
maxAllocatedStorage: argsWithDefaults.maxAllocatedStorage,
instanceClass: argsWithDefaults.instanceClass,
vpcSecurityGroupIds: [argsWithDefaults.dbSecurityGroup.id],
dbSubnetGroupName: argsWithDefaults.dbSubnetGroup?.name,
multiAz: argsWithDefaults.multiAz,
applyImmediately: argsWithDefaults.applyImmediately,
allowMajorVersionUpgrade: argsWithDefaults.allowMajorVersionUpgrade,
autoMinorVersionUpgrade: argsWithDefaults.autoMinorVersionUpgrade,
replicateSourceDb: argsWithDefaults.replicateSourceDb,
parameterGroupName: argsWithDefaults.parameterGroupName,
storageEncrypted: true,
publiclyAccessible: false,
skipFinalSnapshot: true,
maintenanceWindow: 'Mon:07:00-Mon:07:30',
...monitoringOptions,
tags: { ...common_tags_1.commonTags, ...argsWithDefaults.tags },
}, { parent: this, dependsOn: opts.dependsOn });
return instance;
}
}
exports.DatabaseReplica = DatabaseReplica;