From Code to Cloud: Deploying Python Serverless Apps on AWS with Terraform


Introduction

Serverless computing is revolutionizing how developers build and scale applications. By abstracting away the server management layer, you can focus on code and business logic while letting cloud providers like AWS handle infrastructure. This guide walks you through deploying a Python serverless application using AWS Lambda, API Gateway, and Terraform—a powerful Infrastructure as Code (IaC) tool for automating cloud resource provisioning.


Why Go Serverless?

Serverless architectures offer:

  • Scalability: Automatically handle request spikes without manual intervention.

  • Cost-efficiency: Pay only for the compute you use.

  • Speed: Deploy code rapidly without provisioning servers.

With its rich ecosystem and rapid development capabilities, Python pairs excellently with serverless computing, particularly when combined with Terraform's declarative power.


Prerequisites

Before deploying, ensure you have:

  • An AWS account

  • Python 3.8 or higher

  • Terraform installed (v1.0+ recommended)

  • AWS CLI configured with appropriate permissions


Step 1: Build Your Python Lambda Application

Create a simple lambda_function.py:


def lambda_handler(event, context):

    return {

        'statusCode': 200,

        'body': 'Hello from AWS Lambda!'

    }


Bundle this into a ZIP file:


zip function.zip lambda_function.py



Step 2: Define Your Terraform Configuration

Create a main.tf file to define:

  • AWS Lambda Function

  • IAM role and policies

  • API Gateway setup

Example Terraform configuration:


provider "aws" {

  region = "us-east-1"

}


resource "aws_iam_role" "lambda_exec_role" {

  name = "lambda_exec_role"


  assume_role_policy = jsonencode({

    Version = "2012-10-17",

    Statement = [{

      Action = "sts:AssumeRole",

      Effect = "Allow",

      Principal = {

        Service = "lambda.amazonaws.com"

      }

    }]

  })

}


resource "aws_lambda_function" "python_lambda" {

  function_name = "python_serverless_app"

  filename      = "function.zip"

  handler       = "lambda_function.lambda_handler"

  source_code_hash = filebase64sha256("function.zip")

  runtime       = "python3.9"

  role          = aws_iam_role.lambda_exec_role.arn

}


resource "aws_apigatewayv2_api" "http_api" {

  name          = "http_api"

  protocol_type = "HTTP"

}


resource "aws_apigatewayv2_integration" "lambda_integration" {

  api_id           = aws_apigatewayv2_api.http_api.id

  integration_type = "AWS_PROXY"

  integration_uri  = aws_lambda_function.python_lambda.invoke_arn

}


resource "aws_apigatewayv2_route" "lambda_route" {

  api_id    = aws_apigatewayv2_api.http_api.id

  route_key = "GET /"

  target    = "integrations/${aws_apigatewayv2_integration.lambda_integration.id}"

}


resource "aws_apigatewayv2_stage" "default" {

  api_id      = aws_apigatewayv2_api.http_api.id

  name        = "$default"

  auto_deploy = true

}



Step 3: Deploy the App with Terraform

Initialize and deploy your infrastructure:


terraform init

terraform apply


After confirmation, Terraform will:

  • Create an IAM role

  • Upload and deploy the Lambda function.

  • Configure the API Gateway with an endpoint


Step 4: Test Your Deployment

Once deployed, Terraform will output the API Gateway endpoint. Use curl or your browser:


curl https://your-api-id.execute-api.us-east-1.amazonaws.com/


Expected output:


Hello from AWS Lambda!



Best Practices

  • Use Terraform modules to structure large projects.

  • Separate state files using workspaces or backends like S3.

  • Automate deployment with CI/CD pipelines.

  • Secure IAM roles using the principle of least privilege.


Conclusion

By combining Python, AWS Lambda, and Terraform, you can efficiently build, manage, and scale serverless applications. With minimal setup and robust automation, this stack is ideal for modern cloud-native development.


Comments

Popular posts from this blog

ECS Deployment Best Practices: Blue/Green with CodePipeline and CodeDeploy

Creating BI Solutions: AI/BI Genie Space Authoring Best Practices in Databricks

AWS Console Not Loading? Here’s How to Fix It Fast

YouTube Channel