| Interface | Description |
|---|---|
| SqlServerSeederProps |
EXPERIMENTAL
|
| Class | Description |
|---|---|
| SqlServerSeeder |
EXPERIMENTAL
|
| SqlServerSeeder.Builder |
A fluent builder for
SqlServerSeeder. |
| SqlServerSeederProps.Builder |
A builder for
SqlServerSeederProps |
| SqlServerSeederProps.Jsii$Proxy |
An implementation for
SqlServerSeederProps |
A simple CDK seeder for SQL Server RDS databases.
When you create an RDS SQL Server instance using CloudFormation template, there is no way to provide initial schema definition as part of CloudFormation stack deployment. Custom schema deployment scripts can be executed only after the database deployment is complete.
cdk-sqlserver-seeder library is a AWS CDK construct that provides a way to automate this process and eliminate manual steps involved in the process of preparing new RDS SQL Server environment by executing custom SQL scripts on RDS SQL Server instance creation/deletion.
The construct relies on Invoke-SqlCmd cmdlet to run the scripts and provides a way to handle transient errors during stack provisioning.
// Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
import software.amazon.awscdk.core.*;
import software.amazon.awscdk.services.ec2.*;
import software.amazon.awscdk.services.rds.*;
import cdk.sqlserver.seeder.SqlServerSeeder;
public class DatabaseStack extends Stack {
public DatabaseStack(Construct scope, String id) {
this(scope, id, null);
}
public DatabaseStack(Construct scope, String id, StackProps props) {
super(scope, id, props);
DatabaseInstance sqlServer = new DatabaseInstance(this, "Instance", new DatabaseInstanceProps()
.engine(rds.DatabaseInstanceEngine.getSQL_SERVER_WEB()));
var seeder = SqlServerSeeder.Builder.create(this, "SqlSeeder")
.database(sqlServer)
.port(1433)
.vpc(vpc)
.createScriptPath("./SQL/v1.0.0.sql")// script to be executed on resource creation
.deleteScriptPath("./SQL/cleanup.sql")
.build();
}
}
SqlServerSeeder construct accepts the following configuration properties:
| Parameter | Required | Default | Description |
|---|---|---|---|
| vpc | yes | | VPC for Lambda function deployment |
| database | yes | | RDS SQL Server database instance |
| createScriptPath | yes | | SQL scripts to run on resource creation |
| deleteScriptPath | no | | SQL script to run on resource deletion |
| port | no | 1433 | RSD SQL Server database port |
| memorySize | no | 512 | Lambda function memory size |
| ignoreSqlErrors | no | false | Whether to ignore SQL error or not |
cdk-sqlserver-seeder deploys a custom resource backed by PowerShell lambda to connect to SQL Server instance. Lambda function is deployed in private subnets of your VPC where RDS instance resides.
Lambda function retrieves database credentials from AWS Secrets Manager and uses them to construct connection string to the database.
SQL scripts are uploaded into S3 bucket during CDK application deployment. Lambda function downloads these scripts during execution.
Lambda function has the following permissions:
AWSLambdaBasicExecutionRole for CloudWatch logsAWSLambdaVPCAccessExecutionRole for VPC access
secretsmanager:GetSecretValue for RDS credentials secrets3:GetObject*, s3:GetBucket*, s3:List* for S3 bucket with SQL scripts
The whole project inspired by aws-cdk-dynamodb-seeder. I though it would be very helpful to have a similar way to seed initial schema to more traditional SQL Server databases.
Copyright © 2020. All rights reserved.