npm package: @nona-creative/aws-cdk-rds
Description: AWS RDS package with CDK
Author: NoNa Creative
Latest version: 1.0.2

AWS RDS (CDK)
===

Installation
---

```bash
npm i -S @nona-creative/aws-cdk-rds
```


Usage
---

 1. Create a Security Group for RDS on the relevant VPC (eg. using ``@nona-creative/aws-cdk-vpc``)
    
    ```typescript
    this.vpcStack.createSecurityGroup({
      name: RDS_VPC_SECURITY_GROUP_NAME,
      description: 'RDS Security Group for app VPC',
      allowAllOutbound: false,
    })
    ```

    and (optionally) add an ingress rule for lambda:

    ```typescript
    this.vpcStack.addSecurityGroupIngressRule({
      targetSecurityGroupName: RDS_VPC_SECURITY_GROUP_NAME,
      sourceSecurityGroupName: LAMBDA_VPC_SECURITY_GROUP_NAME,
      port: 5432,
    })
    ```

 2. Create the RDS stack
    
    ```typescript
    import { RDSStack } from '@nona-creative/aws-cdk-rds'

    const rdsSecurityGroup = this.vpcStack.securityGroups[RDS_VPC_SECURITY_GROUP_NAME] as SecurityGroup
    this.rdsStack = new RDSStack(this.scope, `${this.id}-rds-${this.stage}`, {
      stage: this.stage,
      vpc: this.vpcStack.vpc,
      securityGroup: rdsSecurityGroup,
    })
    ```

 2. Retrieve required environment variables from AWS Secrets Manager and Paramstore (eg. using ``@nona-creative/aws-cdk-config``)

    ```typescript
    this.configData = new AWSConfig(stack, `${this.id}-config-${this.stage}`, {
      stage: this.stage,
      appName: process.env.APP_NAME || '',
      packageName: process.env.PACKAGE_NAME || '',
      paramStoreKeys: PARAM_STORE_KEYS,
      secretsManagerKeys: SECRETS_MANAGER_KEYS,
      secretsArn: process.env.SECRETS_ARN || '',
    })
    ```

 3. Retrieve required environment variables from Secrets Manager and Paramstore (eg. using `@nona-creative/aws-config-cdk`)
    
    ```typescript
    this.configData = new AWSConfig(this.apiGatewayStack, `${this.id}-config-${this.stage}`, {
      stage: this.stage,
      appName: process.env.APP_NAME || '',
      packageName: process.env.PACKAGE_NAME || '',
      paramStoreKeys: PARAM_STORE_KEYS,
      secretsManagerKeys: SECRETS_MANAGER_KEYS,
      secretsArn: process.env.SECRETS_ARN || '',
    })
    ```

 4. Create Database or Database cluster using config data from AWSConfig

    ```typescript
    import { DatabaseInstanceProps } from '@aws-cdk/aws-rds'

    const additioanlDatabaseProps: DatabaseInstanceProps = { ... }
    const { POSTGRES_USER, POSTGRES_DB, POSTGRES_PASSWORD, POSTGRES_PORT } = this.configData
    this.rdsStack.createDatabase({
      user: POSTGRES_USER as string,
      databaseName: POSTGRES_DB as string,
      password: POSTGRES_PASSWORD as string,
      port: POSTGRES_PORT as string,
      props: additioanlDatabaseProps,
    })
    ```

    or

    ```typescript
    import { DatabaseClusterProps } from '@aws-cdk/aws-rds'

    const additioanlDatabaseClusterProps: DatabaseClusterProps = { ... }
    const { POSTGRES_USER, POSTGRES_DB, POSTGRES_PASSWORD, POSTGRES_PORT } = this.configData
    this.rdsStack.createDatabaseCluster({
      user: POSTGRES_USER as string,
      databaseName: POSTGRES_DB as string,
      password: POSTGRES_PASSWORD as string,
      port: POSTGRES_PORT as string,
      props: additioanlDatabaseClusterProps,
    })
    ```