npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

grunt-deploy-lambda

v0.5.2

Published

A Grunt utlitiy for deploying an AWS Lambda function package stored in S3

Readme

grunt-deploy-lambda

Grunt plugin tasks for deploying a package stored in S3 to AWS Lambda

Use of this package requires that you have installed the Grunt CLI and package via npm install grunt, in addition to this package.

Use of this package also requires a valid grunt configuration (which can be done in code via grunt.initConfiguration()), where validity is described with each respective task.

You may access these tasks programmatically after loading package into your grunt via: ~~grunt.loadNpmTasks('@onaje/grunt-deploy-lambda');~~ grunt.loadNpmTasks('grunt-deploy-lambda');

Task: deploy_lambda_from_s3:[targetConfiguration] [--aws-profile]

Deploys the specified function-code package from an S3 Bucket to your AWS Lambda function, and optionally updates certain Lambda configuration parameters. Obviously, this means your function-code package must already be zipped in some S3 bucket to which you have permissions.

example CLI usage: grunt deploy_lambda_from_s3:default --aws-profile=default

NOTE: The "--aws-profile" option overries any options.awsProfile specified in your target configuration. Similarly, setting the environment variable AWS_PROFILE will override any specified "--aws-profile" option as well as any target configuration.

deploy_lambda_from_s3: Task Configuration

To properly configure this task, one must specify at least a default task configuration for the following configuration parameters:

  • bucket: string of the S3 bucket containing the desired package
  • packagePath: string of the path to the zipped package within S3 (ex: "myS3Packages/lambdaFunctionPackage.zip")
  • functionArn: string ARN (Amazon Resource Name) of the lambda function to be deployed
  • awsProfile (optional)*[^1]: string of the AWS Profile to use when performing deploy, matching some profile credential within your ~/.aws/credentials
  • lambdaConfigOptions (optional): object containing optional configuration parameters for the lambda function to be deployed. Unlike other configuration params, failing to specify these per configuration target will NOT result in defaults being used. In other words, these will NOT fall back to whatever default.lambdaConfigOptions you may have set. Your lambda's configuration will simply not be updated.

Below shows an example grunt configuration for two target configs: default (required) and alternate:

deploy_lambda_from_s3: {
    default: {
        packagePath: 'cf-tutorial_0-0-1_2018-4-11-12-53-4.zip',
        bucket: 'my-default-s3-bucket',
        functionArn: 'arn:aws:lambda:us-east-1:5555555:function:myDefaultLambda',
        lambdaConfigOptions: {
            memory: 128, // MB
            runtime: 'nodejs',
            timeout: 3, // seconds
            handler: 'index.handler',
            role: 'myExecutionRole'
        },
        options: {
            awsProfile: 'default'
        }
    },
    alternate: {
        packagePath: 'some/path/to/overriding_package.zip',
        bucket: 'takes-presedence-over-default-bucket',
        //functionArn: 'commented out--will fall back to default.functionArn',
        lambdaConfigOptions: {
            //memory: 256, commented out -- will NOT fall back to default.lambdaConfigOptions.memory
            runtime: 'nodejs4.3',
            timeout: 15,
        },
        options: {
            awsProfile: 'sandbox'
        }
    }
}

Task: update_lambda_environment:[targetConfiguration] [--aws-profile]

Enables you to update AWS Lambda functions' environment variables based on an external file (of optional complexity & dynamism). The external JS file itself MUST export 1 of 2 possible formats:

  1. A plain JavaScript object containing your desired environment key-val pairs. Nesting is allowed; nested object keys will be delimited rc-style with __ (e.g. outerObj_innerObjEnvKey)
  2. An array of functions (or Promises) where each function returns some key-value based object * These functions/Promises will be executed sequentially in the order they are defined within the array * The key-value objects returned from each function will be deeply-merged on top of previously-returned objects. This means that keys returned from later functions can potentially overwrite keys from previous functions * The object resulting from the final merge is the object that will be converted into your Lambda's environment variables * Similar to format #1, nested objects are allowed; these nested keys will be delimited rc-style with double underscores (__) Note that regardless of the format you choose, the inevitable objects that are returned must ONLY contain key-value string primitives; at this point in time AWS prohibits env variables in any other format.

example CLI usage: grunt update_lambda_environment:production --aws-profile=onaje

NOTE: The "--aws-profile" option overrides any options.awsProfile specified in your target configuration. Similarly, setting the environment variable AWS_PROFILE will override any specified "--aws-profile" option as well as any target configuration.

As of v0.5.0, you also have the option of preceding all your environment variables with some prefix envVariablePrefix. If not set, this task will not fall back to some default.envVariablePrefix; you simply wont have prefixes on your env variables.

update_lambda_environment: Task Configuration

To properly configure this task, one must specify at least a default task configuration for the following config parameters:

  • functionArn: string ARN (Amazon Resource Name) of the lambda function whose environment variables you wish you update
  • envFilePath: string of the absolute or tilde-aliased (~) path to the JavaScript file which generates your environment variables
  • envVariablePrefix (optional): string to precede all your environment variables. Not setting this for a target configuration will NOT fall back to default.envVariablePrefix
  • awsProfile[1] (optional)*: string of the AWS Profile to use when performing Lambda env updates, matching some profile credential within your ~/.aws/credentials

Below shows an example grunt configuration for two target configs: default (required) and alternate:

update_lambda_environment: {
    default: {
        functionArn: 'arn:aws:lambda:us-east-1:5555555:function:myDefaultLambda',
        envFilePath: '~/grunt-deploy-lambda/test/defaultEnv.js',
        envVariablePrefix: 'myApp_',
        options: {
            awsProfile: 'default'
        }
    },
    alternate: {
        functionArn: 'arn:aws:lambda:us-east-1:5555555:function:anotherLambda',
        //envFilePath: '../test/alternateEnv.js', commented out--will fall back to default.envFilePath
        envVariablePreifx: 'myOtherApp_',
        options: {
            awsProfile: 'sandbox'
        }
    }
}

Please feel free to take a look at the Gruntfile in my test directory for further explanation/commentary.

[1]:*awsProfile is an optional specificaiton per configuration; if not specified, it will default to whatever "default" profile credentials contianed in your local ~/.aws/credentials file.