-
Notifications
You must be signed in to change notification settings - Fork 1
/
cdk-aurora-serverless-stack.ts
71 lines (60 loc) · 2.13 KB
/
cdk-aurora-serverless-stack.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
import { CfnOutput, Construct, Stack, StackProps } from '@aws-cdk/core';
import { Vpc, SubnetType } from '@aws-cdk/aws-ec2';
import { CfnDBCluster, CfnDBSubnetGroup } from '@aws-cdk/aws-rds';
export class CdkAuroraServerlessStack extends Stack {
constructor(scope: Construct, id: string, props: StackProps) {
super(scope, id, props);
// create vpc
const vpc = new Vpc(this, 'Vpc', {
cidr: '10.0.0.0/16',
natGateways: 0,
subnetConfiguration: [
{ name: 'aurora_isolated_', subnetType: SubnetType.ISOLATED }
]
});
// get subnetids from vpc
const subnetIds: string[] = [];
vpc.isolatedSubnets.forEach(subnet => {
subnetIds.push(subnet.subnetId);
});
// output subnet ids
new CfnOutput(this, 'VpcSubnetIds', {
value: JSON.stringify(subnetIds)
});
// output security group
new CfnOutput(this, 'VpcDefaultSecurityGroup', {
value: vpc.vpcDefaultSecurityGroup
});
// create subnetgroup
const dbSubnetGroup: CfnDBSubnetGroup = new CfnDBSubnetGroup(this, 'AuroraSubnetGroup', {
dbSubnetGroupDescription: 'Subnet group to access aurora',
dbSubnetGroupName: 'aurora-serverless-subnet-group',
subnetIds
});
// create aurora db serverless cluster
const aurora = new CfnDBCluster(this, 'AuroraServerless', {
databaseName: 'dbname',
dbClusterIdentifier: 'aurora-serverless',
engine: 'aurora',
engineMode: 'serverless',
masterUsername: 'masteruser',
masterUserPassword: 'IT_IS_SMART_TO_GENERATE_AND_OUTPUT_THIS',
port: 3306,
dbSubnetGroupName: dbSubnetGroup.dbSubnetGroupName,
scalingConfiguration: {
autoPause: true,
maxCapacity: 2,
minCapacity: 2,
secondsUntilAutoPause: 3600
}
});
//wait for subnet group to be created
aurora.addDependsOn(dbSubnetGroup);
// construct arn from available information
const { region, account } = process.env;
const auroraArn = `arn:aws:rds:${region}:${account}:cluster:${aurora.dbClusterIdentifier}`;
new CfnOutput(this, 'AuroraClusterArn', {
value: auroraArn
});
}
}