UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

106 lines (92 loc) 3.48 kB
import * as cloudwatch from '../../aws-cloudwatch'; import * as ec2 from '../../aws-ec2'; import * as targets from '../../aws-events-targets'; import * as lambda from '../../aws-lambda'; import * as logs from '../../aws-logs'; import * as cdk from '../../core'; import { RemovalPolicy } from '../../core'; import * as rds from '../lib'; const app = new cdk.App(); class DatabaseInstanceStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, 'VPC', { maxAzs: 2 }); /// !show // Set open cursors with parameter group const parameterGroup = new rds.ParameterGroup(this, 'ParameterGroup', { engine: rds.DatabaseInstanceEngine.oracleSe2({ version: rds.OracleEngineVersion.VER_19_0_0_0_2020_04_R1 }), parameters: { open_cursors: '2500', }, }); /// Add XMLDB and OEM with option group const optionGroup = new rds.OptionGroup(this, 'OptionGroup', { engine: rds.DatabaseInstanceEngine.oracleSe2({ version: rds.OracleEngineVersion.VER_19_0_0_0_2020_04_R1 }), configurations: [ { name: 'LOCATOR', }, { name: 'OEM', port: 1158, vpc, }, ], }); // Allow connections to OEM optionGroup.optionConnections.OEM.connections.allowDefaultPortFromAnyIpv4(); // Database instance with production values const instance = new rds.DatabaseInstance(this, 'Instance', { engine: rds.DatabaseInstanceEngine.oracleSe2({ version: rds.OracleEngineVersion.VER_19_0_0_0_2020_04_R1 }), licenseModel: rds.LicenseModel.BRING_YOUR_OWN_LICENSE, instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE3, ec2.InstanceSize.MEDIUM), multiAz: true, storageType: rds.StorageType.IO1, credentials: rds.Credentials.fromUsername('syscdk'), vpc, databaseName: 'ORCL', storageEncrypted: true, backupRetention: cdk.Duration.days(7), monitoringInterval: cdk.Duration.seconds(60), enablePerformanceInsights: true, cloudwatchLogsExports: [ 'trace', 'audit', 'alert', 'listener', ], cloudwatchLogsRetention: logs.RetentionDays.ONE_MONTH, autoMinorVersionUpgrade: true, // required to be true if LOCATOR is used in the option group optionGroup, parameterGroup, removalPolicy: RemovalPolicy.DESTROY, }); // Allow connections on default port from any IPV4 instance.connections.allowDefaultPortFromAnyIpv4(); // Rotate the master user password every 30 days instance.addRotationSingleUser(); // Add alarm for high CPU new cloudwatch.Alarm(this, 'HighCPU', { metric: instance.metricCPUUtilization(), threshold: 90, evaluationPeriods: 1, }); // Trigger Lambda function on instance availability events const fn = new lambda.Function(this, 'Function', { code: lambda.Code.fromInline('exports.handler = (event) => console.log(event);'), handler: 'index.handler', runtime: lambda.Runtime.NODEJS_14_X, }); const availabilityRule = instance.onEvent('Availability', { target: new targets.LambdaFunction(fn) }); availabilityRule.addEventPattern({ detail: { EventCategories: [ 'availability', ], }, }); /// !hide } } new DatabaseInstanceStack(app, 'aws-cdk-rds-instance'); app.synth();