Vulcancreative Serverless Storage

Serverless plugin defining DynamoDB storage primitives; like localStorage but better

View on Github

Serverless Storage, for Framework

Serverless Storage

serverlessStorage is a backend key/value library (similar to localStorage or sessionStorage), which uses a combination of DynamoDB and S3 to store data blobs, greatly simplifying database connectivity in a serverless environment.

Installation

To install this plugin, you can use serverless plugin install, or you can use yarn or npm.

With Serverless

serverless plugin install -n @vulcancreative/serverless-storage

Make sure you have serverless-storage in your plugin list:

plugins:
  - "@vulcancreative/serverless-storage"

With Yarn

yarn add --dev @vulcancreative/serverless-storage

then you need to manually add the plugin to your serverless.yml file:

plugins:
  - "@vulcancreative/serverless-storage"

With npm

npm install --save-dev @vulcancreative/serverless-storage

then you need to manually add the plugin to your serverless.yml file:

plugins:
  - "@vulcancreative/serverless-storage"

Configuration

Put these variables in your serverless.yml file:

provider:
  environment:
    STORAGE_DEFAULT_REGION: us-east-1 # update this with the region you want
    STORAGE_BUCKET_NAME: "${self:custom.serverlessStorage.bucketName}"
    STORAGE_TABLE_NAME: "${self:custom.serverlessStorage.bucketName}"
  iam:
    role:
      statements:
        - Effect: "Allow"
          Action:
            - "dynamodb:CreateTable"
            - "dynamodb:DeleteItem"
            - "dynamodb:DeleteTable"
            - "dynamodb:DescribeTable"
            - "dynamodb:GetItem"
            - "dynamodb:PutItem"
            - "dynamodb:Query"
            - "iam:PassRole"
            - "kms:CreateGrant"
            - "kms:Decrypt"
            - "kms:DescribeKey"
            - "kms:Encrypt"
            - "kms:GenerateDataKey"
            - "kms:RevokeGrant"
            - "s3:*"
          Resource: "*"

custom:
  serverlessStorage:
    bucketName: '' # update this with the name of your bucket
    tableName: '' # update this with the name of your table

Basic Usage

Saving data

import { serverlessStorage } from "@vulcancreative/serverless-storage";

const myTable = process.env.STORAGE_TABLE_NAME;
//user part is partition key
//my-user-id is sort key
const myKey = "user:my-user-id";
const myValue = event;

const test = await serverlessStorage.putData(myKey, myValue, myTable);

Delete data

const myTable = process.env.STORAGE_TABLE_NAME;
const myKey = "user:my-user-id";
const data = await serverlessStorage.removeData(myKey, myTable)

Check if key exists:

const myTable = process.env.STORAGE_TABLE_NAME;
const myKey = "user:my-user-id";
await serverlessStorage.hasData(myKey, myTable)

Get item:

const myTable = process.env.STORAGE_TABLE_NAME;
const myKey = "user:my-user-id";
const data = await serverlessStorage.getData(myKey, myTable)

Example Project

Example implementation for this project can be found here

Sponsors

Financing of this project's development is primarily sponsored by Vulcan Creative, a boutique digital product firm and Kilo, Social Media for the Antisocial.