> aws-lambda
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.
curl "https://skillshub.wtf/TerminalSkills/skills/aws-lambda?format=md"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
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zoho
Integrate and automate Zoho products. Use when a user asks to work with Zoho CRM, Zoho Books, Zoho Desk, Zoho Projects, Zoho Mail, or Zoho Creator, build custom integrations via Zoho APIs, automate workflows with Deluge scripting, sync data between Zoho apps and external systems, manage leads and deals, automate invoicing, build custom Zoho Creator apps, set up webhooks, or manage Zoho organization settings. Covers Zoho CRM, Books, Desk, Projects, Creator, and cross-product integrations.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> zipkin
Deploy and configure Zipkin for distributed tracing and request flow visualization. Use when a user needs to set up trace collection, instrument Java/Spring or other services with Zipkin, analyze service dependencies, or configure storage backends for trace data.