forked from aws/aws-cdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinteg.instance.lit.ts
104 lines (91 loc) · 3.08 KB
/
integ.instance.lit.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import cloudwatch = require('@aws-cdk/aws-cloudwatch');
import ec2 = require('@aws-cdk/aws-ec2');
import targets = require('@aws-cdk/aws-events-targets');
import lambda = require('@aws-cdk/aws-lambda');
import logs = require('@aws-cdk/aws-logs');
import cdk = require('@aws-cdk/core');
import rds = require('../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', {
family: 'oracle-se1-11.2',
parameters: {
open_cursors: '2500'
}
});
/// Add XMLDB and OEM with option group
const optionGroup = new rds.OptionGroup(this, 'OptionGroup', {
engine: rds.DatabaseInstanceEngine.ORACLE_SE1,
majorEngineVersion: '11.2',
configurations: [
{
name: 'XMLDB'
},
{
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.ORACLE_SE1,
licenseModel: rds.LicenseModel.BRING_YOUR_OWN_LICENSE,
instanceClass: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MEDIUM),
multiAz: true,
storageType: rds.StorageType.IO1,
masterUsername: '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: false,
optionGroup,
parameterGroup
});
// Allow connections on default port from any IPV4
instance.connections.allowDefaultPortFromAnyIpv4();
// Rotate the master user password every 30 days
instance.addRotationSingleUser('Rotation');
// 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_10_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();