Condense Opinionated CDK Library
This library contains constructs and stacks we use across our projects.
Networking
Networking provides a VPC already configured with public, private and isolated subnets.
It requires setting a cidr or IPAM allocation, to avoid accidental usage of default CIDR.
Optionally, it also creates a bastion host.
It is available as a construct:
class MyStack extends cdk.Stack {
constructor(scope: Construct, id :string, props?: cdk.StackProps) {
super(scope, id, props);
const networking = new Networking(this, 'Networking', {
cidr: ec2.IpAddresses.cidr('10.0.0.0/16'),
});
}
}
or as a stack:
const app = new cdk.App();
const networking = new NetworkingStack(app, 'networking', {
cidr: ec2.IpAddresses.cidr('10.0.0.0/16'),
})
Both of them implements the INetworking interface, allowing to easily compose your infrastructure.
Database
Supported database constructs:
And their relative stack version:
All of them implements the IDatabase interface, allowing to easily compose your infrastructure.
Cloudwatch Alarms Topic
The CloudwatchAlarmsTopicStack creates an SNS Topic which can be used as a target for Cloudwatch Alarms, allowing to easily:
- create alarms in Jira Service Desk
- send messages to Discord
Other useful constructs
Naive BasicAuth Cloudfront Function
NaiveBasicAuthCloudfrontFunction is useful when a basic protection layer must be added to Cloudfront (for SPAs or static sites) and you just need to avoid crawlers and unwanted visitors.
Monitoring Facade
By instantiating this class in a stack, it ensures all resources are properly monitored by CloudWatch.
Further configuration can be done by .of
method.
class Stack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const monitoring = new MonitoringFacade(this, 'Monitoring');
const construct = new MyConstruct(this, 'MyConstruct');
}
}
export class MyConstruct extends Construct {
constructor(scope: Construct, id: string) {
super(scope, id);
const elb = new elbv2.ApplicationLoadBalancer(this, 'ALB', {
...
});
MonitoringFacade.of(this).configAppliationLoadBalancer(elb, {
target5xxErrorsThreshold: 1,
});
}
}