UNPKG

@studion/infra-code-blocks

Version:
66 lines (65 loc) 2.84 kB
"use strict"; 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;