3-deploying-a-serverless-application-on-aws-with-terraform-and-lambda.html

Deploying a Serverless Application on AWS with Terraform and Lambda

In today's fast-paced digital landscape, deploying applications quickly and efficiently is crucial. Serverless architecture has emerged as a popular solution, allowing developers to focus on code rather than server management. Amazon Web Services (AWS) offers a robust serverless platform, particularly with AWS Lambda. This article will guide you through deploying a serverless application using AWS Lambda and managing the infrastructure with Terraform.

What is Serverless Architecture?

Serverless architecture allows developers to build and run applications without having to manage the underlying infrastructure. This means you can focus solely on writing code, while the cloud provider handles resource allocation, scaling, and maintenance. AWS Lambda is a key service in this ecosystem, enabling you to run code in response to events without provisioning or managing servers.

Key Benefits of Serverless

  • Cost-Effective: You only pay for the compute time you consume.
  • Scalability: Automatically scales with the demand.
  • Reduced Operational Overhead: No server management means more time for development.

What is Terraform?

Terraform is an open-source infrastructure as code (IaC) tool developed by HashiCorp. It allows you to define your infrastructure using a high-level configuration language, making it easy to manage and version your infrastructure. With Terraform, you can create, update, and version your AWS resources consistently and predictably.

Use Cases for AWS Lambda

AWS Lambda is ideal for various applications, such as:

  • Data Processing: Real-time file processing or stream processing.
  • APIs: Building serverless RESTful APIs.
  • Automation: Triggering functions based on events (e.g., changes in S3 buckets).
  • Chatbots: Implementing conversational interfaces with minimal overhead.

Prerequisites

Before we dive into the code, ensure you have the following set up:

  1. AWS Account: Sign up for an AWS account if you don't have one.
  2. Terraform Installed: Download and install Terraform from the official website.
  3. AWS CLI Installed: Configure the AWS Command Line Interface (CLI) with your AWS credentials.
  4. Basic Knowledge of JSON: Familiarity with JSON to work with AWS Lambda functions.

Step-by-Step Instructions to Deploy a Serverless Application

Step 1: Create a Simple Lambda Function

Let’s start by creating a simple AWS Lambda function that returns a greeting message. Create a directory for your project and navigate into it:

mkdir serverless-app
cd serverless-app

Next, create a file called lambda_function.py:

import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from AWS Lambda!')
    }

Step 2: Define Terraform Configuration

Create a file named main.tf in the same directory. This file will contain your Terraform configuration.

provider "aws" {
  region = "us-east-1"
}

resource "aws_lambda_function" "hello_lambda" {
  function_name = "hello_lambda"
  runtime       = "python3.8"
  handler       = "lambda_function.lambda_handler"
  role          = aws_iam_role.lambda_exec.arn
  filename      = "lambda_function.zip"

  source_code_hash = filebase64sha256("lambda_function.zip")
}

resource "aws_iam_role" "lambda_exec" {
  name = "lambda_exec_role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Principal = {
          Service = "lambda.amazonaws.com"
        }
        Effect = "Allow"
        Sid    = ""
      },
    ]
  })
}

resource "aws_lambda_permission" "allow_api_gateway" {
  statement_id  = "AllowExecutionFromAPIGateway"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.hello_lambda.function_name
  principal     = "apigateway.amazonaws.com"
}

Step 3: Package the Lambda Function

Before deploying, you must package your Lambda function. Use the following command to create a zip file:

zip lambda_function.zip lambda_function.py

Step 4: Initialize and Deploy with Terraform

With your Terraform configuration and Lambda function packaged, it’s time to deploy. Run the following commands:

  1. Initialize Terraform:
terraform init
  1. Plan the Deployment:
terraform plan
  1. Apply the Configuration:
terraform apply

When prompted, type yes to confirm the deployment. Terraform will provision the resources defined in main.tf.

Step 5: Testing the Lambda Function

Once the deployment is complete, you can test your Lambda function from the AWS Management Console or using the AWS CLI. To invoke the function via the CLI, run:

aws lambda invoke --function-name hello_lambda output.txt

Check the output.txt file for the response, which should read:

{"statusCode": 200, "body": "\"Hello from AWS Lambda!\""}

Troubleshooting Common Issues

  • Permissions Errors: Ensure your IAM role has the necessary permissions to execute the Lambda function.
  • Timeouts: If your function takes too long to execute, consider increasing the timeout settings in your Terraform configuration.
  • Version Mismatches: Make sure your Lambda runtime in Terraform matches the version of Python you used in your code.

Conclusion

Deploying a serverless application on AWS using Terraform and Lambda simplifies the development process, allowing you to focus on writing code instead of managing infrastructure. By following this guide, you can quickly set up a basic serverless application, experiment with AWS Lambda, and leverage Terraform for efficient infrastructure management.

As you grow more comfortable with this stack, consider exploring additional AWS services like API Gateway, DynamoDB, and S3 to further expand your serverless architecture. Happy coding!

SR
Syed
Rizwan

About the Author

Syed Rizwan is a Machine Learning Engineer with 5 years of experience in AI, IoT, and Industrial Automation.