Metadata-Version: 2.1
Name: cdk-sqlserver-seeder
Version: 0.2.3
Summary: A simple CDK seeder for SQL Server RDS databases.
Home-page: https://github.com/kolomied/cdk-sqlserver-seeder#readme
Author: Dmitry Kolomiets<kolomied@amazon.co.uk>
License: MIT
Project-URL: Source, https://github.com/kolomied/cdk-sqlserver-seeder.git
Description: # cdk-sqlserver-seeder [![Mentioned in Awesome CDK](https://awesome.re/mentioned-badge.svg)](https://github.com/eladb/awesome-cdk)
        
        ![build](https://github.com/kolomied/cdk-sqlserver-seeder/workflows/build/badge.svg)
        ![jsii-publish](https://github.com/kolomied/cdk-sqlserver-seeder/workflows/jsii-publish/badge.svg)
        ![downloads](https://img.shields.io/npm/dt/cdk-sqlserver-seeder)
        
        [![npm version](https://badge.fury.io/js/cdk-sqlserver-seeder.svg)](https://badge.fury.io/js/cdk-sqlserver-seeder)
        [![PyPI version](https://badge.fury.io/py/cdk-sqlserver-seeder.svg)](https://badge.fury.io/py/cdk-sqlserver-seeder)
        [![NuGet version](https://badge.fury.io/nu/Talnakh.SqlServerSeeder.svg)](https://badge.fury.io/nu/Talnakh.SqlServerSeeder)
        [![Maven Central](https://img.shields.io/maven-central/v/xyz.talnakh/SqlServerSeeder?color=brightgreen)](https://repo1.maven.org/maven2/xyz/talnakh/SqlServerSeeder/)
        
        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](https://aws.amazon.com/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](https://docs.microsoft.com/en-us/powershell/module/sqlserver/invoke-sqlcmd) cmdlet
        to run the scripts and provides a way to handle transient errors during stack provisioning.
        
        ## Usage
        
        ```python
        # Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
        import aws_cdk.core as cdk
        import aws_cdk.aws_ec2 as ec2
        import aws_cdk.aws_rds as rds
        from cdk_sqlserver_seeder import SqlServerSeeder
        
        class DatabaseStack(cdk.Stack):
            def __init__(self, scope, id, *, description=None, env=None, stackName=None, tags=None, synthesizer=None, terminationProtection=None):
                super().__init__(scope, id, description=description, env=env, stackName=stackName, tags=tags, synthesizer=synthesizer, terminationProtection=terminationProtection)
        
                sql_server = rds.DatabaseInstance(self, "Instance",
                    engine=rds.DatabaseInstanceEngine.SQL_SERVER_WEB
                )
        
                seeder = SqlServerSeeder(self, "SqlSeeder",
                    database=sql_server,
                    port=1433,
                    vpc=vpc,
                    create_script_path="./SQL/v1.0.0.sql", # script to be executed on resource creation
                    delete_script_path="./SQL/cleanup.sql"
                )
        ```
        
        ## Configuration properties
        
        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      |
        
        ## Architecture
        
        ![Architecture](/doc/architecture.png)
        
        `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](https://aws.amazon.com/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.
        
        ## Security considerations
        
        Lambda function has the following permissions:
        
        * Managed policies
        
          * `AWSLambdaBasicExecutionRole` for CloudWatch logs
          * `AWSLambdaVPCAccessExecutionRole` for VPC access
        * Inline policy
        
          * `secretsmanager:GetSecretValue` for RDS credentials secret
          * `s3:GetObject*`, `s3:GetBucket*`, `s3:List*` for S3 bucket with SQL scripts
        
        ## Acknowledgements
        
        The whole project inspired by [aws-cdk-dynamodb-seeder](https://github.com/elegantdevelopment/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.
        
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: JavaScript
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Typing :: Typed
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved
Requires-Python: >=3.6
Description-Content-Type: text/markdown
