Skip to content
This repository has been archived by the owner on Oct 26, 2023. It is now read-only.

ACloudGuru/serverless-plugin-dynamo-autoscaling

Repository files navigation

⚡️ Serverless Plugin for DynamoDB Auto Scaling

Build Status Codacy Badge Coverage Status npm GitHub license dependencies Status LGTM Status

Serverless Plugin to enable autoscaling for dynamodb tables and its GSI.

Installation

# Via yarn
$ yarn add serverless-plugin-dynamo-autoscaling

# Via npm
$ npm install serverless-plugin-dynamo-autoscaling

Add the plugin to your serverless.yml:

plugins:
  - serverless-plugin-dynamo-autoscaling

Configuration

custom:
  autoscaling:
    - table: CustomTable  # DynamoDB Resource
      read:
        minimum: 5        # Minimum read capacity
        maximum: 1000     # Maximum read capacity
        targetUsage: 75   # Targeted usage percentage
      write:
        minimum: 40       # Minimum write capacity
        maximum: 200      # Maximum write capacity
        targetUsage: 50   # Targeted usage percentage

Defaults

maximum: 200
minimum: 5
targetUsage: 75

If no roleArn is specified, plugin will automatically create one and use it.

Index Only

If you only want to enable Auto Scaling for the index, use indexOnly: true to skip Auto Scaling for the general DynamoDB table.

Examples

custom:
  autoscaling:
  
    # Autoscaling for table and index
    - table: CustomTable  
      index:              # List or single index name
        - custom-index-name
      read:
        minimum: 5        
        maximum: 1000     
        targetUsage: 75   
      write:
        minimum: 40       
        maximum: 200      
        targetUsage: 50   
        
    # Using with custom role
    - table: CustomTable  # DynamoDB Resource
      roleArn:            # Arn of the role to be associated - Optional
      read:
        minimum: 5       
        maximum: 1000     
        targetUsage: 75   
      write:
        minimum: 40       
        maximum: 200      
        targetUsage: 50   
        
    # Autoscaling for index only
    - table: IndexOnlyTable  
      index:              
        - custom-index-name
      indexOnly: true     # autoscaling for index only
      read:
        minimum: 5        
        maximum: 1000     
        targetUsage: 75  
      write:
        minimum: 40       
        maximum: 200      
        targetUsage: 50   

DynamoDB

The example serverless configuration above works fine for a DynamoDB table CloudFormation resource like this:

resources:
  Resources:
    CustomTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: custom-table
        AttributeDefinitions:
          - AttributeName: key
            AttributeType: S
        KeySchema:
          - AttributeName: key
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 5
          WriteCapacityUnits: 5
        GlobalSecondaryIndexes:
          - IndexName: custom-index-name
            KeySchema:
              - AttributeName: key
                KeyType: HASH
            Projection:
              ProjectionType: ALL
            ProvisionedThroughput:
              ReadCapacityUnits: 5
              WriteCapacityUnits: 5

Thanks

License

Feel free to use the code, it's released using the MIT license.