Skip to main content

AWS Lambda Runtime Interface Client for Python

Project description

AWS Lambda Python Runtime Interface Client

We have open-sourced a set of software packages, Runtime Interface Clients (RIC), that implement the Lambda Runtime API, allowing you to seamlessly extend your preferred base images to be Lambda compatible. The Lambda Runtime Interface Client is a lightweight interface that allows your runtime to receive requests from and send requests to the Lambda service.

The Lambda Python Runtime Interface Client is vended through pip. You can include this package in your preferred base image to make that base image Lambda compatible.

Requirements

The Python Runtime Interface Client package currently supports Python versions:

  • 3.6.x up to and including 3.9.x

Usage

Creating a Docker Image for Lambda with the Runtime Interface Client

First step is to choose the base image to be used. The supported Linux OS distributions are:

  • Amazon Linux 2
  • Alpine
  • CentOS
  • Debian
  • Ubuntu

Then, the Runtime Interface Client needs to be installed. We provide both wheel and source distribution. If the OS/pip version used does not support manylinux2014 wheels, you will also need to install the required build dependencies. Also, your Lambda function code needs to be copied into the image.

# Include global arg in this stage of the build
ARG FUNCTION_DIR

# Install aws-lambda-cpp build dependencies
RUN apt-get update && \
  apt-get install -y \
  g++ \
  make \
  cmake \
  unzip \
  libcurl4-openssl-dev


# Create function directory
RUN mkdir -p ${FUNCTION_DIR}

# Copy handler function
COPY app/* ${FUNCTION_DIR}

# Install the function's dependencies
RUN pip install \
    --target ${FUNCTION_DIR} \
        awslambdaric

The next step would be to set the ENTRYPOINT property of the Docker image to invoke the Runtime Interface Client and then set the CMD argument to specify the desired handler.

Example Dockerfile (to keep the image light we use a multi-stage build):

# Define custom function directory
ARG FUNCTION_DIR="/function"

FROM python:buster as build-image

# Include global arg in this stage of the build
ARG FUNCTION_DIR

# Install aws-lambda-cpp build dependencies
RUN apt-get update && \
  apt-get install -y \
  g++ \
  make \
  cmake \
  unzip \
  libcurl4-openssl-dev


# Create function directory
RUN mkdir -p ${FUNCTION_DIR}

# Copy handler function
COPY app/* ${FUNCTION_DIR}

# Install the function's dependencies
RUN pip install \
    --target ${FUNCTION_DIR} \
        awslambdaric


FROM python:buster

# Include global arg in this stage of the build
ARG FUNCTION_DIR
# Set working directory to function root directory
WORKDIR ${FUNCTION_DIR}

# Copy in the built dependencies
COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR}

ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]
CMD [ "app.handler" ]

Example Python handler app.py:

def handler(event, context):
    return "Hello World!"

Local Testing

To make it easy to locally test Lambda functions packaged as container images we open-sourced a lightweight web-server, Lambda Runtime Interface Emulator (RIE), which allows your function packaged as a container image to accept HTTP requests. You can install the AWS Lambda Runtime Interface Emulator on your local machine to test your function. Then when you run the image function, you set the entrypoint to be the emulator.

To install the emulator and test your Lambda function

  1. From your project directory, run the following command to download the RIE from GitHub and install it on your local machine.
mkdir -p ~/.aws-lambda-rie && \
    curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \
    chmod +x ~/.aws-lambda-rie/aws-lambda-rie
  1. Run your Lambda image function using the docker run command.
docker run -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \
    --entrypoint /aws-lambda/aws-lambda-rie \
    myfunction:latest \
        /usr/local/bin/python -m awslambdaric app.handler

This runs the image as a container and starts up an endpoint locally at http://localhost:9000/2015-03-31/functions/function/invocations.

  1. Post an event to the following endpoint using a curl command:
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'.

This command invokes the function running in the container image and returns a response.

Alternately, you can also include RIE as a part of your base image. See the AWS documentation on how to Build RIE into your base image.

Development

Building the package

Clone this repository and run:

make init
make build

Running tests

Make sure the project is built:

make init build

Then,

  • to run unit tests: make test
  • to run integration tests: make test-integ
  • to run smoke tests: make test-smoke

Security

If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our vulnerability reporting page. Please do not create a public github issue.

License

This project is licensed under the Apache-2.0 License.

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

awslambdaric-1.0.0.tar.gz (3.2 MB view details)

Uploaded Source

Built Distributions

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

awslambdaric-1.0.0-cp39-cp39-manylinux2014_x86_64.whl (332.8 kB view details)

Uploaded CPython 3.9

awslambdaric-1.0.0-cp38-cp38-manylinux2014_x86_64.whl (333.0 kB view details)

Uploaded CPython 3.8

awslambdaric-1.0.0-cp37-cp37m-manylinux2014_x86_64.whl (333.6 kB view details)

Uploaded CPython 3.7m

awslambdaric-1.0.0-cp36-cp36m-manylinux2014_x86_64.whl (332.8 kB view details)

Uploaded CPython 3.6m

File details

Details for the file awslambdaric-1.0.0.tar.gz.

File metadata

  • Download URL: awslambdaric-1.0.0.tar.gz
  • Upload date:
  • Size: 3.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.7.6

File hashes

Hashes for awslambdaric-1.0.0.tar.gz
Algorithm Hash digest
SHA256 bdaab2cb0c5a869aad726a30521066e7cf4586048c67e46c0d11e14ecc2cf663
MD5 c7771ec6e160b5bdbcb90997bae1aefb
BLAKE2b-256 cf92d7eea924b01842cf23a7c90dad79c82071c09556fbbbe89767cadc687417

See more details on using hashes here.

File details

Details for the file awslambdaric-1.0.0-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

  • Download URL: awslambdaric-1.0.0-cp39-cp39-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 332.8 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.7.6

File hashes

Hashes for awslambdaric-1.0.0-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ee8e9053fbf64b6738ddd48df0e06e6f58f0ae8198f5b9b8e94acaf74b58de24
MD5 4b7bc7cf16856031e219bf85e866488e
BLAKE2b-256 90f70a556b548258d6015ae7e62d6746efe4b05db34243ebb0b020b43da4f5c5

See more details on using hashes here.

File details

Details for the file awslambdaric-1.0.0-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

  • Download URL: awslambdaric-1.0.0-cp38-cp38-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 333.0 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.7.6

File hashes

Hashes for awslambdaric-1.0.0-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e597cbac34088ec51447d62111113be7ec0e103174f80e30d3cbc342c6f93555
MD5 278b3f39b1ed0031d291ddf3c1a1e48f
BLAKE2b-256 c63cd7143c0f24a7826bbb7cfe7084cf759a3f998520d5972ae9645d69aa4e25

See more details on using hashes here.

File details

Details for the file awslambdaric-1.0.0-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: awslambdaric-1.0.0-cp37-cp37m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 333.6 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.7.6

File hashes

Hashes for awslambdaric-1.0.0-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c985b7f36dd648da7495020af32ab8fbbf6506b937b36788b6a939437633301f
MD5 2e9dae9191a483cfd8e902255f2e1f42
BLAKE2b-256 f39f24c6c094c2b83cb9aa98466bc881e2de91995ec18b218641d171141d9133

See more details on using hashes here.

File details

Details for the file awslambdaric-1.0.0-cp36-cp36m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: awslambdaric-1.0.0-cp36-cp36m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 332.8 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.7.6

File hashes

Hashes for awslambdaric-1.0.0-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6dc42311551b20aa9f6d100682cc9a0fa9394ac1978e5c29b434bbd91204932a
MD5 9edf297c789755e5cf0a9b2bf1cbe229
BLAKE2b-256 cde83ee4acad96ef3a3a52cdbb69427d6548623a6d8c7cc00d13825eee929ab7

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