89 lines
5.0 KiB
Markdown
89 lines
5.0 KiB
Markdown
# DynamoDB + DAX Benchmarker CDK
|
|
|
|
This CDK project deploys a DynamoDB table with a DAX cluster on top of it, and an EC2 instance to act as a bastion host for running benchmarking tests agasint DAX.
|
|
|
|
By default, the name of the DynamoDB table that is created is `$USER-high-velocity-table`.
|
|
By default, the name of the SSH key that is created for you is `$USER-dax-pair`
|
|
|
|
It should be noted that due to a bug in CDK, if you destroy the stack, you'll have to manually delete the SubnetGroup in DAX once everything else is deleted.
|
|
|
|
## Prerequisites
|
|
You must be logged into the AWS CLI prior to running the CDK. Ensure you're logged into your target AWS account by running
|
|
`aws sts get-caller-identity`.
|
|
|
|
## Getting started
|
|
[NodeJS](https://nodejs.org/en) is required for development. Install NodeJS using the following commands, if it is
|
|
not already installed:
|
|
|
|
### Installing NodeJS
|
|
|
|
#### Windows
|
|
NodeJS can be installed on Windows using the [Chocolatey](https://chocolatey.org) package manager. If Chocolatey is not yet
|
|
installed on your system, first install it in a privileged PowerShell:
|
|
```powershell
|
|
Set-ExecutionPolicy Bypass -Scope Process -Force;
|
|
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
|
|
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
|
|
```
|
|
|
|
Then, in a _non-privileged_ PowerShell session, install node:
|
|
```powershell
|
|
choco install nodejs
|
|
```
|
|
|
|
#### Linux
|
|
NodeJS can be installed on Linux using [NVM](https://github.com/nvm-sh/nvm). First, install NVM:
|
|
```shell
|
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
|
|
```
|
|
|
|
**Note:** The installation command was _not_ run with `sudo`. This is intentional, because if you install with `sudo`, then
|
|
`sudo` permissions will be required to install any and all new dependencies! You should avoid installing Node for the root
|
|
user!
|
|
|
|
|
|
Then, in order to use NVM to install NodeJS, you need to either restart your current shell session, or run the following:
|
|
```shell
|
|
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
|
|
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
```
|
|
|
|
Now, install NodeJS:
|
|
```shell
|
|
nvm install node
|
|
```
|
|
|
|
### Installing dependent libraries
|
|
|
|
Once node is installed, run the following commands to install the NPM libraries:
|
|
|
|
```shell
|
|
cd cdk
|
|
npm install -g aws-cdk
|
|
npm install -g typescript --save-dev
|
|
npm install
|
|
```
|
|
|
|
## CDK Arguments
|
|
This application depends on a few additional parameters in order to run. They can be specified in one of two ways: environment variables, or via the `-c` argument of the `cdk` command.
|
|
|
|
**Important:** Only one environment variable is required by the application, regardless of which parameter specification method you choose: `AWS_REGION`.
|
|
|
|
The following is a table of the **required** parameters for running the CDK
|
|
|
|
| Parameter Name | Environment Variable Name | Description |
|
|
|----------------|---------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
| `vpcId` | `VPC_ID` | The VPC ID you wish to deploy all of the stack's components into |
|
|
| `localIp` | `LOCAL_IP` | Your local IP; Used to allow SSH and Elasticsearch access in the EC2 security group |
|
|
| `sshKeyName` | `SSH_KEY_NAME` | The key name of your ssh key to allow you access to your EC2 instance. This should only be the name of the `.pem` file, and should not include the `.pem` extension. |
|
|
| `awsAccount` | `AWS_ACCOUNT` | The account ID of your AWS account. |
|
|
| `awsRegion` | `AWS_REGION` | The AWS region to deploy this stack and its components into |
|
|
|
|
### Optional Parameters
|
|
It is sometimes necessary to tweak the deployment a bit for different use cases. The CDK can be tweaked with the following parameters:
|
|
|
|
| Parameter Name | Default Value | Description |
|
|
|-----------------|-----------------------|-------------------------------------------------------------------------------------------------------------------------|
|
|
| `baseTableName` | `high-velocity-table` | This is the base name for the table. All tables created by the stack will be prefixed with `$USER` to prevent conflicts |
|
|
|