Naughty Praying Mantis

    serverless-plugin-offline-kinesis-events

    1.1.1 • Public • Published

    serverless-plugin-offline-kinesis-events

    serverless Build Status

    This plugin works with serverless-offline to allow offline testing of serverless functions that are triggered by Kinesis events.

    Quickstart

    First, start Kinesalite: docker run --rm -d -p 4567:4567 dlsniper/kinesalite:1.11.4

    Then, populate Kinesalite with the appropriate streams (we add a bootstrap command for this):

    async function ensureStream() {
      const kinesis = new AWS.Kinesis({
        endpoint: `${process.env.LAMBDA_KINESIS_HOST}:${process.env.LAMBDA_KINESIS_PORT}`,
        region: process.env.LAMBDA_REGION,
        apiVersion: '2013-12-02',
        sslEnabled: false
      })
      try {
        // Create the stream
        await kinesis.createStream({ ShardCount: 1, StreamName: process.env.LAMBDA_KINESIS_STREAM_NAME }).promise()
      } catch (err) {
        if (err.code === 'ResourceInUseException') {
          // Stream already exists, so no problem
          winston.info('Kinesis stream already exists')
          return
        }
        throw err
      }
    }
    

    Start your service: sls offline

    Finally, put records to Kinesalite (this script loads the yml to put from the first command line argument):

    const kinesis = new AWS.Kinesis({
      endpoint: `${process.env.LAMBDA_KINESIS_HOST}:${process.env.LAMBDA_KINESIS_PORT}`,
      region: process.env.LAMBDA_REGION,
      apiVersion: '2013-12-02',
      sslEnabled: false
    })
    
    // Load the record
    async function run() {
      // Read the records
      const records = await BB.all(process.argv.slice(1).map(f => readAsync(f)))
      // Write them to Kinesis
      return BB.map(records, record => kinesis.putRecord({
        Data: JSON.stringify(yaml.safeLoad(record)),
        PartitionKey: '0',
        StreamName: process.env.LAMBDA_KINESIS_STREAM_NAME
      }).promise())
    }
    
    run()
      .then(() => winston.info('Put records successfully'))
      .catch((err) => {
        winston.error(`Failed with error ${err.stack}`)
        process.exit(2)
      })
    

    And you'll see your lambda fire!

    Usage in the real world

    See the example/ folder for how we've used this plugin successfully in the real world.

    Release Notes

    • 1.1.1 - Fix issue that didn't allow for both serverless-offline http events and kinesis events to be used at the same time.
    • 1.1.0 - Allow plugin to work either with serverless-webpack or without
    • 1.0.1 - Fix example, fix compatibility issue with serverless-offline
    • 1.0.0 - Initial release

    Contributors

    Install

    npm i serverless-plugin-offline-kinesis-events

    DownloadsWeekly Downloads

    23

    Version

    1.1.1

    License

    MIT

    Unpacked Size

    21.7 kB

    Total Files

    5

    Last publish

    Collaborators

    • jemonjam