Buckets:
| name: aws-lambda | |
| description: >- | |
| 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. | |
| license: Apache-2.0 | |
| compatibility: '' | |
| metadata: | |
| author: terminal-skills | |
| version: 1.0.0 | |
| category: Cloud & Serverless | |
| tags: | |
| - serverless | |
| - aws | |
| - functions | |
| - api-gateway | |
| - event-driven | |
| - cloud | |
| # 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 | |
| ```typescript | |
| // 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" }) }; | |
| } | |
| }; | |
| ``` | |
| ```python | |
| # 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) | |
| ```yaml | |
| # 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 | |
| ``` | |
| ```bash | |
| # 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 | |
| ```bash | |
| # SAM CLI | |
| brew install aws-sam-cli | |
| # Or: pip install aws-sam-cli | |
| # AWS CLI | |
| brew install awscli | |
| aws configure # Set credentials | |
| ``` | |
| ## Best Practices | |
| 1. **Cold start optimization** — Minimize dependencies, use provisioned concurrency for latency-sensitive APIs, prefer arm64 (Graviton2) | |
| 2. **Environment variables** — Store config in env vars; use SSM Parameter Store or Secrets Manager for secrets | |
| 3. **Layers for shared code** — Package common dependencies (SDKs, utilities) as Lambda Layers; reduce deployment size | |
| 4. **Dead letter queues** — Configure DLQ on async invocations (SQS, SNS triggers); don't lose failed events | |
| 5. **Structured logging** — Use JSON logging with request ID; CloudWatch Insights can query structured logs | |
| 6. **Function URLs** — Use Lambda Function URLs for simple HTTP endpoints without API Gateway ($0 per invocation) | |
| 7. **Power tuning** — Use AWS Lambda Power Tuning to find optimal memory/cost ratio; more memory = faster CPU | |
| 8. **Container images** — Use container images for functions >250MB or with native dependencies; up to 10GB | |
Xet Storage Details
- Size:
- 6.38 kB
- Xet hash:
- 58e2ca5ac3e3d6cd1ae92e238ca464422956c32a88e8f4598fd730c327db5851
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.