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

# Copy function code
RUN mkdir -p ${FUNCTION_DIR}
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

# Copy function code
RUN mkdir -p ${FUNCTION_DIR}
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

Troubleshooting

While running integration tests, you might encounter the Docker Hub rate limit error with the following body:

You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits

To fix the above issue, consider authenticating to a Docker Hub account by setting the Docker Hub credentials as below CodeBuild environment variables.

DOCKERHUB_USERNAME=<dockerhub username>
DOCKERHUB_PASSWORD=<dockerhub password>

Recommended way is to set the Docker Hub credentials in CodeBuild job by retrieving them from AWS Secrets Manager.

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-2.0.0.tar.gz (8.5 MB view details)

Uploaded Source

Built Distributions

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

awslambdaric-2.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (261.2 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

awslambdaric-2.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (257.3 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

awslambdaric-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (335.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

awslambdaric-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (332.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

awslambdaric-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (335.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

awslambdaric-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (332.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

awslambdaric-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (335.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

awslambdaric-2.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (332.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

awslambdaric-2.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (335.9 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

awslambdaric-2.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (333.2 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

awslambdaric-2.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (334.9 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

awslambdaric-2.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (332.3 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ ARM64

File details

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

File metadata

  • Download URL: awslambdaric-2.0.0.tar.gz
  • Upload date:
  • Size: 8.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.5

File hashes

Hashes for awslambdaric-2.0.0.tar.gz
Algorithm Hash digest
SHA256 660b76057f59d25dfbb7d8f95a28ab89fc828552df9383273e39b5f37ba49ffd
MD5 7f8453cf69f9e35eca3f9ec3152448c6
BLAKE2b-256 f4e08158c703d53484cd9abdbe00ea205f37eae53c7a197a8a10133746c75558

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 17131e7ae09873bc8ff4b674600383763edadbe973fa293eb6de9f729bf506b5
MD5 79e7a6d85be1eaebcb5eaf59567162b2
BLAKE2b-256 90022516d1348d9d1a1609b4c74fafc07875b8795244e0285412078b590584cf

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8b5ce4959bbc817f26eb24cef2e0844e53b70723dbf6902c44d536518894549b
MD5 d207d9c44e38959332939abd17e02628
BLAKE2b-256 79d8f264cebc07d2c7da9d4404e22ecae07c302413e3b1b4e4b60a8c03f6f09b

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c6b569456c08ebbdfc822ada4dd8938a05472a9e513a4c4ee2838db678995e6a
MD5 1f2ff2ec42d6e6275dfb164e5b3f1683
BLAKE2b-256 b4e06ae99fd437f5d70e97bf08ec773fe9e3c08a27752fc700b95e79d930c353

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 127feedd76c3c06a97f6997b32916ce99c82f8b53bb9dd5d058883e754ed3333
MD5 967f5b9c88c2bcd6bd08fae0e87c316a
BLAKE2b-256 f88d2c6378f07103406b0cb22a53c8c50486905d12a2a71f6d857bccfaee2b27

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 75be564e7842363d66ecf834fb8535d21032851ac19f06300f72188c9a06f291
MD5 08fabe94d3413f67fc2dc9e3fd7f25b4
BLAKE2b-256 8d05152f60eaeb64fc4da03cd49f69301e9fcb00aad2b9a6cbb977565c494699

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 67c413081eba3bb478d39d97891e1d1e19f87d86eb4d7491862112ea9c0af97a
MD5 b66b7278a370f73594f39854acf52011
BLAKE2b-256 cda594982898965c87fa07c6d41a046d4bdc90a336761d75c2ec2a33127f7f19

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 07b8d955a491aa7a290c1c640aabbb0a8ed41f2f5ff2cb2b978ba86f5d4c32d7
MD5 4e98211214e283df1452473f4631cb08
BLAKE2b-256 49debda80c29715b6f7be45da5364a85c667e194fc2f6a950414be80e9447e6b

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e5ce740d7fdd9170fbcd222a35a79e767bdaeb831133fce28b08ac24db73a34a
MD5 da5b1d679b0781c4035fcb2d0647f3b3
BLAKE2b-256 9e51eedea081099a830a6700601e8f7f537488aa935e082269239152286b72c6

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a64c1ea7dcc9c7b2460e29332c475d291237969f864d5b5c24b731e1f28ae817
MD5 53c8481573238589a060f4f40369cbc7
BLAKE2b-256 373731ef1837dcb0bb487489f2cf72b9f4eaef64459a5c83423955b5f80a0b6d

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 53c2aea1605cb1e6de6c88b51feec64d276e08ec676b3659a8a4dc73c6ef9a87
MD5 d51794a8713b37d978fae08126f13029
BLAKE2b-256 6719a20afd117d6da63c737eb8168a82c60f96947747d1dc068c91c33702418f

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d662c59e4ec124d04b06d2996d68bd569ed00f520be9228fdda606cec3818203
MD5 cea63add18bbd01fe360325f9dc10946
BLAKE2b-256 f7be2abecd367e7c3fca0e4ab802207b4d9ef871881f49265b000a5d7ef002c9

See more details on using hashes here.

File details

Details for the file awslambdaric-2.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for awslambdaric-2.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ab4801b10abf51d4f85cedc2009ef2043fd07160d9338560e907481f1bad2d8c
MD5 38bef27d21a660ffe546117b5cda7782
BLAKE2b-256 c092007fa51779fc3fb4f3c5a0a91395a12a4d6d2b07f7d220687361d45ccf56

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