Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(neptune): high level constructs for db clusters and instances #12763

Merged
merged 7 commits into from Mar 1, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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
cornerwings marked this conversation as resolved.
Show resolved Hide resolved

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', {
cornerwings marked this conversation as resolved.
Show resolved Hide resolved
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[];
}