AWS Lambda Function Tutorial
AWS Lambda Function Tutorial
1. Basic Lambda Function
Example 1: Hello World Lambda
import json
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps('Hello from AWS Lambda!')
}
Explanation
Imports the JSON module to format responses.
import json
Defines the Lambda function entry point.
def lambda_handler(event, context):
Returns an HTTP response with a 200 status.
return {'statusCode': 200, 'body': json.dumps('Hello from AWS Lambda!')}
AWS automatically executes this function when triggered.
lambda_handler(event, context)
Example 2: Returning Event Data
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps(event)
}
Explanation
Receives an event from AWS services.
def lambda_handler(event, context):
Sends the event data back in the response.
'body': json.dumps(event)
Ensures the response is JSON formatted.
json.dumps(event)
Useful for debugging event structures.
return {...}
Example 3: Returning Custom Headers
def lambda_handler(event, context):
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'Custom headers added'})
}
Explanation
Adds a custom response header.
'headers': {'Content-Type': 'application/json'}
Returns a JSON response with custom data.
'body': json.dumps({'message': 'Custom headers added'})
Ensures proper HTTP status codes.
'statusCode': 200
Useful when integrating with REST APIs.
lambda_handler(event, context)
Example 4: Using Query Parameters
def lambda_handler(event, context):
name = event.get('queryStringParameters', {}).get('name', 'Guest')
return {
'statusCode': 200,
'body': json.dumps(f'Hello, {name}!')
}
Explanation
Extracts query parameters from the event.
name = event.get('queryStringParameters', {}).get('name', 'Guest')
Defaults to ‘Guest’ if no parameter is provided.
.get('name', 'Guest')
Returns a dynamic greeting message.
'body': json.dumps(f'Hello, {name}!')
Useful for API Gateway requests.
lambda_handler(event, context)
2. AWS Lambda with DynamoDB
Example 1: Insert Data into DynamoDB
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')
def lambda_handler(event, context):
table.put_item(Item={'UserID': event['UserID'], 'Name': event['Name']})
return {'statusCode': 200, 'body': 'User added'}
Explanation
Connects AWS Lambda to DynamoDB.
dynamodb = boto3.resource('dynamodb')
Gets reference to the Users table.
table = dynamodb.Table('Users')
Inserts user data into the table.
table.put_item(Item={'UserID': event['UserID'], 'Name': event['Name']})
Confirms successful insertion.
return {'statusCode': 200, 'body': 'User added'}
Example 2: Fetch Data from DynamoDB
def lambda_handler(event, context):
response = table.get_item(Key={'UserID': event['UserID']})
return {'statusCode': 200, 'body': json.dumps(response.get('Item', 'User not found'))}
Explanation
Fetches an item from DynamoDB using UserID.
response = table.get_item(Key={'UserID': event['UserID']})
Returns the retrieved item if it exists.
json.dumps(response.get('Item', 'User not found'))
Handles missing users gracefully.
response.get('Item', 'User not found')
Useful for API-based retrieval operations.
return {'statusCode': 200, 'body': ...}
Example 3: Update an Item in DynamoDB
def lambda_handler(event, context):
table.update_item(
Key={'UserID': event['UserID']},
UpdateExpression="set Name=:n",
ExpressionAttributeValues={':n': event['Name']}
)
return {'statusCode': 200, 'body': 'User updated'}
Explanation
Updates user data using an expression.
UpdateExpression="set Name=:n"
Uses ExpressionAttributeValues to avoid injection.
ExpressionAttributeValues={':n': event['Name']}
Ensures atomic updates without overwriting all fields.
table.update_item(...)
Confirms the update in response.
return {'statusCode': 200, 'body': 'User updated'}
Example 4: Delete a User from DynamoDB
def lambda_handler(event, context):
table.delete_item(Key={'UserID': event['UserID']})
return {'statusCode': 200, 'body': 'User deleted'}
Explanation
Deletes a user record from DynamoDB.
table.delete_item(Key={'UserID': event['UserID']})
Ensures efficient deletion using the primary key.
delete_item(Key={'UserID': event['UserID']})
Reduces storage usage by removing old records.
return {'statusCode': 200, 'body': 'User deleted'}
Useful for user account removals.
lambda_handler(event, context)
3. AWS Lambda with S3
Example 1: Upload File to S3
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
s3.upload_file('/tmp/sample.txt', 'my-bucket', 'sample.txt')
return {'statusCode': 200, 'body': 'File uploaded'}
Explanation
Creates an S3 client for interacting with AWS S3.
s3 = boto3.client('s3')
Uploads a file from Lambda to S3.
s3.upload_file('/tmp/sample.txt', 'my-bucket', 'sample.txt')
Uses ‘/tmp/’ for temporary Lambda storage.
'/tmp/sample.txt'
Returns a success message after upload.
return {'statusCode': 200, 'body': 'File uploaded'}
Example 2: Read File from S3
def lambda_handler(event, context):
obj = s3.get_object(Bucket='my-bucket', Key='sample.txt')
return {'statusCode': 200, 'body': obj['Body'].read().decode('utf-8')}
Explanation
Fetches a file from S3 storage.
s3.get_object(Bucket='my-bucket', Key='sample.txt')
Reads the file content into memory.
obj['Body'].read().decode('utf-8')
Decodes UTF-8 to make it human-readable.
.decode('utf-8')
Returns the file content as a response.
return {'statusCode': 200, 'body': ...}