Skip to main content

a command-line utility to deploy Python packages to Lambda functions

Project description

drover

drover: a command-line utility to deploy Python packages to AWS Lambda functions

circleci codecov pypi release pypi monthly downloads license

Background

This utility aims to provide a simple, repeatable, and efficient process for deploying a Python package as a Lambda.

To encourage separating infrequently changing Python dependencies in a separate "requirements" layer, by default drover requires a list of regular expressions to define which files to include in the Lambda function; all other files are placed in a requirements layer that is then attached to the Lambda function.

Next, drover generates and stores hashes for both the Lambda function and the requirements layer. This allows drover to avoid redundantly updating the Lambda function and/or requirements layer if no package contents have changed.

As much as possible, drover avoids altering existing infrastructure. Infrastructure utilities such as Terraform may be used to create a Lambda and manage its surrounding resources and drover may be used to update the Lambda function as well as its layers.

Supported Platforms

This utility is continuously unit tested on a GNU/Linux system with Python 3.6, 3.7, and 3.8.

Usage

Settings

The following drover.yml settings file demonstrates how to configure a staging stage that may be used to deploy a Python package to a Lambda named basic-lambda in the us-east-1 region:

stages:
  staging:
    region_name: us-east-1
    function_name: basic-lambda
    compatible_runtime: python3.8
    function_file_patterns:
      - '^basic_lambda.*'
    function_extra_paths:
      - instance
    upload_bucket:
      region_name: us-east-1
      bucket_name: drover-examples

The compatible_runtime value will be used to define the compatible runtime for both the requirements layer (if present) and the Lambda function.

While processing files from the install path (see: --install-path below), any files matching regular expressions defined in the function_file_patterns list will be included in the function; any remaining files will be included in the requirements layer.

The function_extra_paths list may contain additional paths to include in the function layer archive; non-absolute paths will be relative to the current working directory.

The upload_bucket map may provide a S3 Bucket name and its associated region for use when uploading Lambda function and layer archive files.

Command line interface

Assuming a Python package exists in the basic_lambda directory, the following commands demonstrate a simple Lambda deploy with drover:

pip install --target install basic_lambda
drover --install-path install staging

Assuming the Lambda is not already up to date, drover will attempt to upload the latest source and update the Lambda function:

Requirements digest: None
Function digest: 0b37cf78f6ad4c137fb1f77751c0c0e759dd2d6c515937d33fae435b9e091f72
Skipping requirements upload
Uploading function archive...
Failed to upload function archive to bucket; falling back to direct file upload.
Updating function resource...
Updated function "basic-lambda" resource; size: 1.78 KiB; ARN: arn:aws:lambda:us-east-1:977874552542:function:basic-lambda

Additional examples

For more examples, see the examples directory.

How to contribute

Contributions are welcome in the form of inquiries, issues, and pull requests.

Development Environment

Initialize a development environment by executing nox -s dev-3.8; the drover utility will be installed in the .nox/dev-3-8 Python virtual environment binary path.

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

drover-0.7.1.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

drover-0.7.1-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file drover-0.7.1.tar.gz.

File metadata

  • Download URL: drover-0.7.1.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.8.0 tqdm/4.45.0 CPython/3.8.2

File hashes

Hashes for drover-0.7.1.tar.gz
Algorithm Hash digest
SHA256 31000bd7d41e93ad19fddd68e342e793182ae51e02f7284b05cb22ea76aba442
MD5 b25e2b23f5f1c0f5028981332fb3fe4e
BLAKE2b-256 9b24fc69a01c4a13d20ef6af7319f3946f5aa6a02ca65fb25fc4ddbfcf830f3e

See more details on using hashes here.

File details

Details for the file drover-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: drover-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.8.0 tqdm/4.45.0 CPython/3.8.2

File hashes

Hashes for drover-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e7743122801e8f16470b378ddf27aa5d7967e496f8d8f32930e47c0b2e6fd060
MD5 d11381892ae1e8da875d21185faa66e7
BLAKE2b-256 77db003178f76f468b29ce7363f079366f1dbd6591e8fe6088c299eaa4250392

See more details on using hashes here.

Supported by

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