Lambda Function and PDF Generation with S3 Bucket

Sujan TuladharSujan Tuladhar
4 min read

Introduction

Lambda functions in AWS provide serverless compute capabilities, allowing you to run your code without the need to provision or manage servers. In this article, we will explore how to create a Lambda function that generates a PDF using the ReportLab library and then saves it to an S3 bucket.

Setting up the Environment

Before we dive into creating the Lambda function, let's set up the necessary environment. Here are the steps:

  1. Install the required libraries: Install the boto3 and reportlab libraries using the package manager of your choice. For example, you can use pip by running the following commands:
pip install boto3
pip install reportlab
  1. Configure AWS credentials: Make sure you have your AWS credentials set up on your development machine. You can either set environment variables or use the AWS CLI to configure your credentials.

  2. Create an S3 bucket: Go to the AWS Management Console and create an S3 bucket where the generated PDF will be stored. Note down the bucket name for later use.

Creating a Lambda Function

Now, let's create a Lambda function that will generate the PDF. Follow these steps:

  1. Open your preferred Integrated Development Environment (IDE) or code editor.

  2. Create a new Python file and import the necessary modules:

import boto3
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import inch
from reportlab.pdfgen import canvas
import os
  1. Initialize the S3 client and retrieve the bucket name from environment variables:
s3 = boto3.client('s3')
bucket_name = os.environ.get('BUCKET_NAME')
  1. Define the Lambda handler function:
def lambda_handler(event, context):
    # create PDF canvas
    pdf_canvas = canvas.Canvas('hello.pdf', pagesize=letter)

    # add some text to the PDF
    pdf_canvas.drawString(1 * inch, 10 * inch, 'Hello, World!')

    # save the PDF to an S3 bucket
    pdf_data = pdf_canvas.getpdfdata()
    s3.put_object(Bucket=bucket_name, Key='lambdademo/generated_file.pdf', Body=pdf_data)

    return {
        'statusCode': 200,
        'body': 'PDF generated and saved to S3'
    }

Generating PDF with ReportLab

To generate the PDF, we will be using the ReportLab library. ReportLab is a powerful Python library that allows you to create complex PDF documents programmatically.

  1. Install the ReportLab library using pip:
pip install reportlab
  1. Import the necessary modules in your Lambda function code:
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import inch
from reportlab.pdfgen import canvas
  1. Within the Lambda handler function, create a PDF canvas using the desired page size:
pdf_canvas = canvas.Canvas('hello.pdf', pagesize=letter)
  1. Add content to the PDF canvas, such as text, images, or shapes. For example, let's add a simple "Hello, World!" text to the PDF:
pdf_canvas.drawString(1 * inch, 10 * inch, 'Hello, World!')
  1. Save the PDF canvas as a byte stream:
pdf_data = pdf_canvas
  1. Now we have the PDF data stored in the pdf_data variable. We can proceed to upload it to the S3 bucket.

Uploading PDF to an S3 Bucket To upload the generated PDF to an S3 bucket, follow these steps:

1. Import the boto3 module and initialize the S3 client:

import boto3

2. Retrieve the S3 bucket name from the environment variables or any other configuration method you prefer:

bucket_name = os.environ.get('BUCKET_NAME')

3. Use the S3 client to upload the PDF data to the bucket:

s3.put_object(Bucket=bucket_name, Key='lambdademo/generated_file.pdf', Body=pdf_data)

Here, Bucket is the name of the S3 bucket, Key is the file path and name within the bucket, and Body is the PDF data.

4. Make sure the Lambda function has the necessary permissions to access the S3 bucket. You can configure the IAM role associated with the Lambda function to have write access to the specific S3 bucket.

Testing the Lambda Function

Once you have implemented the Lambda function, it's essential to test it to ensure everything is functioning as expected. Here's how you can test the function:

  1. Use an event object to invoke the Lambda function. You can create a sample event with dummy data or use a test event from the AWS Lambda console.

  2. Verify the execution results and check if the PDF file is successfully generated and saved to the specified S3 bucket.

Conclusion

In this article, we explored how to create a Lambda function that generates a PDF using the ReportLab library and saves it to an S3 bucket. We covered the step-by-step process of setting up the environment, creating the Lambda function, generating the PDF using ReportLab, and uploading the PDF to an S3 bucket.

By leveraging the power of Lambda functions and AWS services like S3, you can automate the process of generating and storing PDF files, enabling seamless integration with other applications and systems.

0
Subscribe to my newsletter

Read articles from Sujan Tuladhar directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sujan Tuladhar
Sujan Tuladhar