@infra-blocks/aws-dynamodb-provisioner
v0.1.0
Published
This package exposes utilities to provision DynamoDB.
Downloads
42
Readme
ts-aws-dynamodb-provisioner
This repository stores the code for the @infra-blocks/aws-dynamodb-provisioner package. The provisioning utilities are meant to be used locally to bootstrap a DynamoDB table programmatically, either for local testing or straight up automated testing. They are not meant to replace proper IaC tools for cloud resources.
Usage
The exported DynamoDbProvisioner class has a very simple API to use: provision and deprovision.
It works as such:
import { DynamoDbProvisioner } from "@infra-blocks/aws-dynamodb-provisioner";
export const TABLE_DEFINITIONS: Array<ProvisionTableParams> = [
{
name: COMPOUND_TABLE,
primaryKey: {
/*
The primary key is partitioned mostly on IDs. ID will have the form: <type>#<id>
other more canonical names could be used.
*/
partitionKey: { name: "pk", type: "S" },
/*
The sort key is used to express relationship with the partition key. Sometimes,
those can be IDs, which represent a one-to-one or one-to-many-relationship.
Other times, those will be categories, such as "profile" for a user with a
pk of "user#1234".
*/
sortKey: { name: "sk", type: "S" },
},
},
{
/*
This table is used to store values like in a hash map, with a unique key.
It can be used in uniqueness checks, locks, and similar use cases.
*/
name: HASH_TABLE,
primaryKey: {
/*
The primary key is partitioned mostly on IDs. ID will have the form: <type>#<id>
other more canonical names could be used.
*/
partitionKey: { name: "pk", type: "S" },
},
ttlAttribute: "ttl",
},
];
const provision = {
tables: [{
name: COMPOUND_TABLE,
primaryKey: {
partitionKey: { name: "pk", type: "S" },
sortKey: { name: "sk", type: "S" },
},
gsis: {
partitionKey: { name: "gsi1Pk", type: "S" },
sortKey: { name: "gsi1Sk", type: "S" },
},
// Supports lsis as well.
}]
};
const provisioner = DynamoDbProvisioner.create({ endpoint: "http://localhost:8000" });
await provisioner.provision(provision);
// Everything exists as described here.
await provisioner.deprovision(provision);
// Ain't nuttin' left.