Skip to content

Commit

Permalink
feat(neptune): high level constructs for db clusters and instances
Browse files Browse the repository at this point in the history
- This change adds higher level constructs for Neptune clusters
- Adds higher-level constructs for
  - AWS::Neptune::DBCluster
  - AWS::Neptune::DBInstance
  - AWS::Neptune::DBClusterParameterGroup
  - AWS::Neptune::DBParameterGroup
  - AWS::Neptune::DBSubnetGroup

fixes aws#12762
  • Loading branch information
cornerwings committed Jan 29, 2021
1 parent 2f6521a commit 06c8df5
Show file tree
Hide file tree
Showing 16 changed files with 2,079 additions and 8 deletions.
37 changes: 36 additions & 1 deletion packages/@aws-cdk/aws-neptune/README.md
Expand Up @@ -9,10 +9,45 @@
>
> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib
![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)

> The APIs of higher level constructs in this module are experimental and under active development.
> They are subject to non-backward compatible changes or removal in any future version. These are
> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be
> announced in the release notes. This means that while you may use them, you may need to update
> your source code when upgrading to a newer version of this package.
---

<!--END STABILITY BANNER-->

## Starting a Neptune Database

To set up a Neptune database, define a `DatabaseCluster`. You must always launch a database in a VPC.

```ts
const cluster = new DatabaseCluster(this, 'Database', {
vpc,
instanceProps: {
instanceType: InstanceType.R5_LARGE,
}
});
```

Your cluster will be empty by default.

## Connecting

To control who can access the cluster, use the `.connections` attribute. Neptune databases have a default port, so
you don't need to specify the port:

```ts
cluster.connections.allowDefaultPortFromAnyIpv4('Open to the world');
```

The endpoints to access your database cluster will be available as the `.clusterEndpoint` and `.clusterReadEndpoint`
attributes:

```ts
import * as neptune from '@aws-cdk/aws-neptune';
const writeAddress = cluster.clusterEndpoint.socketAddress; // "HOSTNAME:PORT"
```
75 changes: 75 additions & 0 deletions packages/@aws-cdk/aws-neptune/lib/cluster-ref.ts
@@ -0,0 +1,75 @@
import { IConnectable, ISecurityGroup } from '@aws-cdk/aws-ec2';
import { IResource } from '@aws-cdk/core';
import { Endpoint } from './endpoint';

/**
* Create a clustered database with a given number of instances.
*/
export interface IDatabaseCluster extends IResource, IConnectable {
/**
* Identifier of the cluster
*/
readonly clusterIdentifier: string;

/**
* Identifiers of the replicas
*/
readonly instanceIdentifiers: string[];

/**
* The endpoint to use for read/write operations
* @attribute Endpoint,Port
*/
readonly clusterEndpoint: Endpoint;

/**
* Endpoint to use for load-balanced read-only operations.
* @attribute ReadEndpoint
*/
readonly clusterReadEndpoint: Endpoint;

/**
* Endpoints which address each individual replica.
*/
readonly instanceEndpoints: Endpoint[];
}

/**
* Properties that describe an existing cluster instance
*/
export interface DatabaseClusterAttributes {
/**
* The database port
*/
readonly port: number;

/**
* The security group of the database cluster
*/
readonly securityGroup: ISecurityGroup;

/**
* Identifier for the cluster
*/
readonly clusterIdentifier: string;

/**
* Identifier for the instances
*/
readonly instanceIdentifiers: string[];

/**
* Cluster endpoint address
*/
readonly clusterEndpointAddress: string;

/**
* Reader endpoint address
*/
readonly readerEndpointAddress: string;

/**
* Endpoint addresses of individual instances
*/
readonly instanceEndpointAddresses: string[];
}

0 comments on commit 06c8df5

Please sign in to comment.