Containerize your Deployment of a Python app to AWS Lambda

Local Prerequisites #

Docker
python 3.6+ (3.8 will be used in this setup)

AWS Prerequisites #

AWS Access/Secret keys or AWS SSO
AWS ECR
AWS Lambda

Setup #

Make a local directory and set up local files

mkdir test-python-lambda && cd test-python-lambda
touch Dockerfile build.sh requirements.txt app.py
python -m venv venv
source venv/bin/activate

requirements #

Edit your requirements.txt with your dependencies. In my case, I’m including the lambda runtime / xray sdk, as well as boto3/botocore.

# requirements.txt
awslambdaric
aws_xray_sdk
boto3
botocore

docker #

Be sure docker is started, configure your Dockerfile

# Dockerfile
FROM public.ecr.aws/lambda/python:3.8

ENV PYTHONDONTWRITEBYTECODE 1

RUN pip install --upgrade pip
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY app.py ./
CMD ["app.handler"]

python app #

Configure your python app, using handler(...) as the entrypoint.

# app.py

import json

def some_function_that_does_something():
    return True

def handler(event, context):
   response = some_function_that_does_something()
    return {
        'statusCode': 200,
        'body': json.dumps('Hello World!')
    }

Set up ECR and a local build script #

See AWS guide to configure ECR - name it test-python-lambda.

After setup, copy out the docker push commands and configure a local build script you can call.

# build.sh
#!/bin/bash

aws ecr get-login-password --region us-east-1  | docker login --username AWS --password-stdin <your account id>.dkr.ecr.<your region>.amazonaws.com

docker build -t test-python-lambda .

docker tag test-python-lambda:latest <your account id>.dkr.ecr.<your region>.amazonaws.com/test-python-lambda:latest

docker push <your account id>.dkr.ecr.<your region>.amazonaws.com/test-python-lambda:latest

Note: If you’re using AWS SSO or a separate aws profile in ~/.aws/config, you can add --profile <your profile> if you want the aws ecr get-login-password command to utilize that profile.

Run the build, and configure Lambda to use this image #

chmod +x build.sh
./build.sh

If there weren’t any errors, you should be able to configure a new lambda with the container you deployed to ECR.

 
0
Kudos
 
0
Kudos

Now read this

Python Game Development - Pygame vs. Pyglet: Part 2

Here in part 2, you’ll find intermediate level snippet comparisons between Pygame and Pyglet If you missed it, check out Part 1. Display an image and text on the screen # Pygame # import pygame, sys, os running = True pygame.init()... Continue →