Skip to main content

AWS Lambda (Python) Packaging Methods

1. Package Creation

First, let's create deployment packages for deploying to Lambda.

Use poetry, a Python package management tool, to install the libraries already registered in serverless-backend-application-stack-python

[ec2-user ~]cd serverless-backend-application-stack-python/
[ec2-user ~]poetry install

The catalog AMI includes Shell Scripts (build-app.sh and build-layer.sh) that automatically create packages for you. When executed, deployment zip files are generated as follows.

# Execute Shell Script
./build-app.sh
  • .dist/app/sample-api/app.zip
  • .dist/app/sample-event/event.zip

2. Create Deployment Bucket

Create a dedicated bucket so that Lambda source code packages can be uploaded to S3 bucket and referenced from CloudFormation.

[ec2-user ~]ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)

[ec2-user ~]BUCKET_NAME="code-bucket-${ACCOUNT_ID}"

[ec2-user ~]aws s3api create-bucket \
--bucket $BUCKET_NAME \
--region us-east-1 \
--create-bucket-configuration LocationConstraint=<your region> #Add this option when creating outside us-east-1

3. Deploy Package and Upload to S3

Upload source code packages to the created bucket

[ec2-user ~]aws s3 cp .dist/app/sample_api/api.zip s3://$BUCKET_NAME
[ec2-user ~]aws s3 cp .dist/app/sample_event/event.zip s3://$BUCKET_NAME

4. Creating Lambda Layer

Since the libraries used will be deployed to Lambda Layer, please execute the following script. Lambda Layer will be created automatically.

# Execute Shell Script
./build-layer.sh

When you execute the shell script, two ARN responses are returned. When you try AWS CloudFormation deployment, you need to specify LayerVersionArn values like the following, so please make a note of them.

"LayerVersionArn": "arn:aws:lambda:us-east-1:<Account ID>:layer:psycopg3-layer:1"

"LayerVersionArn": "aws:lambda:us-east-1:<Account ID>:layer:python-lambda-application-template-lib-layer:1 "