Skip to main content

A utility to streamline AWS Lambda function deployments

Project description

LambdaLift

LambdaLift is a utility designed to streamline the process of updating code for AWS Lambda functions.

It automates the entire deployment workflow: creating the zip archive, uploading the new version to S3, publishing a new Lambda version, and updating the function configuration.

LambdaLift also supports Lambda Layers and version pruning to keep your environment clean.

Motivation

When managing infrastructure as code (IaC) with tools like OpenTofu or Terraform, it is a best practice to separate infrastructure definitions from application code. This often means keeping them in separate repositories or lifecycles.

A common pattern is to:

  1. Define the Lambda infrastructure (memory, IAM roles, networking) in the IaC repository, deploying a placeholder "Hello World" function.
  2. Configure the IaC to ignore changes to the function code (lifecycle { ignore_changes = [source_code_hash] }).
  3. Manage the actual application logic in a separate repository with its own CI/CD pipeline.

While this decouples infrastructure from business logic, manually publishing new function versions can be tedious.

LambdaLift bridges this gap. It handles the specific AWS operations required to effectively and safely deploy a new version of your Lambda function code without re-running your entire infrastructure pipeline.

Installation

Install the package as a development dependency using your preferred package manager:

Node.js / JavaScript / TypeScript

# Using npm
npm install --save-dev lambda-lift

# Using pnpm
pnpm add -D lambda-lift

# Using yarn
yarn add -D lambda-lift

Python

pip install lambda-lift

The Python package will automatically use npx if Node.js is available, or download a standalone binary otherwise.

Go

go install github.com/marnautoupages/lambda-lift@latest

The Go wrapper will automatically use npx if Node.js is available, or download a standalone binary otherwise.

Standalone Binary

Download pre-built binaries for Linux, macOS, or Windows from the GitHub Releases page.

Usage

Run the deploy command to start the deployment process:

npx lambda-lift deploy [options] [variables]

Options

Option Description
-f, --config <path> Path to the configuration file. If omitted, LambdaLift searches up file tree.
-h, --help Show help information.

Environment Variables / Interpolation

You can pass user-defined variables to the command line to interpolate values in your configuration. This is useful for deploying to different environments (e.g., dev, staging, prod).

# Pass variables directly as arguments
npx lambda-lift deploy ENV=dev REGION=us-east-1

Alternatively, you can use environment variables prefixed with LAMBDA_LIFT_:

LAMBDA_LIFT_ENV=dev npx lambda-lift deploy

Configuration

LambdaLift supports configuration via JSON, YAML, or JavaScript files (using cosmiconfig). It looks for files like package.json (under a lambdalift key), .lambdarc, lambdalift.config.js, etc.

Example lambdalift.config.json:

{
  "name": "my-app-${ENV}-function",
  "region": "us-east-1",
  "s3": {
    "bucket": "my-app-${ENV}-deployments",
    "key": "lambdas/my-function/"
  },
  "prune": 5,
  "artifacts": ["dist/**", "!dist/**/*.map"],
  "layer": {
    "nodejs": ["node_modules/**", "package.json"]
  }
}

Configuration Reference

Property Type Required Default Description
name string Yes - The name of the Lambda function to update. Supports interpolation.
region string No AWS_REGION The AWS region where the function and S3 bucket are located. Defaults to your AWS environment configuration.
s3 object Yes - Configuration for the S3 bucket used for deployment artifacts.
s3.bucket string Yes - The name of the S3 bucket to upload code to.
s3.key string Yes - The prefix/path within the bucket where the zip file will be stored.
prune number No 3 The number of recent Lambda versions to keep. Older versions will be deleted after deployment.
artifacts string | string[] | object Yes - Defines which files to include in the function code. See Artifacts & Layers.
layers string | string[] | object No - Defines files to upload as a Lambda Layer. If omitted, layers are not updated. See Artifacts & Layers.

Artifacts & Layers

The artifacts and layers properties invoke the zipper to package your code. They support flexible definitions:

  1. Pre-built Zip: A string path ending in .zip. LambdaLift will upload this file directly.

    "artifacts": "./dist/function.zip"
    
  2. Globs: A glob string or an array of glob strings. Matching files are added to the root of the archive.

    "artifacts": ["src/**/*.js", "package.json"]
    
  3. Mapped Globs: An object where keys are the destination paths inside the zip, and values are globs.

    "artifacts": {
      ".": ["index.js"],
      "lib/": ["src/lib/**"]
    }
    

Interpolation Syntax

Use the syntax ${VAR_NAME} in your configuration strings to inject values dynamically.

For example, if you configure "name": "service-${STAGE}":

  1. Run npx lambda-lift deploy STAGE=prod.
  2. LambdaLift resolves the name to service-prod.

If a variable is missing, the deployment will fail with an error to prevent misconfiguration.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_lambda_lift-1.0.0rc4.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py_lambda_lift-1.0.0rc4-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file py_lambda_lift-1.0.0rc4.tar.gz.

File metadata

  • Download URL: py_lambda_lift-1.0.0rc4.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for py_lambda_lift-1.0.0rc4.tar.gz
Algorithm Hash digest
SHA256 0e67f467441beedb5b28bfb280f941e49b1d1f4f9f9554e7e618c8a758545fd9
MD5 31119a1aab2a0da7444f4b66687f2fe9
BLAKE2b-256 780e09c2e2c4081949cf912eccf8bf24531edcad14918a244281735dd6ca2733

See more details on using hashes here.

File details

Details for the file py_lambda_lift-1.0.0rc4-py3-none-any.whl.

File metadata

File hashes

Hashes for py_lambda_lift-1.0.0rc4-py3-none-any.whl
Algorithm Hash digest
SHA256 b67d3ca146d7c55797273b92ea3680ae0cdd0adb92c15184e6e5b8972b65f1c5
MD5 7054868a02732ccba5f92ccf0f8f02e8
BLAKE2b-256 fb72c0e1a6cdf9d109a815029f1e6efc8e599801a9bef77b344f2730890c0b37

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page