Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »


4.4.7 • Public • Published


Build Status Test Coverage Dependabot Status Dependencies NPM Downloads Semantic-Release Gardener

Wrapper around aws-sdk.


When dealing with the aws-sdk a lot, some calls become very repetitive and achieving code coverage becomes tiresome. This wrapper abstracts some of the repetitive logic.

Some examples of repetitive logic are:

  • having to call .promise()
  • handling of expected errors
  • logging of unexpected errors


Install with npm:

$ npm install --save aws-sdk-wrap

Ensure required peer dependencies are available.


const aws = require('aws-sdk-wrap')();
  .call('s3:putObject', { /* ... */ })
  .then(/* ... */)
  .catch(/* ... */);

where the first parameter is the service, the second parameter is the method and the third parameter are the "params" passed into the call.

Services are lazily initialized on first access.

One can access an aws-sdk service directly by calling e.g. aws.get('s3').


call(action: String, params: Object = {}, options: Object = {})

The action is of the format path.to.service:functionName.

Gets the service from the underlying aws-sdk and initialize it with the available config iff the service is not initialized yet. Then calls the function with the passed params (which needs to contain the appropriate parameters for the function).

The available call options are detailed below.

get(serviceName: String)

Get the service from the underlying aws-sdk without initializing it. Possible to access nested paths.

updateGlobalConfig(config: Object)

Updates the global aws config of the underlying aws-sdk via AWS.config.update. In most cases this should not be necessary to use.

sqs.sendMessageBatch({ messages: Array, queueUrl: String /* ... other options ... */ })

Splits messages into groups and calls sqs.SendMessageBatch for every group. Batch sizes can be modified by the batchSize option. Failed calls will be retried up to the maxRetries option. The available sendMessageBatch options are detailed below.

sqs.getDeadLetterQueueUrl({ queueUrl })

Return the Dead Letter Queue Url configured for the passed queue url

sqs.QueueProcessor({ queueUrls: String[], stepsDir: String, ingestSteps: String[] })

Initialize a queue processor lambda handler with steps. Steps need to be defined in the steps directory as separate STEPNAME.js files. Each queueUrl used by a step must be defined in queueUrls.

Each step should export:

  • schema<Joi>: Joi schema
  • handler<function(step, event, stepContext): steps>: execution logic ingesting payload and event
  • next: array of next possible steps
  • queueUrl: the queue that the step is ingested into
  • delay = 0 (optional): the amount of seconds that the message is delayed, defaults to undefined, i.e. the queue default
  • retry = null (optional): Declare object that is then used to instantiate RetryError internally
  • timeout = 900 (optional): Timeout for individual step. Should allow for extra overhead for message management / processing and account for concurrency.
  • before<function(stepContext): steps> (optional): called before first step is executed
  • after<function(stepContext): steps> (optional):

The schema needs to define the event name under name. New events that are to be re-queued into the queue need to be returned from the handler, before or after function as an array.


  • ingest: Method used to seed queue. Note that messages generated inside a step should simply be returned from that step.
  • handler: Lambda function handler that is triggered by sqs
  • digraph: Visualize flow using viz-js.com.

Please see tests for example.


  • RetryError: Can be thrown from step logic or declared on step to trigger (code) retry logic

sqs.prepareMessage(msg: Object, opts: Object)

Prepare message object with options. Currently options include:

  • delaySeconds (integer): used to set the delay for a specific message. Supersedes the corresponding batch option.

s3.putGzipObject({ bucket: String, key: String, data: Object })

Adds an object to an Amazon S3 bucket gzipped. Uses s3:putObject.

s3.getGzipJsonObject({ bucket: String, key: String, expectedErrorCodes: [String] })

Retrieves objects from Amazon S3, expecting it to be gzipped. Uses s3:getObject.

s3.headObject({ bucket: String, key: String, expectedErrorCodes: [String] })

Retrieves only the metadata from an object in an Amazon S3 bucket. Uses s3:headObject.

s3.deleteObject({ bucket: String, key: String })

Delete object from an Amazon S3 bucket at key. Uses s3:deleteObject.

s3.listObjects({ bucket: String, limit: Number, startAfter: String, stopAfter: String, prefix: String })

List objects keys in an Amazon S3 bucket. Internally this pages until the limit is reached or no more keys are available. Uses s3:listObjectsV2.

  • stopAfter: If provided paging is stopped if the last key returned is larger or equal to this parameter. Only appropriate keys are then returned.

s3.decodeKey(key: String)

Returns a non-ASCII key representation for an encoded s3 key. Useful to obtain the not-encoded key representation after calling listObjects.

Init Options


Type: Logger
Default: null

Provide logger. E.g. logplease or lambda-rollbar.

When an unexpected error is risen, information is logged using .error(...).


Type: Object
Default: {}

AWS Config object used to initialize the service.

This only affects initialized services. To update the global AWS config use updateGlobalConfig.

Call Options


Type: list
Default: []

Provide string list of expected AWS error codes. Promise succeeds on expected error with error code as string.

SendMessageBatch Options


Type: integer
Default: 10

Specify the size of each batch that will be sent. Should never exceed 10.


Type: integer
Default: 10

Number of times to retry any failed requests.


Type: Function
Default: (count) => 30 * (count ** 2)

The length of time the function will wait after each failed request before retrying.


Type: integer
Default: null

Set DelaySeconds option.



npm i aws-sdk-wrap

DownloadsWeekly Downloads






Unpacked Size

114 kB

Total Files


Last publish


  • avatar