Skip to main content

A simple CDK JSON seeder for DynamoDB

Project description

aws-cdk-dynamodb-seeder Mentioned in Awesome CDK

build codecov npm version dependencies Status npm

A simple CDK JSON seeder for DynamoDB

Why this package

Glad you asked!

Using AWS CDK for automating infrastructure deployments is an amazing way of integrating the development and operations into one process and one codebase.

However, building dev or test environments that come pre-populated with data can be tricky, especially when using Amazon DynamoDB.

How do I use it

Install using your favourite package manager:

yarn add aws-cdk-dynamodb-seeder

Example usage

# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
from aws_cdk_dynamodb_seeder import Seeder
my_table = Table(stack, "MyTable",
    table_name="MyTable",
    partition_key={"name": "Id", "type": AttributeType.STRING}
)
Seeder(stack, "MySeeder",
    table=my_table,
    table_name="MyTable",
    setup=require("./items-to-put.json"),
    teardown=require("./keys-to-delete.json"),
    refresh_on_update=True
)

For a more in-depth example, see: elegantdevelopment/aws-cdk-dynamodb-seeder-examples.

Importing seed data

Data passed into setup ("Items" to put) or teardown ("Keys" to delete) should be an array of JavaScript objects (that are, in turn, representations of string to AttributeValue maps).

Internals

Behind the scenes we use an AwsCustomResource as a representation of the related table's seed state. The custom resource's event handlers invoke a Function to perform setup and/or teardown actions.

Deploying a stack

On deployment, we write copies of your seed data locally and use a BucketDeployment to write it to an S3 Bucket.

We then create the handler function and custom resource to field seed requests (the onCreate event will immediate fire as the stack deploys, reading the data from the bucket and seeding the table using AWS.DynamoDB.DocumentClient).

Updating a stack

On a stack update, the onUpdate handler is triggered when Seeder.props.refreshOnUpdate is true.

This will run AWS.DynamoDB.DocumentClient.delete() on every teardown "Key" followed by AWS.DynamoDB.DocumentClient.put() on every setup "Item".

Destroying a stack

When the stack is destroyed, the event handler's onDelete function will be invoked, providing Seeder.props.teardown is set.

This simply runs AWS.DynamoDB.DocumentClient.delete() on every teardown "Key" before destroying the Seeder's resources.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aws-cdk-dynamodb-seeder-1.3.2.tar.gz (6.3 MB view hashes)

Uploaded Source

Built Distribution

aws_cdk_dynamodb_seeder-1.3.2-py3-none-any.whl (6.3 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page