🔍 Ctrl+K
🟢 Easy

Lambda — Serverless Compute

Serverless, no servers to manage, auto-scales, event-driven (S3, DynamoDB, Glue, CloudWatch) or time-based, stateless, supports Python/Node/Java/C#/Go. From file: mainly used for triggers.

🟡 Intermediate

Lambda Layers

Lambda Layers: Predefined packages (e.g., pandas layers) or custom packages via AWS CLI to use within Lambda.

🟡 Intermediate

Limitations

LimitValue
Timeout15 minutes
Memory10 GB
Deployment package50 MB (250 MB via S3)
Concurrency1000 per region (increasable)
Cold startLatency on first invoke
🟡 Intermediate

Boto3 — Invoke Lambda

Python
import boto3
lambda_client = boto3.client('s3', region_name='us-east-1')
response = lambda_client.invoke(
  FunctionName='my_lambda_function',
  InvocationType='RequestResponse'
)
print(response['Payload'].read().decode())
🔴 Advanced

Invoke Glue Job via Lambda

Python
import boto3, json
def lambda_handler(event, context):
    # event has S3 Records: bucket name and key
    bucketname = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    glue_client = boto3.client('glue', region_name='us-east-1')
    response = glue_client.start_job_run(
        JobName='my_glue_job',
        Arguments={'--arg1':'value1'}
    )
    return {'statusCode':200,'body': json.dumps('Glue job started')}

Event contains Records[0].s3.bucket.name and object.key. Context has function name, memory, remaining time, request ID.

🔴 Advanced

Invoke Glue Crawler via Lambda

Use boto3 to trigger a Glue crawler from a Lambda function. This is event-driven — when data lands in S3, the Lambda starts the crawler automatically.

Python
import json
import boto3

glue_client = boto3.client('glue')

def lambda_handler(event, context):
    crawler_name = 'landingbucket-crawler'
    print('event received: ', json.dumps(event))

    try:
        response = glue_client.start_crawler(Name=crawler_name)
        print('Crawler started successfully')
        return {
            'statusCode': 200,
            'body': json.dumps('Hello from Lambda!')
        }
    except glue_client.exceptions.CrawlerRunningException:
        print('Crawler is already running')
        return {
            'statusCode': 200,
            'body': json.dumps('Crawler is already running')
        }
    except Exception as e:
        print('Error starting crawler: ', str(e))
        return {
            'statusCode': 500,
            'body': json.dumps('Error starting crawler')
        }

The function handles three cases: success, crawler already running, and unexpected errors. Wire this with an S3 event notification (PUT event) to trigger automatically when files arrive.