Skills aws-lambda
install
source · Clone the upstream repo
git clone https://github.com/TerminalSkills/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/TerminalSkills/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/aws-lambda" ~/.claude/skills/terminalskills-skills-aws-lambda && rm -rf "$T"
manifest:
skills/aws-lambda/SKILL.mdsafety · automated scan (low risk)
This is a pattern-based risk scan, not a security review. Our crawler flagged:
- pip install
Always read a skill's source content before installing. Patterns alone don't mean the skill is malicious — but they warrant attention.
source content
AWS Lambda — Serverless Functions
You are an expert in AWS Lambda, Amazon's serverless compute service. You help developers build event-driven applications using Lambda functions triggered by API Gateway, S3 events, SQS queues, DynamoDB streams, and scheduled events — with support for Node.js, Python, Go, Rust, Java, and container images, automatic scaling from zero to thousands of concurrent executions, and pay-per-invocation pricing.
Core Capabilities
Function Handlers
// handler.ts — API Gateway Lambda (Node.js/TypeScript) import { APIGatewayProxyHandlerV2 } from "aws-lambda"; export const handler: APIGatewayProxyHandlerV2 = async (event) => { const { httpMethod, pathParameters, body, queryStringParameters } = event; try { switch (httpMethod) { case "GET": { const id = pathParameters?.id; if (id) { const item = await db.get({ TableName: "users", Key: { id } }); return { statusCode: 200, body: JSON.stringify(item.Item) }; } const items = await db.scan({ TableName: "users" }); return { statusCode: 200, body: JSON.stringify(items.Items) }; } case "POST": { const data = JSON.parse(body || "{}"); await db.put({ TableName: "users", Item: { id: uuid(), ...data } }); return { statusCode: 201, body: JSON.stringify({ created: true }) }; } default: return { statusCode: 405, body: "Method not allowed" }; } } catch (error) { console.error(error); return { statusCode: 500, body: JSON.stringify({ error: "Internal error" }) }; } };
# handler.py — S3 event trigger (Python) import json import boto3 from PIL import Image import io s3 = boto3.client("s3") def handler(event, context): """Process uploaded images: resize and create thumbnails. Triggered by S3 PutObject events on the uploads/ prefix. """ for record in event["Records"]: bucket = record["s3"]["bucket"]["name"] key = record["s3"]["object"]["key"] # Download original response = s3.get_object(Bucket=bucket, Key=key) image = Image.open(io.BytesIO(response["Body"].read())) # Create thumbnail image.thumbnail((300, 300)) buffer = io.BytesIO() image.save(buffer, format="JPEG", quality=85) buffer.seek(0) # Upload thumbnail thumb_key = key.replace("uploads/", "thumbnails/") s3.put_object( Bucket=bucket, Key=thumb_key, Body=buffer, ContentType="image/jpeg", ) return {"statusCode": 200, "processed": len(event["Records"])}
Infrastructure as Code (SAM)
# template.yaml — AWS SAM template AWSTemplateFormatVersion: "2010-09-09" Transform: AWS::Serverless-2016-10-31 Globals: Function: Runtime: nodejs20.x Timeout: 30 MemorySize: 256 Environment: Variables: TABLE_NAME: !Ref UsersTable Resources: ApiFunction: Type: AWS::Serverless::Function Properties: Handler: dist/handler.handler Events: GetUsers: Type: Api Properties: Path: /users Method: get CreateUser: Type: Api Properties: Path: /users Method: post Policies: - DynamoDBCrudPolicy: TableName: !Ref UsersTable ImageProcessor: Type: AWS::Serverless::Function Properties: Handler: handler.handler Runtime: python3.12 MemorySize: 1024 Timeout: 60 Events: S3Upload: Type: S3 Properties: Bucket: !Ref UploadsBucket Events: s3:ObjectCreated:* Filter: S3Key: Rules: - Name: prefix Value: uploads/ Policies: - S3CrudPolicy: BucketName: !Ref UploadsBucket UsersTable: Type: AWS::DynamoDB::Table Properties: TableName: users BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: id KeyType: HASH UploadsBucket: Type: AWS::S3::Bucket
# Deploy with SAM sam build sam deploy --guided # First time sam deploy # Subsequent sam local start-api # Local development sam logs --tail --name ApiFunction # Stream logs
Installation
# SAM CLI brew install aws-sam-cli # Or: pip install aws-sam-cli # AWS CLI brew install awscli aws configure # Set credentials
Best Practices
- Cold start optimization — Minimize dependencies, use provisioned concurrency for latency-sensitive APIs, prefer arm64 (Graviton2)
- Environment variables — Store config in env vars; use SSM Parameter Store or Secrets Manager for secrets
- Layers for shared code — Package common dependencies (SDKs, utilities) as Lambda Layers; reduce deployment size
- Dead letter queues — Configure DLQ on async invocations (SQS, SNS triggers); don't lose failed events
- Structured logging — Use JSON logging with request ID; CloudWatch Insights can query structured logs
- Function URLs — Use Lambda Function URLs for simple HTTP endpoints without API Gateway ($0 per invocation)
- Power tuning — Use AWS Lambda Power Tuning to find optimal memory/cost ratio; more memory = faster CPU
- Container images — Use container images for functions >250MB or with native dependencies; up to 10GB