[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-labs-lambda":3,"mdc-gvtx4w-key":37,"related-repo-aws-labs-lambda":1961,"related-org-aws-labs-lambda":2061},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"lambda","build and optimize AWS Lambda functions","Design, build, and optimize AWS Lambda functions. Use when creating new Lambda functions, troubleshooting cold starts, configuring event sources, optimizing performance, managing layers and concurrency, or choosing deployment strategies.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"aws-labs","AWS Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws-labs.png","awslabs",[13,17,20,23],{"name":14,"slug":15,"type":16},"Performance","performance","tag",{"name":18,"slug":19,"type":16},"Engineering","engineering",{"name":21,"slug":22,"type":16},"Serverless","serverless",{"name":24,"slug":25,"type":16},"AWS","aws",14,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fstartups","2026-07-12T08:40:30.668076",null,15,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Official AWS Startups repository that hosts plugins, skills, tools and resources to support startup builders on AWS","https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fstartups\u002Ftree\u002FHEAD\u002Fsolution-architecture\u002Fplugins\u002Faws-dev-toolkit\u002Fskills\u002Flambda","---\nname: lambda\ndescription: Design, build, and optimize AWS Lambda functions. Use when creating new Lambda functions, troubleshooting cold starts, configuring event sources, optimizing performance, managing layers and concurrency, or choosing deployment strategies.\n---\n\nYou are an AWS Lambda specialist. Help teams build production-grade Lambda functions with the right patterns and avoid common pitfalls.\n\n## Decision Framework: Runtime Selection\n\n| Runtime                     | Cold Start                  | Ecosystem                           | Best For                                  |\n| --------------------------- | --------------------------- | ----------------------------------- | ----------------------------------------- |\n| Python 3.12+                | ~200-400ms                  | Rich AWS SDK, data libs             | Glue scripts, APIs, data processing       |\n| Node.js 20+                 | ~150-300ms                  | Fast I\u002FO, large npm ecosystem       | APIs, real-time processing, event-driven  |\n| Java 21 (with SnapStart)    | ~200-500ms (with SnapStart) | Enterprise libraries, strong typing | Enterprise workloads, existing Java teams |\n| Java 21 (without SnapStart) | ~3-8s                       | Same                                | Avoid for latency-sensitive workloads     |\n| Rust (custom runtime)       | ~10-30ms                    | Minimal cold start, max performance | High-throughput, latency-critical         |\n| .NET 8 (AOT)                | ~200-400ms                  | Enterprise, C# ecosystem            | .NET shops, AOT compilation helps         |\n| Go (custom runtime)         | ~20-50ms                    | Simple deployment, fast             | CLI tools, high-perf event processing     |\n\n**Opinionated recommendation**: Default to Python or Node.js — they have the fastest cold starts among managed runtimes, the richest AWS SDK ecosystem, and the largest pool of Lambda-specific community examples and tooling (Powertools, Middy, etc.). Use Rust\u002FGo for performance-critical paths where you need sub-50ms cold starts and maximum throughput per dollar. Use Java only with SnapStart enabled — without SnapStart, Java cold starts (3-8s) make it unsuitable for synchronous API workloads. Avoid Ruby and .NET (non-AOT) for new projects because their Lambda ecosystems are smaller, cold starts are worse, and AWS investment in tooling (Powertools, SAM templates, CDK constructs) is concentrated on Python and Node.js.\n\n## SnapStart (Java Only)\n\nSnapStart eliminates Java cold starts by snapshotting the initialized execution environment after the init phase completes. This brings Java cold starts from 3-8s down to 200-500ms — comparable to Python\u002FNode.js. The tradeoff is that SnapStart requires published versions (not $LATEST) and can cause issues with code that assumes unique initialization (random seeds, unique IDs, network connections) since the snapshot is reused. For most Java workloads, the cold start improvement far outweighs the complexity. Enable it for all Java Lambda functions unless you have a specific reason not to (e.g., functions that open database connections during init that can't be restored from snapshot):\n\n```bash\naws lambda update-function-configuration \\\n  --function-name my-function \\\n  --snap-start ApplyOn=PublishedVersions\n\n# You MUST publish a version after enabling SnapStart\naws lambda publish-version --function-name my-function\n```\n\n**Gotcha**: SnapStart requires published versions. It does NOT work with $LATEST. Use aliases to point to the latest published version.\n\n## Cold Start Optimization\n\nPriority order for reducing cold starts:\n\n1. **Reduce package size**: Strip unused dependencies. Use bundlers (esbuild for Node.js, `--slim` for Python).\n2. **Enable SnapStart** (Java): Non-negotiable for Java Lambdas.\n3. **Provisioned Concurrency**: Only for strict latency SLAs (\u003C100ms p99). Costs money per hour.\n4. **Keep functions warm**: Anti-pattern. Use provisioned concurrency instead.\n5. **ARM64 (Graviton)**: 20% cheaper AND often faster cold starts. Always use `arm64` unless a dependency requires x86.\n\n```bash\n# Set provisioned concurrency on an alias\naws lambda put-provisioned-concurrency-config \\\n  --function-name my-function \\\n  --qualifier prod \\\n  --provisioned-concurrent-executions 5\n```\n\n## Powertools for AWS Lambda\n\nUse Powertools for any Lambda that runs in production. Without it, you end up hand-rolling structured logging, manual X-Ray segment creation, and custom CloudWatch metric publishing — all of which Powertools handles in a few decorators. The alternative is raw `print()` statements and unstructured logs, which make debugging production issues significantly harder because CloudWatch Logs Insights can't query unstructured text efficiently. Powertools also injects Lambda context (request ID, function name, cold start flag) into every log line automatically, which is critical for correlating logs across concurrent invocations. Available for Python and Node.js\u002FTypeScript.\n\nCore capabilities: structured logging with Lambda context injection, X-Ray tracing with annotations\u002Fmetadata, CloudWatch metrics, and cached parameter\u002Fsecret retrieval.\n\nSee `references\u002Fpowertools-patterns.md` for full code examples (Python and TypeScript), decorator usage, SAM\u002FCDK setup, and parameters\u002Fsecrets patterns.\n\n## Concurrency Model\n\n```\nAccount concurrency limit (default 1000 per region)\n  ├── Unreserved concurrency (shared pool)\n  ├── Reserved concurrency (function-level guarantee AND cap)\n  └── Provisioned concurrency (pre-initialized, subset of reserved)\n```\n\n- **Reserved concurrency**: Guarantees capacity AND limits max concurrency. Use to protect downstream services.\n- **Provisioned concurrency**: Pre-initialized environments. Eliminates cold starts. Costs ~$0.015\u002FGB-hour.\n\n```bash\n# Reserve concurrency (cap and guarantee)\naws lambda put-function-concurrency \\\n  --function-name my-function \\\n  --reserved-concurrent-executions 100\n\n# Check account-level concurrency\naws lambda get-account-settings --query 'AccountLimit'\n```\n\n## Event Source Mapping Patterns\n\nKey principles for all poll-based event sources (SQS, DynamoDB Streams, Kinesis):\n\n- **SQS**: Always enable `ReportBatchItemFailures` to avoid reprocessing entire batches on partial failures.\n- **DynamoDB Streams**: Always configure `bisect-batch-on-function-error`, `maximum-retry-attempts`, and a DLQ destination.\n- **Kinesis**: Use `parallelization-factor` (1-10) for concurrent batch processing per shard. Configure bisect and DLQ as with DynamoDB Streams.\n\nSee `references\u002Fevent-sources.md` for full CLI commands, SAM\u002FCDK templates, and patterns for SQS, DynamoDB Streams, Kinesis, API Gateway, S3, and EventBridge.\n\n## Lambda Layers\n\nUse layers for shared dependencies, NOT for shared code (use packages\u002Flibraries for that).\n\n```bash\n# Publish a layer\naws lambda publish-layer-version \\\n  --layer-name my-dependencies \\\n  --compatible-runtimes python3.12 \\\n  --zip-file fileb:\u002F\u002Flayer.zip\n\n# Add layer to function\naws lambda update-function-configuration \\\n  --function-name my-function \\\n  --layers arn:aws:lambda:us-east-1:123456789:layer:my-dependencies:1\n```\n\n**Opinionated**: Prefer bundling dependencies into the deployment package over layers. Layers seem convenient for sharing code, but they create hidden version coupling — when you update a layer, every function using it gets the new version on next deploy, which can break functions that weren't tested against the update. Layers also make local testing harder (you need to download\u002Fmount them) and make deployment packages non-self-contained (the function ZIP alone doesn't tell you what it depends on). Use layers only for: (1) shared binary dependencies that are large and rarely change (e.g., FFmpeg, Pandoc), (2) Powertools\u002Fcommon utilities used across 10+ functions where the version coupling is intentional, (3) Lambda Extensions.\n\n## Deployment Patterns\n\n- **SAM**: Recommended for Lambda-centric projects. Supports `sam local invoke` for local testing.\n- **CDK**: Recommended for complex infrastructure with multiple service integrations.\n- **Direct CLI**: For quick iterations during development.\n\nSee `references\u002Fevent-sources.md` for deployment commands and SAM\u002FCDK template examples.\n\n## Common CLI Commands\n\n```bash\n# Invoke a function\naws lambda invoke --function-name my-function --payload '{\"key\":\"value\"}' response.json\n\n# Tail logs in real time\naws logs tail \u002Faws\u002Flambda\u002Fmy-function --follow\n\n# Get function configuration\naws lambda get-function-configuration --function-name my-function\n\n# List event source mappings\naws lambda list-event-source-mappings --function-name my-function\n\n# View recent errors\naws logs filter-log-events \\\n  --log-group-name \u002Faws\u002Flambda\u002Fmy-function \\\n  --filter-pattern \"ERROR\" \\\n  --start-time $(date -d '1 hour ago' +%s000 2>\u002Fdev\u002Fnull || date -v-1H +%s000)\n\n# Check throttling\naws cloudwatch get-metric-statistics \\\n  --namespace AWS\u002FLambda \\\n  --metric-name Throttles \\\n  --dimensions Name=FunctionName,Value=my-function \\\n  --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%S 2>\u002Fdev\u002Fnull || date -u -v-1H +%Y-%m-%dT%H:%M:%S) \\\n  --end-time $(date -u +%Y-%m-%dT%H:%M:%S) \\\n  --period 300 --statistics Sum\n```\n\n## Anti-Patterns\n\n1. **Monolith Lambda**: One giant function handling all routes. Use separate functions per concern or API Gateway + Powertools event handler for REST APIs.\n2. **Lambda calling Lambda synchronously**: Creates tight coupling, double billing, and cascading failures. Use Step Functions, SQS, or EventBridge instead.\n3. **Storing state in \u002Ftmp**: The \u002Ftmp directory persists between warm invocations but is NOT guaranteed. Use DynamoDB, S3, or ElastiCache.\n4. **No DLQ on async invocations**: Failed async invocations are silently dropped after 2 retries. Always configure a DLQ or on-failure destination.\n5. **VPC Lambda without NAT or VPC endpoints**: Lambda in a VPC loses internet access. Add a NAT Gateway or VPC endpoints for AWS service calls.\n6. **Ignoring ARM64\u002FGraviton**: x86 is the default but ARM64 is 20% cheaper with equal or better performance for most workloads. Always specify `arm64`.\n7. **Oversized deployment packages**: Large packages increase cold starts. Keep packages small. Use layers for large shared binaries.\n8. **Hardcoded timeouts at function max**: Set function timeout to actual expected duration + buffer, not the max 15 minutes. Pair with API Gateway's 29s hard limit awareness.\n9. **No reserved concurrency on critical functions**: Without reserved concurrency, one runaway function can starve others by consuming the entire account limit.\n10. **Using environment variables for secrets**: Use AWS Secrets Manager or SSM Parameter Store (SecureString) with caching via Powertools Parameters.\n\n## Memory and Performance Tuning\n\nLambda CPU scales proportionally with memory. At 1,769 MB you get 1 full vCPU.\n\n```bash\n# Use AWS Lambda Power Tuning (Step Functions-based tool) to find optimal memory\n# https:\u002F\u002Fgithub.com\u002Falexcasalboni\u002Faws-lambda-power-tuning\n\n# Quick rule of thumb:\n# - I\u002FO bound (API calls, DB queries): 256-512 MB\n# - CPU bound (data processing, image manipulation): 1024-3008 MB\n# - Memory bound (large payloads, ML inference): 3008-10240 MB\n```\n\n**Always benchmark**. Increasing memory often REDUCES cost because the function finishes faster (you pay for GB-seconds).\n\n## Reference Files\n\n- `references\u002Fpowertools-patterns.md` -- Full Powertools code examples (Python and TypeScript), structured logging, tracing, parameters\u002Fsecrets, and SAM\u002FCDK setup.\n- `references\u002Fevent-sources.md` -- Event source mapping CLI commands, SAM\u002FCDK templates for SQS, DynamoDB Streams, Kinesis, API Gateway, S3, EventBridge, and deployment patterns.\n\n## Related Skills\n\n- `api-gateway` -- API Gateway configuration, routing, authorization, and Lambda integration patterns.\n- `dynamodb` -- Table design, access patterns, streams, and DynamoDB-Lambda integration.\n- `step-functions` -- Orchestrating Lambda functions with state machines instead of direct invocation chains.\n- `messaging` -- SQS, SNS, and EventBridge patterns for async Lambda triggers.\n- `observability` -- CloudWatch metrics, alarms, dashboards, and X-Ray tracing beyond Powertools.\n- `iam` -- Least-privilege execution roles, resource policies, and cross-account access for Lambda.\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,50,57,255,266,272,277,396,406,412,417,488,569,575,588,593,606,612,622,646,762,768,773,838,850,856,861,1008,1018,1024,1065,1076,1082,1652,1658,1768,1774,1779,1841,1851,1857,1880,1886,1955],{"type":43,"tag":44,"props":45,"children":46},"element","p",{},[47],{"type":48,"value":49},"text","You are an AWS Lambda specialist. Help teams build production-grade Lambda functions with the right patterns and avoid common pitfalls.",{"type":43,"tag":51,"props":52,"children":54},"h2",{"id":53},"decision-framework-runtime-selection",[55],{"type":48,"value":56},"Decision Framework: Runtime Selection",{"type":43,"tag":58,"props":59,"children":60},"table",{},[61,90],{"type":43,"tag":62,"props":63,"children":64},"thead",{},[65],{"type":43,"tag":66,"props":67,"children":68},"tr",{},[69,75,80,85],{"type":43,"tag":70,"props":71,"children":72},"th",{},[73],{"type":48,"value":74},"Runtime",{"type":43,"tag":70,"props":76,"children":77},{},[78],{"type":48,"value":79},"Cold Start",{"type":43,"tag":70,"props":81,"children":82},{},[83],{"type":48,"value":84},"Ecosystem",{"type":43,"tag":70,"props":86,"children":87},{},[88],{"type":48,"value":89},"Best For",{"type":43,"tag":91,"props":92,"children":93},"tbody",{},[94,118,141,164,187,210,232],{"type":43,"tag":66,"props":95,"children":96},{},[97,103,108,113],{"type":43,"tag":98,"props":99,"children":100},"td",{},[101],{"type":48,"value":102},"Python 3.12+",{"type":43,"tag":98,"props":104,"children":105},{},[106],{"type":48,"value":107},"~200-400ms",{"type":43,"tag":98,"props":109,"children":110},{},[111],{"type":48,"value":112},"Rich AWS SDK, data libs",{"type":43,"tag":98,"props":114,"children":115},{},[116],{"type":48,"value":117},"Glue scripts, APIs, data processing",{"type":43,"tag":66,"props":119,"children":120},{},[121,126,131,136],{"type":43,"tag":98,"props":122,"children":123},{},[124],{"type":48,"value":125},"Node.js 20+",{"type":43,"tag":98,"props":127,"children":128},{},[129],{"type":48,"value":130},"~150-300ms",{"type":43,"tag":98,"props":132,"children":133},{},[134],{"type":48,"value":135},"Fast I\u002FO, large npm ecosystem",{"type":43,"tag":98,"props":137,"children":138},{},[139],{"type":48,"value":140},"APIs, real-time processing, event-driven",{"type":43,"tag":66,"props":142,"children":143},{},[144,149,154,159],{"type":43,"tag":98,"props":145,"children":146},{},[147],{"type":48,"value":148},"Java 21 (with SnapStart)",{"type":43,"tag":98,"props":150,"children":151},{},[152],{"type":48,"value":153},"~200-500ms (with SnapStart)",{"type":43,"tag":98,"props":155,"children":156},{},[157],{"type":48,"value":158},"Enterprise libraries, strong typing",{"type":43,"tag":98,"props":160,"children":161},{},[162],{"type":48,"value":163},"Enterprise workloads, existing Java teams",{"type":43,"tag":66,"props":165,"children":166},{},[167,172,177,182],{"type":43,"tag":98,"props":168,"children":169},{},[170],{"type":48,"value":171},"Java 21 (without SnapStart)",{"type":43,"tag":98,"props":173,"children":174},{},[175],{"type":48,"value":176},"~3-8s",{"type":43,"tag":98,"props":178,"children":179},{},[180],{"type":48,"value":181},"Same",{"type":43,"tag":98,"props":183,"children":184},{},[185],{"type":48,"value":186},"Avoid for latency-sensitive workloads",{"type":43,"tag":66,"props":188,"children":189},{},[190,195,200,205],{"type":43,"tag":98,"props":191,"children":192},{},[193],{"type":48,"value":194},"Rust (custom runtime)",{"type":43,"tag":98,"props":196,"children":197},{},[198],{"type":48,"value":199},"~10-30ms",{"type":43,"tag":98,"props":201,"children":202},{},[203],{"type":48,"value":204},"Minimal cold start, max performance",{"type":43,"tag":98,"props":206,"children":207},{},[208],{"type":48,"value":209},"High-throughput, latency-critical",{"type":43,"tag":66,"props":211,"children":212},{},[213,218,222,227],{"type":43,"tag":98,"props":214,"children":215},{},[216],{"type":48,"value":217},".NET 8 (AOT)",{"type":43,"tag":98,"props":219,"children":220},{},[221],{"type":48,"value":107},{"type":43,"tag":98,"props":223,"children":224},{},[225],{"type":48,"value":226},"Enterprise, C# ecosystem",{"type":43,"tag":98,"props":228,"children":229},{},[230],{"type":48,"value":231},".NET shops, AOT compilation helps",{"type":43,"tag":66,"props":233,"children":234},{},[235,240,245,250],{"type":43,"tag":98,"props":236,"children":237},{},[238],{"type":48,"value":239},"Go (custom runtime)",{"type":43,"tag":98,"props":241,"children":242},{},[243],{"type":48,"value":244},"~20-50ms",{"type":43,"tag":98,"props":246,"children":247},{},[248],{"type":48,"value":249},"Simple deployment, fast",{"type":43,"tag":98,"props":251,"children":252},{},[253],{"type":48,"value":254},"CLI tools, high-perf event processing",{"type":43,"tag":44,"props":256,"children":257},{},[258,264],{"type":43,"tag":259,"props":260,"children":261},"strong",{},[262],{"type":48,"value":263},"Opinionated recommendation",{"type":48,"value":265},": Default to Python or Node.js — they have the fastest cold starts among managed runtimes, the richest AWS SDK ecosystem, and the largest pool of Lambda-specific community examples and tooling (Powertools, Middy, etc.). Use Rust\u002FGo for performance-critical paths where you need sub-50ms cold starts and maximum throughput per dollar. Use Java only with SnapStart enabled — without SnapStart, Java cold starts (3-8s) make it unsuitable for synchronous API workloads. Avoid Ruby and .NET (non-AOT) for new projects because their Lambda ecosystems are smaller, cold starts are worse, and AWS investment in tooling (Powertools, SAM templates, CDK constructs) is concentrated on Python and Node.js.",{"type":43,"tag":51,"props":267,"children":269},{"id":268},"snapstart-java-only",[270],{"type":48,"value":271},"SnapStart (Java Only)",{"type":43,"tag":44,"props":273,"children":274},{},[275],{"type":48,"value":276},"SnapStart eliminates Java cold starts by snapshotting the initialized execution environment after the init phase completes. This brings Java cold starts from 3-8s down to 200-500ms — comparable to Python\u002FNode.js. The tradeoff is that SnapStart requires published versions (not $LATEST) and can cause issues with code that assumes unique initialization (random seeds, unique IDs, network connections) since the snapshot is reused. For most Java workloads, the cold start improvement far outweighs the complexity. Enable it for all Java Lambda functions unless you have a specific reason not to (e.g., functions that open database connections during init that can't be restored from snapshot):",{"type":43,"tag":278,"props":279,"children":284},"pre",{"className":280,"code":281,"language":282,"meta":283,"style":283},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","aws lambda update-function-configuration \\\n  --function-name my-function \\\n  --snap-start ApplyOn=PublishedVersions\n\n# You MUST publish a version after enabling SnapStart\naws lambda publish-version --function-name my-function\n","bash","",[285],{"type":43,"tag":286,"props":287,"children":288},"code",{"__ignoreMap":283},[289,317,335,349,359,369],{"type":43,"tag":290,"props":291,"children":294},"span",{"class":292,"line":293},"line",1,[295,300,306,311],{"type":43,"tag":290,"props":296,"children":298},{"style":297},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[299],{"type":48,"value":25},{"type":43,"tag":290,"props":301,"children":303},{"style":302},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[304],{"type":48,"value":305}," lambda",{"type":43,"tag":290,"props":307,"children":308},{"style":302},[309],{"type":48,"value":310}," update-function-configuration",{"type":43,"tag":290,"props":312,"children":314},{"style":313},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[315],{"type":48,"value":316}," \\\n",{"type":43,"tag":290,"props":318,"children":320},{"class":292,"line":319},2,[321,326,331],{"type":43,"tag":290,"props":322,"children":323},{"style":302},[324],{"type":48,"value":325},"  --function-name",{"type":43,"tag":290,"props":327,"children":328},{"style":302},[329],{"type":48,"value":330}," my-function",{"type":43,"tag":290,"props":332,"children":333},{"style":313},[334],{"type":48,"value":316},{"type":43,"tag":290,"props":336,"children":338},{"class":292,"line":337},3,[339,344],{"type":43,"tag":290,"props":340,"children":341},{"style":302},[342],{"type":48,"value":343},"  --snap-start",{"type":43,"tag":290,"props":345,"children":346},{"style":302},[347],{"type":48,"value":348}," ApplyOn=PublishedVersions\n",{"type":43,"tag":290,"props":350,"children":352},{"class":292,"line":351},4,[353],{"type":43,"tag":290,"props":354,"children":356},{"emptyLinePlaceholder":355},true,[357],{"type":48,"value":358},"\n",{"type":43,"tag":290,"props":360,"children":362},{"class":292,"line":361},5,[363],{"type":43,"tag":290,"props":364,"children":366},{"style":365},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[367],{"type":48,"value":368},"# You MUST publish a version after enabling SnapStart\n",{"type":43,"tag":290,"props":370,"children":372},{"class":292,"line":371},6,[373,377,381,386,391],{"type":43,"tag":290,"props":374,"children":375},{"style":297},[376],{"type":48,"value":25},{"type":43,"tag":290,"props":378,"children":379},{"style":302},[380],{"type":48,"value":305},{"type":43,"tag":290,"props":382,"children":383},{"style":302},[384],{"type":48,"value":385}," publish-version",{"type":43,"tag":290,"props":387,"children":388},{"style":302},[389],{"type":48,"value":390}," --function-name",{"type":43,"tag":290,"props":392,"children":393},{"style":302},[394],{"type":48,"value":395}," my-function\n",{"type":43,"tag":44,"props":397,"children":398},{},[399,404],{"type":43,"tag":259,"props":400,"children":401},{},[402],{"type":48,"value":403},"Gotcha",{"type":48,"value":405},": SnapStart requires published versions. It does NOT work with $LATEST. Use aliases to point to the latest published version.",{"type":43,"tag":51,"props":407,"children":409},{"id":408},"cold-start-optimization",[410],{"type":48,"value":411},"Cold Start Optimization",{"type":43,"tag":44,"props":413,"children":414},{},[415],{"type":48,"value":416},"Priority order for reducing cold starts:",{"type":43,"tag":418,"props":419,"children":420},"ol",{},[421,440,450,460,470],{"type":43,"tag":422,"props":423,"children":424},"li",{},[425,430,432,438],{"type":43,"tag":259,"props":426,"children":427},{},[428],{"type":48,"value":429},"Reduce package size",{"type":48,"value":431},": Strip unused dependencies. Use bundlers (esbuild for Node.js, ",{"type":43,"tag":286,"props":433,"children":435},{"className":434},[],[436],{"type":48,"value":437},"--slim",{"type":48,"value":439}," for Python).",{"type":43,"tag":422,"props":441,"children":442},{},[443,448],{"type":43,"tag":259,"props":444,"children":445},{},[446],{"type":48,"value":447},"Enable SnapStart",{"type":48,"value":449}," (Java): Non-negotiable for Java Lambdas.",{"type":43,"tag":422,"props":451,"children":452},{},[453,458],{"type":43,"tag":259,"props":454,"children":455},{},[456],{"type":48,"value":457},"Provisioned Concurrency",{"type":48,"value":459},": Only for strict latency SLAs (\u003C100ms p99). Costs money per hour.",{"type":43,"tag":422,"props":461,"children":462},{},[463,468],{"type":43,"tag":259,"props":464,"children":465},{},[466],{"type":48,"value":467},"Keep functions warm",{"type":48,"value":469},": Anti-pattern. Use provisioned concurrency instead.",{"type":43,"tag":422,"props":471,"children":472},{},[473,478,480,486],{"type":43,"tag":259,"props":474,"children":475},{},[476],{"type":48,"value":477},"ARM64 (Graviton)",{"type":48,"value":479},": 20% cheaper AND often faster cold starts. Always use ",{"type":43,"tag":286,"props":481,"children":483},{"className":482},[],[484],{"type":48,"value":485},"arm64",{"type":48,"value":487}," unless a dependency requires x86.",{"type":43,"tag":278,"props":489,"children":491},{"className":280,"code":490,"language":282,"meta":283,"style":283},"# Set provisioned concurrency on an alias\naws lambda put-provisioned-concurrency-config \\\n  --function-name my-function \\\n  --qualifier prod \\\n  --provisioned-concurrent-executions 5\n",[492],{"type":43,"tag":286,"props":493,"children":494},{"__ignoreMap":283},[495,503,523,538,555],{"type":43,"tag":290,"props":496,"children":497},{"class":292,"line":293},[498],{"type":43,"tag":290,"props":499,"children":500},{"style":365},[501],{"type":48,"value":502},"# Set provisioned concurrency on an alias\n",{"type":43,"tag":290,"props":504,"children":505},{"class":292,"line":319},[506,510,514,519],{"type":43,"tag":290,"props":507,"children":508},{"style":297},[509],{"type":48,"value":25},{"type":43,"tag":290,"props":511,"children":512},{"style":302},[513],{"type":48,"value":305},{"type":43,"tag":290,"props":515,"children":516},{"style":302},[517],{"type":48,"value":518}," put-provisioned-concurrency-config",{"type":43,"tag":290,"props":520,"children":521},{"style":313},[522],{"type":48,"value":316},{"type":43,"tag":290,"props":524,"children":525},{"class":292,"line":337},[526,530,534],{"type":43,"tag":290,"props":527,"children":528},{"style":302},[529],{"type":48,"value":325},{"type":43,"tag":290,"props":531,"children":532},{"style":302},[533],{"type":48,"value":330},{"type":43,"tag":290,"props":535,"children":536},{"style":313},[537],{"type":48,"value":316},{"type":43,"tag":290,"props":539,"children":540},{"class":292,"line":351},[541,546,551],{"type":43,"tag":290,"props":542,"children":543},{"style":302},[544],{"type":48,"value":545},"  --qualifier",{"type":43,"tag":290,"props":547,"children":548},{"style":302},[549],{"type":48,"value":550}," prod",{"type":43,"tag":290,"props":552,"children":553},{"style":313},[554],{"type":48,"value":316},{"type":43,"tag":290,"props":556,"children":557},{"class":292,"line":361},[558,563],{"type":43,"tag":290,"props":559,"children":560},{"style":302},[561],{"type":48,"value":562},"  --provisioned-concurrent-executions",{"type":43,"tag":290,"props":564,"children":566},{"style":565},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[567],{"type":48,"value":568}," 5\n",{"type":43,"tag":51,"props":570,"children":572},{"id":571},"powertools-for-aws-lambda",[573],{"type":48,"value":574},"Powertools for AWS Lambda",{"type":43,"tag":44,"props":576,"children":577},{},[578,580,586],{"type":48,"value":579},"Use Powertools for any Lambda that runs in production. Without it, you end up hand-rolling structured logging, manual X-Ray segment creation, and custom CloudWatch metric publishing — all of which Powertools handles in a few decorators. The alternative is raw ",{"type":43,"tag":286,"props":581,"children":583},{"className":582},[],[584],{"type":48,"value":585},"print()",{"type":48,"value":587}," statements and unstructured logs, which make debugging production issues significantly harder because CloudWatch Logs Insights can't query unstructured text efficiently. Powertools also injects Lambda context (request ID, function name, cold start flag) into every log line automatically, which is critical for correlating logs across concurrent invocations. Available for Python and Node.js\u002FTypeScript.",{"type":43,"tag":44,"props":589,"children":590},{},[591],{"type":48,"value":592},"Core capabilities: structured logging with Lambda context injection, X-Ray tracing with annotations\u002Fmetadata, CloudWatch metrics, and cached parameter\u002Fsecret retrieval.",{"type":43,"tag":44,"props":594,"children":595},{},[596,598,604],{"type":48,"value":597},"See ",{"type":43,"tag":286,"props":599,"children":601},{"className":600},[],[602],{"type":48,"value":603},"references\u002Fpowertools-patterns.md",{"type":48,"value":605}," for full code examples (Python and TypeScript), decorator usage, SAM\u002FCDK setup, and parameters\u002Fsecrets patterns.",{"type":43,"tag":51,"props":607,"children":609},{"id":608},"concurrency-model",[610],{"type":48,"value":611},"Concurrency Model",{"type":43,"tag":278,"props":613,"children":617},{"className":614,"code":616,"language":48},[615],"language-text","Account concurrency limit (default 1000 per region)\n  ├── Unreserved concurrency (shared pool)\n  ├── Reserved concurrency (function-level guarantee AND cap)\n  └── Provisioned concurrency (pre-initialized, subset of reserved)\n",[618],{"type":43,"tag":286,"props":619,"children":620},{"__ignoreMap":283},[621],{"type":48,"value":616},{"type":43,"tag":623,"props":624,"children":625},"ul",{},[626,636],{"type":43,"tag":422,"props":627,"children":628},{},[629,634],{"type":43,"tag":259,"props":630,"children":631},{},[632],{"type":48,"value":633},"Reserved concurrency",{"type":48,"value":635},": Guarantees capacity AND limits max concurrency. Use to protect downstream services.",{"type":43,"tag":422,"props":637,"children":638},{},[639,644],{"type":43,"tag":259,"props":640,"children":641},{},[642],{"type":48,"value":643},"Provisioned concurrency",{"type":48,"value":645},": Pre-initialized environments. Eliminates cold starts. Costs ~$0.015\u002FGB-hour.",{"type":43,"tag":278,"props":647,"children":649},{"className":280,"code":648,"language":282,"meta":283,"style":283},"# Reserve concurrency (cap and guarantee)\naws lambda put-function-concurrency \\\n  --function-name my-function \\\n  --reserved-concurrent-executions 100\n\n# Check account-level concurrency\naws lambda get-account-settings --query 'AccountLimit'\n",[650],{"type":43,"tag":286,"props":651,"children":652},{"__ignoreMap":283},[653,661,681,696,709,716,724],{"type":43,"tag":290,"props":654,"children":655},{"class":292,"line":293},[656],{"type":43,"tag":290,"props":657,"children":658},{"style":365},[659],{"type":48,"value":660},"# Reserve concurrency (cap and guarantee)\n",{"type":43,"tag":290,"props":662,"children":663},{"class":292,"line":319},[664,668,672,677],{"type":43,"tag":290,"props":665,"children":666},{"style":297},[667],{"type":48,"value":25},{"type":43,"tag":290,"props":669,"children":670},{"style":302},[671],{"type":48,"value":305},{"type":43,"tag":290,"props":673,"children":674},{"style":302},[675],{"type":48,"value":676}," put-function-concurrency",{"type":43,"tag":290,"props":678,"children":679},{"style":313},[680],{"type":48,"value":316},{"type":43,"tag":290,"props":682,"children":683},{"class":292,"line":337},[684,688,692],{"type":43,"tag":290,"props":685,"children":686},{"style":302},[687],{"type":48,"value":325},{"type":43,"tag":290,"props":689,"children":690},{"style":302},[691],{"type":48,"value":330},{"type":43,"tag":290,"props":693,"children":694},{"style":313},[695],{"type":48,"value":316},{"type":43,"tag":290,"props":697,"children":698},{"class":292,"line":351},[699,704],{"type":43,"tag":290,"props":700,"children":701},{"style":302},[702],{"type":48,"value":703},"  --reserved-concurrent-executions",{"type":43,"tag":290,"props":705,"children":706},{"style":565},[707],{"type":48,"value":708}," 100\n",{"type":43,"tag":290,"props":710,"children":711},{"class":292,"line":361},[712],{"type":43,"tag":290,"props":713,"children":714},{"emptyLinePlaceholder":355},[715],{"type":48,"value":358},{"type":43,"tag":290,"props":717,"children":718},{"class":292,"line":371},[719],{"type":43,"tag":290,"props":720,"children":721},{"style":365},[722],{"type":48,"value":723},"# Check account-level concurrency\n",{"type":43,"tag":290,"props":725,"children":727},{"class":292,"line":726},7,[728,732,736,741,746,752,757],{"type":43,"tag":290,"props":729,"children":730},{"style":297},[731],{"type":48,"value":25},{"type":43,"tag":290,"props":733,"children":734},{"style":302},[735],{"type":48,"value":305},{"type":43,"tag":290,"props":737,"children":738},{"style":302},[739],{"type":48,"value":740}," get-account-settings",{"type":43,"tag":290,"props":742,"children":743},{"style":302},[744],{"type":48,"value":745}," --query",{"type":43,"tag":290,"props":747,"children":749},{"style":748},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[750],{"type":48,"value":751}," '",{"type":43,"tag":290,"props":753,"children":754},{"style":302},[755],{"type":48,"value":756},"AccountLimit",{"type":43,"tag":290,"props":758,"children":759},{"style":748},[760],{"type":48,"value":761},"'\n",{"type":43,"tag":51,"props":763,"children":765},{"id":764},"event-source-mapping-patterns",[766],{"type":48,"value":767},"Event Source Mapping Patterns",{"type":43,"tag":44,"props":769,"children":770},{},[771],{"type":48,"value":772},"Key principles for all poll-based event sources (SQS, DynamoDB Streams, Kinesis):",{"type":43,"tag":623,"props":774,"children":775},{},[776,794,820],{"type":43,"tag":422,"props":777,"children":778},{},[779,784,786,792],{"type":43,"tag":259,"props":780,"children":781},{},[782],{"type":48,"value":783},"SQS",{"type":48,"value":785},": Always enable ",{"type":43,"tag":286,"props":787,"children":789},{"className":788},[],[790],{"type":48,"value":791},"ReportBatchItemFailures",{"type":48,"value":793}," to avoid reprocessing entire batches on partial failures.",{"type":43,"tag":422,"props":795,"children":796},{},[797,802,804,810,812,818],{"type":43,"tag":259,"props":798,"children":799},{},[800],{"type":48,"value":801},"DynamoDB Streams",{"type":48,"value":803},": Always configure ",{"type":43,"tag":286,"props":805,"children":807},{"className":806},[],[808],{"type":48,"value":809},"bisect-batch-on-function-error",{"type":48,"value":811},", ",{"type":43,"tag":286,"props":813,"children":815},{"className":814},[],[816],{"type":48,"value":817},"maximum-retry-attempts",{"type":48,"value":819},", and a DLQ destination.",{"type":43,"tag":422,"props":821,"children":822},{},[823,828,830,836],{"type":43,"tag":259,"props":824,"children":825},{},[826],{"type":48,"value":827},"Kinesis",{"type":48,"value":829},": Use ",{"type":43,"tag":286,"props":831,"children":833},{"className":832},[],[834],{"type":48,"value":835},"parallelization-factor",{"type":48,"value":837}," (1-10) for concurrent batch processing per shard. Configure bisect and DLQ as with DynamoDB Streams.",{"type":43,"tag":44,"props":839,"children":840},{},[841,842,848],{"type":48,"value":597},{"type":43,"tag":286,"props":843,"children":845},{"className":844},[],[846],{"type":48,"value":847},"references\u002Fevent-sources.md",{"type":48,"value":849}," for full CLI commands, SAM\u002FCDK templates, and patterns for SQS, DynamoDB Streams, Kinesis, API Gateway, S3, and EventBridge.",{"type":43,"tag":51,"props":851,"children":853},{"id":852},"lambda-layers",[854],{"type":48,"value":855},"Lambda Layers",{"type":43,"tag":44,"props":857,"children":858},{},[859],{"type":48,"value":860},"Use layers for shared dependencies, NOT for shared code (use packages\u002Flibraries for that).",{"type":43,"tag":278,"props":862,"children":864},{"className":280,"code":863,"language":282,"meta":283,"style":283},"# Publish a layer\naws lambda publish-layer-version \\\n  --layer-name my-dependencies \\\n  --compatible-runtimes python3.12 \\\n  --zip-file fileb:\u002F\u002Flayer.zip\n\n# Add layer to function\naws lambda update-function-configuration \\\n  --function-name my-function \\\n  --layers arn:aws:lambda:us-east-1:123456789:layer:my-dependencies:1\n",[865],{"type":43,"tag":286,"props":866,"children":867},{"__ignoreMap":283},[868,876,896,913,930,943,950,958,978,994],{"type":43,"tag":290,"props":869,"children":870},{"class":292,"line":293},[871],{"type":43,"tag":290,"props":872,"children":873},{"style":365},[874],{"type":48,"value":875},"# Publish a layer\n",{"type":43,"tag":290,"props":877,"children":878},{"class":292,"line":319},[879,883,887,892],{"type":43,"tag":290,"props":880,"children":881},{"style":297},[882],{"type":48,"value":25},{"type":43,"tag":290,"props":884,"children":885},{"style":302},[886],{"type":48,"value":305},{"type":43,"tag":290,"props":888,"children":889},{"style":302},[890],{"type":48,"value":891}," publish-layer-version",{"type":43,"tag":290,"props":893,"children":894},{"style":313},[895],{"type":48,"value":316},{"type":43,"tag":290,"props":897,"children":898},{"class":292,"line":337},[899,904,909],{"type":43,"tag":290,"props":900,"children":901},{"style":302},[902],{"type":48,"value":903},"  --layer-name",{"type":43,"tag":290,"props":905,"children":906},{"style":302},[907],{"type":48,"value":908}," my-dependencies",{"type":43,"tag":290,"props":910,"children":911},{"style":313},[912],{"type":48,"value":316},{"type":43,"tag":290,"props":914,"children":915},{"class":292,"line":351},[916,921,926],{"type":43,"tag":290,"props":917,"children":918},{"style":302},[919],{"type":48,"value":920},"  --compatible-runtimes",{"type":43,"tag":290,"props":922,"children":923},{"style":302},[924],{"type":48,"value":925}," python3.12",{"type":43,"tag":290,"props":927,"children":928},{"style":313},[929],{"type":48,"value":316},{"type":43,"tag":290,"props":931,"children":932},{"class":292,"line":361},[933,938],{"type":43,"tag":290,"props":934,"children":935},{"style":302},[936],{"type":48,"value":937},"  --zip-file",{"type":43,"tag":290,"props":939,"children":940},{"style":302},[941],{"type":48,"value":942}," fileb:\u002F\u002Flayer.zip\n",{"type":43,"tag":290,"props":944,"children":945},{"class":292,"line":371},[946],{"type":43,"tag":290,"props":947,"children":948},{"emptyLinePlaceholder":355},[949],{"type":48,"value":358},{"type":43,"tag":290,"props":951,"children":952},{"class":292,"line":726},[953],{"type":43,"tag":290,"props":954,"children":955},{"style":365},[956],{"type":48,"value":957},"# Add layer to function\n",{"type":43,"tag":290,"props":959,"children":961},{"class":292,"line":960},8,[962,966,970,974],{"type":43,"tag":290,"props":963,"children":964},{"style":297},[965],{"type":48,"value":25},{"type":43,"tag":290,"props":967,"children":968},{"style":302},[969],{"type":48,"value":305},{"type":43,"tag":290,"props":971,"children":972},{"style":302},[973],{"type":48,"value":310},{"type":43,"tag":290,"props":975,"children":976},{"style":313},[977],{"type":48,"value":316},{"type":43,"tag":290,"props":979,"children":981},{"class":292,"line":980},9,[982,986,990],{"type":43,"tag":290,"props":983,"children":984},{"style":302},[985],{"type":48,"value":325},{"type":43,"tag":290,"props":987,"children":988},{"style":302},[989],{"type":48,"value":330},{"type":43,"tag":290,"props":991,"children":992},{"style":313},[993],{"type":48,"value":316},{"type":43,"tag":290,"props":995,"children":997},{"class":292,"line":996},10,[998,1003],{"type":43,"tag":290,"props":999,"children":1000},{"style":302},[1001],{"type":48,"value":1002},"  --layers",{"type":43,"tag":290,"props":1004,"children":1005},{"style":302},[1006],{"type":48,"value":1007}," arn:aws:lambda:us-east-1:123456789:layer:my-dependencies:1\n",{"type":43,"tag":44,"props":1009,"children":1010},{},[1011,1016],{"type":43,"tag":259,"props":1012,"children":1013},{},[1014],{"type":48,"value":1015},"Opinionated",{"type":48,"value":1017},": Prefer bundling dependencies into the deployment package over layers. Layers seem convenient for sharing code, but they create hidden version coupling — when you update a layer, every function using it gets the new version on next deploy, which can break functions that weren't tested against the update. Layers also make local testing harder (you need to download\u002Fmount them) and make deployment packages non-self-contained (the function ZIP alone doesn't tell you what it depends on). Use layers only for: (1) shared binary dependencies that are large and rarely change (e.g., FFmpeg, Pandoc), (2) Powertools\u002Fcommon utilities used across 10+ functions where the version coupling is intentional, (3) Lambda Extensions.",{"type":43,"tag":51,"props":1019,"children":1021},{"id":1020},"deployment-patterns",[1022],{"type":48,"value":1023},"Deployment Patterns",{"type":43,"tag":623,"props":1025,"children":1026},{},[1027,1045,1055],{"type":43,"tag":422,"props":1028,"children":1029},{},[1030,1035,1037,1043],{"type":43,"tag":259,"props":1031,"children":1032},{},[1033],{"type":48,"value":1034},"SAM",{"type":48,"value":1036},": Recommended for Lambda-centric projects. Supports ",{"type":43,"tag":286,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":48,"value":1042},"sam local invoke",{"type":48,"value":1044}," for local testing.",{"type":43,"tag":422,"props":1046,"children":1047},{},[1048,1053],{"type":43,"tag":259,"props":1049,"children":1050},{},[1051],{"type":48,"value":1052},"CDK",{"type":48,"value":1054},": Recommended for complex infrastructure with multiple service integrations.",{"type":43,"tag":422,"props":1056,"children":1057},{},[1058,1063],{"type":43,"tag":259,"props":1059,"children":1060},{},[1061],{"type":48,"value":1062},"Direct CLI",{"type":48,"value":1064},": For quick iterations during development.",{"type":43,"tag":44,"props":1066,"children":1067},{},[1068,1069,1074],{"type":48,"value":597},{"type":43,"tag":286,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":48,"value":847},{"type":48,"value":1075}," for deployment commands and SAM\u002FCDK template examples.",{"type":43,"tag":51,"props":1077,"children":1079},{"id":1078},"common-cli-commands",[1080],{"type":48,"value":1081},"Common CLI Commands",{"type":43,"tag":278,"props":1083,"children":1085},{"className":280,"code":1084,"language":282,"meta":283,"style":283},"# Invoke a function\naws lambda invoke --function-name my-function --payload '{\"key\":\"value\"}' response.json\n\n# Tail logs in real time\naws logs tail \u002Faws\u002Flambda\u002Fmy-function --follow\n\n# Get function configuration\naws lambda get-function-configuration --function-name my-function\n\n# List event source mappings\naws lambda list-event-source-mappings --function-name my-function\n\n# View recent errors\naws logs filter-log-events \\\n  --log-group-name \u002Faws\u002Flambda\u002Fmy-function \\\n  --filter-pattern \"ERROR\" \\\n  --start-time $(date -d '1 hour ago' +%s000 2>\u002Fdev\u002Fnull || date -v-1H +%s000)\n\n# Check throttling\naws cloudwatch get-metric-statistics \\\n  --namespace AWS\u002FLambda \\\n  --metric-name Throttles \\\n  --dimensions Name=FunctionName,Value=my-function \\\n  --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%S 2>\u002Fdev\u002Fnull || date -u -v-1H +%Y-%m-%dT%H:%M:%S) \\\n  --end-time $(date -u +%Y-%m-%dT%H:%M:%S) \\\n  --period 300 --statistics Sum\n",[1086],{"type":43,"tag":286,"props":1087,"children":1088},{"__ignoreMap":283},[1089,1097,1145,1152,1160,1187,1194,1202,1226,1233,1241,1266,1274,1283,1303,1319,1347,1423,1431,1440,1462,1480,1498,1516,1595,1628],{"type":43,"tag":290,"props":1090,"children":1091},{"class":292,"line":293},[1092],{"type":43,"tag":290,"props":1093,"children":1094},{"style":365},[1095],{"type":48,"value":1096},"# Invoke a function\n",{"type":43,"tag":290,"props":1098,"children":1099},{"class":292,"line":319},[1100,1104,1108,1113,1117,1121,1126,1130,1135,1140],{"type":43,"tag":290,"props":1101,"children":1102},{"style":297},[1103],{"type":48,"value":25},{"type":43,"tag":290,"props":1105,"children":1106},{"style":302},[1107],{"type":48,"value":305},{"type":43,"tag":290,"props":1109,"children":1110},{"style":302},[1111],{"type":48,"value":1112}," invoke",{"type":43,"tag":290,"props":1114,"children":1115},{"style":302},[1116],{"type":48,"value":390},{"type":43,"tag":290,"props":1118,"children":1119},{"style":302},[1120],{"type":48,"value":330},{"type":43,"tag":290,"props":1122,"children":1123},{"style":302},[1124],{"type":48,"value":1125}," --payload",{"type":43,"tag":290,"props":1127,"children":1128},{"style":748},[1129],{"type":48,"value":751},{"type":43,"tag":290,"props":1131,"children":1132},{"style":302},[1133],{"type":48,"value":1134},"{\"key\":\"value\"}",{"type":43,"tag":290,"props":1136,"children":1137},{"style":748},[1138],{"type":48,"value":1139},"'",{"type":43,"tag":290,"props":1141,"children":1142},{"style":302},[1143],{"type":48,"value":1144}," response.json\n",{"type":43,"tag":290,"props":1146,"children":1147},{"class":292,"line":337},[1148],{"type":43,"tag":290,"props":1149,"children":1150},{"emptyLinePlaceholder":355},[1151],{"type":48,"value":358},{"type":43,"tag":290,"props":1153,"children":1154},{"class":292,"line":351},[1155],{"type":43,"tag":290,"props":1156,"children":1157},{"style":365},[1158],{"type":48,"value":1159},"# Tail logs in real time\n",{"type":43,"tag":290,"props":1161,"children":1162},{"class":292,"line":361},[1163,1167,1172,1177,1182],{"type":43,"tag":290,"props":1164,"children":1165},{"style":297},[1166],{"type":48,"value":25},{"type":43,"tag":290,"props":1168,"children":1169},{"style":302},[1170],{"type":48,"value":1171}," logs",{"type":43,"tag":290,"props":1173,"children":1174},{"style":302},[1175],{"type":48,"value":1176}," tail",{"type":43,"tag":290,"props":1178,"children":1179},{"style":302},[1180],{"type":48,"value":1181}," \u002Faws\u002Flambda\u002Fmy-function",{"type":43,"tag":290,"props":1183,"children":1184},{"style":302},[1185],{"type":48,"value":1186}," --follow\n",{"type":43,"tag":290,"props":1188,"children":1189},{"class":292,"line":371},[1190],{"type":43,"tag":290,"props":1191,"children":1192},{"emptyLinePlaceholder":355},[1193],{"type":48,"value":358},{"type":43,"tag":290,"props":1195,"children":1196},{"class":292,"line":726},[1197],{"type":43,"tag":290,"props":1198,"children":1199},{"style":365},[1200],{"type":48,"value":1201},"# Get function configuration\n",{"type":43,"tag":290,"props":1203,"children":1204},{"class":292,"line":960},[1205,1209,1213,1218,1222],{"type":43,"tag":290,"props":1206,"children":1207},{"style":297},[1208],{"type":48,"value":25},{"type":43,"tag":290,"props":1210,"children":1211},{"style":302},[1212],{"type":48,"value":305},{"type":43,"tag":290,"props":1214,"children":1215},{"style":302},[1216],{"type":48,"value":1217}," get-function-configuration",{"type":43,"tag":290,"props":1219,"children":1220},{"style":302},[1221],{"type":48,"value":390},{"type":43,"tag":290,"props":1223,"children":1224},{"style":302},[1225],{"type":48,"value":395},{"type":43,"tag":290,"props":1227,"children":1228},{"class":292,"line":980},[1229],{"type":43,"tag":290,"props":1230,"children":1231},{"emptyLinePlaceholder":355},[1232],{"type":48,"value":358},{"type":43,"tag":290,"props":1234,"children":1235},{"class":292,"line":996},[1236],{"type":43,"tag":290,"props":1237,"children":1238},{"style":365},[1239],{"type":48,"value":1240},"# List event source mappings\n",{"type":43,"tag":290,"props":1242,"children":1244},{"class":292,"line":1243},11,[1245,1249,1253,1258,1262],{"type":43,"tag":290,"props":1246,"children":1247},{"style":297},[1248],{"type":48,"value":25},{"type":43,"tag":290,"props":1250,"children":1251},{"style":302},[1252],{"type":48,"value":305},{"type":43,"tag":290,"props":1254,"children":1255},{"style":302},[1256],{"type":48,"value":1257}," list-event-source-mappings",{"type":43,"tag":290,"props":1259,"children":1260},{"style":302},[1261],{"type":48,"value":390},{"type":43,"tag":290,"props":1263,"children":1264},{"style":302},[1265],{"type":48,"value":395},{"type":43,"tag":290,"props":1267,"children":1269},{"class":292,"line":1268},12,[1270],{"type":43,"tag":290,"props":1271,"children":1272},{"emptyLinePlaceholder":355},[1273],{"type":48,"value":358},{"type":43,"tag":290,"props":1275,"children":1277},{"class":292,"line":1276},13,[1278],{"type":43,"tag":290,"props":1279,"children":1280},{"style":365},[1281],{"type":48,"value":1282},"# View recent errors\n",{"type":43,"tag":290,"props":1284,"children":1285},{"class":292,"line":26},[1286,1290,1294,1299],{"type":43,"tag":290,"props":1287,"children":1288},{"style":297},[1289],{"type":48,"value":25},{"type":43,"tag":290,"props":1291,"children":1292},{"style":302},[1293],{"type":48,"value":1171},{"type":43,"tag":290,"props":1295,"children":1296},{"style":302},[1297],{"type":48,"value":1298}," filter-log-events",{"type":43,"tag":290,"props":1300,"children":1301},{"style":313},[1302],{"type":48,"value":316},{"type":43,"tag":290,"props":1304,"children":1305},{"class":292,"line":30},[1306,1311,1315],{"type":43,"tag":290,"props":1307,"children":1308},{"style":302},[1309],{"type":48,"value":1310},"  --log-group-name",{"type":43,"tag":290,"props":1312,"children":1313},{"style":302},[1314],{"type":48,"value":1181},{"type":43,"tag":290,"props":1316,"children":1317},{"style":313},[1318],{"type":48,"value":316},{"type":43,"tag":290,"props":1320,"children":1322},{"class":292,"line":1321},16,[1323,1328,1333,1338,1343],{"type":43,"tag":290,"props":1324,"children":1325},{"style":302},[1326],{"type":48,"value":1327},"  --filter-pattern",{"type":43,"tag":290,"props":1329,"children":1330},{"style":748},[1331],{"type":48,"value":1332}," \"",{"type":43,"tag":290,"props":1334,"children":1335},{"style":302},[1336],{"type":48,"value":1337},"ERROR",{"type":43,"tag":290,"props":1339,"children":1340},{"style":748},[1341],{"type":48,"value":1342},"\"",{"type":43,"tag":290,"props":1344,"children":1345},{"style":313},[1346],{"type":48,"value":316},{"type":43,"tag":290,"props":1348,"children":1350},{"class":292,"line":1349},17,[1351,1356,1361,1366,1371,1375,1380,1384,1389,1394,1399,1404,1409,1414,1418],{"type":43,"tag":290,"props":1352,"children":1353},{"style":302},[1354],{"type":48,"value":1355},"  --start-time",{"type":43,"tag":290,"props":1357,"children":1358},{"style":748},[1359],{"type":48,"value":1360}," $(",{"type":43,"tag":290,"props":1362,"children":1363},{"style":297},[1364],{"type":48,"value":1365},"date",{"type":43,"tag":290,"props":1367,"children":1368},{"style":302},[1369],{"type":48,"value":1370}," -d",{"type":43,"tag":290,"props":1372,"children":1373},{"style":748},[1374],{"type":48,"value":751},{"type":43,"tag":290,"props":1376,"children":1377},{"style":302},[1378],{"type":48,"value":1379},"1 hour ago",{"type":43,"tag":290,"props":1381,"children":1382},{"style":748},[1383],{"type":48,"value":1139},{"type":43,"tag":290,"props":1385,"children":1386},{"style":302},[1387],{"type":48,"value":1388}," +%s000",{"type":43,"tag":290,"props":1390,"children":1391},{"style":748},[1392],{"type":48,"value":1393}," 2>",{"type":43,"tag":290,"props":1395,"children":1396},{"style":302},[1397],{"type":48,"value":1398},"\u002Fdev\u002Fnull",{"type":43,"tag":290,"props":1400,"children":1401},{"style":748},[1402],{"type":48,"value":1403}," ||",{"type":43,"tag":290,"props":1405,"children":1406},{"style":297},[1407],{"type":48,"value":1408}," date",{"type":43,"tag":290,"props":1410,"children":1411},{"style":302},[1412],{"type":48,"value":1413}," -v-1H",{"type":43,"tag":290,"props":1415,"children":1416},{"style":302},[1417],{"type":48,"value":1388},{"type":43,"tag":290,"props":1419,"children":1420},{"style":748},[1421],{"type":48,"value":1422},")\n",{"type":43,"tag":290,"props":1424,"children":1426},{"class":292,"line":1425},18,[1427],{"type":43,"tag":290,"props":1428,"children":1429},{"emptyLinePlaceholder":355},[1430],{"type":48,"value":358},{"type":43,"tag":290,"props":1432,"children":1434},{"class":292,"line":1433},19,[1435],{"type":43,"tag":290,"props":1436,"children":1437},{"style":365},[1438],{"type":48,"value":1439},"# Check throttling\n",{"type":43,"tag":290,"props":1441,"children":1443},{"class":292,"line":1442},20,[1444,1448,1453,1458],{"type":43,"tag":290,"props":1445,"children":1446},{"style":297},[1447],{"type":48,"value":25},{"type":43,"tag":290,"props":1449,"children":1450},{"style":302},[1451],{"type":48,"value":1452}," cloudwatch",{"type":43,"tag":290,"props":1454,"children":1455},{"style":302},[1456],{"type":48,"value":1457}," get-metric-statistics",{"type":43,"tag":290,"props":1459,"children":1460},{"style":313},[1461],{"type":48,"value":316},{"type":43,"tag":290,"props":1463,"children":1465},{"class":292,"line":1464},21,[1466,1471,1476],{"type":43,"tag":290,"props":1467,"children":1468},{"style":302},[1469],{"type":48,"value":1470},"  --namespace",{"type":43,"tag":290,"props":1472,"children":1473},{"style":302},[1474],{"type":48,"value":1475}," AWS\u002FLambda",{"type":43,"tag":290,"props":1477,"children":1478},{"style":313},[1479],{"type":48,"value":316},{"type":43,"tag":290,"props":1481,"children":1483},{"class":292,"line":1482},22,[1484,1489,1494],{"type":43,"tag":290,"props":1485,"children":1486},{"style":302},[1487],{"type":48,"value":1488},"  --metric-name",{"type":43,"tag":290,"props":1490,"children":1491},{"style":302},[1492],{"type":48,"value":1493}," Throttles",{"type":43,"tag":290,"props":1495,"children":1496},{"style":313},[1497],{"type":48,"value":316},{"type":43,"tag":290,"props":1499,"children":1501},{"class":292,"line":1500},23,[1502,1507,1512],{"type":43,"tag":290,"props":1503,"children":1504},{"style":302},[1505],{"type":48,"value":1506},"  --dimensions",{"type":43,"tag":290,"props":1508,"children":1509},{"style":302},[1510],{"type":48,"value":1511}," Name=FunctionName,Value=my-function",{"type":43,"tag":290,"props":1513,"children":1514},{"style":313},[1515],{"type":48,"value":316},{"type":43,"tag":290,"props":1517,"children":1519},{"class":292,"line":1518},24,[1520,1524,1528,1532,1537,1541,1545,1549,1553,1558,1562,1566,1570,1574,1578,1582,1586,1591],{"type":43,"tag":290,"props":1521,"children":1522},{"style":302},[1523],{"type":48,"value":1355},{"type":43,"tag":290,"props":1525,"children":1526},{"style":748},[1527],{"type":48,"value":1360},{"type":43,"tag":290,"props":1529,"children":1530},{"style":297},[1531],{"type":48,"value":1365},{"type":43,"tag":290,"props":1533,"children":1534},{"style":302},[1535],{"type":48,"value":1536}," -u",{"type":43,"tag":290,"props":1538,"children":1539},{"style":302},[1540],{"type":48,"value":1370},{"type":43,"tag":290,"props":1542,"children":1543},{"style":748},[1544],{"type":48,"value":751},{"type":43,"tag":290,"props":1546,"children":1547},{"style":302},[1548],{"type":48,"value":1379},{"type":43,"tag":290,"props":1550,"children":1551},{"style":748},[1552],{"type":48,"value":1139},{"type":43,"tag":290,"props":1554,"children":1555},{"style":302},[1556],{"type":48,"value":1557}," +%Y-%m-%dT%H:%M:%S",{"type":43,"tag":290,"props":1559,"children":1560},{"style":748},[1561],{"type":48,"value":1393},{"type":43,"tag":290,"props":1563,"children":1564},{"style":302},[1565],{"type":48,"value":1398},{"type":43,"tag":290,"props":1567,"children":1568},{"style":748},[1569],{"type":48,"value":1403},{"type":43,"tag":290,"props":1571,"children":1572},{"style":297},[1573],{"type":48,"value":1408},{"type":43,"tag":290,"props":1575,"children":1576},{"style":302},[1577],{"type":48,"value":1536},{"type":43,"tag":290,"props":1579,"children":1580},{"style":302},[1581],{"type":48,"value":1413},{"type":43,"tag":290,"props":1583,"children":1584},{"style":302},[1585],{"type":48,"value":1557},{"type":43,"tag":290,"props":1587,"children":1588},{"style":748},[1589],{"type":48,"value":1590},")",{"type":43,"tag":290,"props":1592,"children":1593},{"style":313},[1594],{"type":48,"value":316},{"type":43,"tag":290,"props":1596,"children":1598},{"class":292,"line":1597},25,[1599,1604,1608,1612,1616,1620,1624],{"type":43,"tag":290,"props":1600,"children":1601},{"style":302},[1602],{"type":48,"value":1603},"  --end-time",{"type":43,"tag":290,"props":1605,"children":1606},{"style":748},[1607],{"type":48,"value":1360},{"type":43,"tag":290,"props":1609,"children":1610},{"style":297},[1611],{"type":48,"value":1365},{"type":43,"tag":290,"props":1613,"children":1614},{"style":302},[1615],{"type":48,"value":1536},{"type":43,"tag":290,"props":1617,"children":1618},{"style":302},[1619],{"type":48,"value":1557},{"type":43,"tag":290,"props":1621,"children":1622},{"style":748},[1623],{"type":48,"value":1590},{"type":43,"tag":290,"props":1625,"children":1626},{"style":313},[1627],{"type":48,"value":316},{"type":43,"tag":290,"props":1629,"children":1631},{"class":292,"line":1630},26,[1632,1637,1642,1647],{"type":43,"tag":290,"props":1633,"children":1634},{"style":302},[1635],{"type":48,"value":1636},"  --period",{"type":43,"tag":290,"props":1638,"children":1639},{"style":565},[1640],{"type":48,"value":1641}," 300",{"type":43,"tag":290,"props":1643,"children":1644},{"style":302},[1645],{"type":48,"value":1646}," --statistics",{"type":43,"tag":290,"props":1648,"children":1649},{"style":302},[1650],{"type":48,"value":1651}," Sum\n",{"type":43,"tag":51,"props":1653,"children":1655},{"id":1654},"anti-patterns",[1656],{"type":48,"value":1657},"Anti-Patterns",{"type":43,"tag":418,"props":1659,"children":1660},{},[1661,1671,1681,1691,1701,1711,1728,1738,1748,1758],{"type":43,"tag":422,"props":1662,"children":1663},{},[1664,1669],{"type":43,"tag":259,"props":1665,"children":1666},{},[1667],{"type":48,"value":1668},"Monolith Lambda",{"type":48,"value":1670},": One giant function handling all routes. Use separate functions per concern or API Gateway + Powertools event handler for REST APIs.",{"type":43,"tag":422,"props":1672,"children":1673},{},[1674,1679],{"type":43,"tag":259,"props":1675,"children":1676},{},[1677],{"type":48,"value":1678},"Lambda calling Lambda synchronously",{"type":48,"value":1680},": Creates tight coupling, double billing, and cascading failures. Use Step Functions, SQS, or EventBridge instead.",{"type":43,"tag":422,"props":1682,"children":1683},{},[1684,1689],{"type":43,"tag":259,"props":1685,"children":1686},{},[1687],{"type":48,"value":1688},"Storing state in \u002Ftmp",{"type":48,"value":1690},": The \u002Ftmp directory persists between warm invocations but is NOT guaranteed. Use DynamoDB, S3, or ElastiCache.",{"type":43,"tag":422,"props":1692,"children":1693},{},[1694,1699],{"type":43,"tag":259,"props":1695,"children":1696},{},[1697],{"type":48,"value":1698},"No DLQ on async invocations",{"type":48,"value":1700},": Failed async invocations are silently dropped after 2 retries. Always configure a DLQ or on-failure destination.",{"type":43,"tag":422,"props":1702,"children":1703},{},[1704,1709],{"type":43,"tag":259,"props":1705,"children":1706},{},[1707],{"type":48,"value":1708},"VPC Lambda without NAT or VPC endpoints",{"type":48,"value":1710},": Lambda in a VPC loses internet access. Add a NAT Gateway or VPC endpoints for AWS service calls.",{"type":43,"tag":422,"props":1712,"children":1713},{},[1714,1719,1721,1726],{"type":43,"tag":259,"props":1715,"children":1716},{},[1717],{"type":48,"value":1718},"Ignoring ARM64\u002FGraviton",{"type":48,"value":1720},": x86 is the default but ARM64 is 20% cheaper with equal or better performance for most workloads. Always specify ",{"type":43,"tag":286,"props":1722,"children":1724},{"className":1723},[],[1725],{"type":48,"value":485},{"type":48,"value":1727},".",{"type":43,"tag":422,"props":1729,"children":1730},{},[1731,1736],{"type":43,"tag":259,"props":1732,"children":1733},{},[1734],{"type":48,"value":1735},"Oversized deployment packages",{"type":48,"value":1737},": Large packages increase cold starts. Keep packages small. Use layers for large shared binaries.",{"type":43,"tag":422,"props":1739,"children":1740},{},[1741,1746],{"type":43,"tag":259,"props":1742,"children":1743},{},[1744],{"type":48,"value":1745},"Hardcoded timeouts at function max",{"type":48,"value":1747},": Set function timeout to actual expected duration + buffer, not the max 15 minutes. Pair with API Gateway's 29s hard limit awareness.",{"type":43,"tag":422,"props":1749,"children":1750},{},[1751,1756],{"type":43,"tag":259,"props":1752,"children":1753},{},[1754],{"type":48,"value":1755},"No reserved concurrency on critical functions",{"type":48,"value":1757},": Without reserved concurrency, one runaway function can starve others by consuming the entire account limit.",{"type":43,"tag":422,"props":1759,"children":1760},{},[1761,1766],{"type":43,"tag":259,"props":1762,"children":1763},{},[1764],{"type":48,"value":1765},"Using environment variables for secrets",{"type":48,"value":1767},": Use AWS Secrets Manager or SSM Parameter Store (SecureString) with caching via Powertools Parameters.",{"type":43,"tag":51,"props":1769,"children":1771},{"id":1770},"memory-and-performance-tuning",[1772],{"type":48,"value":1773},"Memory and Performance Tuning",{"type":43,"tag":44,"props":1775,"children":1776},{},[1777],{"type":48,"value":1778},"Lambda CPU scales proportionally with memory. At 1,769 MB you get 1 full vCPU.",{"type":43,"tag":278,"props":1780,"children":1782},{"className":280,"code":1781,"language":282,"meta":283,"style":283},"# Use AWS Lambda Power Tuning (Step Functions-based tool) to find optimal memory\n# https:\u002F\u002Fgithub.com\u002Falexcasalboni\u002Faws-lambda-power-tuning\n\n# Quick rule of thumb:\n# - I\u002FO bound (API calls, DB queries): 256-512 MB\n# - CPU bound (data processing, image manipulation): 1024-3008 MB\n# - Memory bound (large payloads, ML inference): 3008-10240 MB\n",[1783],{"type":43,"tag":286,"props":1784,"children":1785},{"__ignoreMap":283},[1786,1794,1802,1809,1817,1825,1833],{"type":43,"tag":290,"props":1787,"children":1788},{"class":292,"line":293},[1789],{"type":43,"tag":290,"props":1790,"children":1791},{"style":365},[1792],{"type":48,"value":1793},"# Use AWS Lambda Power Tuning (Step Functions-based tool) to find optimal memory\n",{"type":43,"tag":290,"props":1795,"children":1796},{"class":292,"line":319},[1797],{"type":43,"tag":290,"props":1798,"children":1799},{"style":365},[1800],{"type":48,"value":1801},"# https:\u002F\u002Fgithub.com\u002Falexcasalboni\u002Faws-lambda-power-tuning\n",{"type":43,"tag":290,"props":1803,"children":1804},{"class":292,"line":337},[1805],{"type":43,"tag":290,"props":1806,"children":1807},{"emptyLinePlaceholder":355},[1808],{"type":48,"value":358},{"type":43,"tag":290,"props":1810,"children":1811},{"class":292,"line":351},[1812],{"type":43,"tag":290,"props":1813,"children":1814},{"style":365},[1815],{"type":48,"value":1816},"# Quick rule of thumb:\n",{"type":43,"tag":290,"props":1818,"children":1819},{"class":292,"line":361},[1820],{"type":43,"tag":290,"props":1821,"children":1822},{"style":365},[1823],{"type":48,"value":1824},"# - I\u002FO bound (API calls, DB queries): 256-512 MB\n",{"type":43,"tag":290,"props":1826,"children":1827},{"class":292,"line":371},[1828],{"type":43,"tag":290,"props":1829,"children":1830},{"style":365},[1831],{"type":48,"value":1832},"# - CPU bound (data processing, image manipulation): 1024-3008 MB\n",{"type":43,"tag":290,"props":1834,"children":1835},{"class":292,"line":726},[1836],{"type":43,"tag":290,"props":1837,"children":1838},{"style":365},[1839],{"type":48,"value":1840},"# - Memory bound (large payloads, ML inference): 3008-10240 MB\n",{"type":43,"tag":44,"props":1842,"children":1843},{},[1844,1849],{"type":43,"tag":259,"props":1845,"children":1846},{},[1847],{"type":48,"value":1848},"Always benchmark",{"type":48,"value":1850},". Increasing memory often REDUCES cost because the function finishes faster (you pay for GB-seconds).",{"type":43,"tag":51,"props":1852,"children":1854},{"id":1853},"reference-files",[1855],{"type":48,"value":1856},"Reference Files",{"type":43,"tag":623,"props":1858,"children":1859},{},[1860,1870],{"type":43,"tag":422,"props":1861,"children":1862},{},[1863,1868],{"type":43,"tag":286,"props":1864,"children":1866},{"className":1865},[],[1867],{"type":48,"value":603},{"type":48,"value":1869}," -- Full Powertools code examples (Python and TypeScript), structured logging, tracing, parameters\u002Fsecrets, and SAM\u002FCDK setup.",{"type":43,"tag":422,"props":1871,"children":1872},{},[1873,1878],{"type":43,"tag":286,"props":1874,"children":1876},{"className":1875},[],[1877],{"type":48,"value":847},{"type":48,"value":1879}," -- Event source mapping CLI commands, SAM\u002FCDK templates for SQS, DynamoDB Streams, Kinesis, API Gateway, S3, EventBridge, and deployment patterns.",{"type":43,"tag":51,"props":1881,"children":1883},{"id":1882},"related-skills",[1884],{"type":48,"value":1885},"Related Skills",{"type":43,"tag":623,"props":1887,"children":1888},{},[1889,1900,1911,1922,1933,1944],{"type":43,"tag":422,"props":1890,"children":1891},{},[1892,1898],{"type":43,"tag":286,"props":1893,"children":1895},{"className":1894},[],[1896],{"type":48,"value":1897},"api-gateway",{"type":48,"value":1899}," -- API Gateway configuration, routing, authorization, and Lambda integration patterns.",{"type":43,"tag":422,"props":1901,"children":1902},{},[1903,1909],{"type":43,"tag":286,"props":1904,"children":1906},{"className":1905},[],[1907],{"type":48,"value":1908},"dynamodb",{"type":48,"value":1910}," -- Table design, access patterns, streams, and DynamoDB-Lambda integration.",{"type":43,"tag":422,"props":1912,"children":1913},{},[1914,1920],{"type":43,"tag":286,"props":1915,"children":1917},{"className":1916},[],[1918],{"type":48,"value":1919},"step-functions",{"type":48,"value":1921}," -- Orchestrating Lambda functions with state machines instead of direct invocation chains.",{"type":43,"tag":422,"props":1923,"children":1924},{},[1925,1931],{"type":43,"tag":286,"props":1926,"children":1928},{"className":1927},[],[1929],{"type":48,"value":1930},"messaging",{"type":48,"value":1932}," -- SQS, SNS, and EventBridge patterns for async Lambda triggers.",{"type":43,"tag":422,"props":1934,"children":1935},{},[1936,1942],{"type":43,"tag":286,"props":1937,"children":1939},{"className":1938},[],[1940],{"type":48,"value":1941},"observability",{"type":48,"value":1943}," -- CloudWatch metrics, alarms, dashboards, and X-Ray tracing beyond Powertools.",{"type":43,"tag":422,"props":1945,"children":1946},{},[1947,1953],{"type":43,"tag":286,"props":1948,"children":1950},{"className":1949},[],[1951],{"type":48,"value":1952},"iam",{"type":48,"value":1954}," -- Least-privilege execution roles, resource policies, and cross-account access for Lambda.",{"type":43,"tag":1956,"props":1957,"children":1958},"style",{},[1959],{"type":48,"value":1960},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1962,"total":2060},[1963,1977,1990,2002,2014,2029,2045],{"slug":1964,"name":1964,"fn":1965,"description":1966,"org":1967,"tags":1968,"stars":26,"repoUrl":27,"updatedAt":1976},"agentcore","design Amazon Bedrock AgentCore architectures","Deep-dive into Amazon Bedrock AgentCore platform design, service selection, deployment, and production operations. This skill should be used when the user asks to \"design an AgentCore architecture\", \"deploy agents on AgentCore\", \"configure AgentCore Runtime\", \"set up AgentCore Memory\", \"use AgentCore Gateway\", \"configure AgentCore Identity\", \"set up AgentCore Policy\", \"plan agent observability\", \"evaluate agent quality\", \"move agent PoC to production\", or mentions AgentCore, AgentCore Runtime, AgentCore Memory, AgentCore Gateway, AgentCore Identity, AgentCore Policy, AgentCore Evaluations, AgentCore Code Interpreter, AgentCore Browser, A2A protocol, or multi-agent orchestration on AWS.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1969,1972,1975],{"name":1970,"slug":1971,"type":16},"Agents","agents",{"name":1973,"slug":1974,"type":16},"Architecture","architecture",{"name":24,"slug":25,"type":16},"2026-07-12T08:40:11.108951",{"slug":1978,"name":1978,"fn":1979,"description":1980,"org":1981,"tags":1982,"stars":26,"repoUrl":27,"updatedAt":1989},"aidlc-lite","develop AI applications on AWS","Lightweight AI development lifecycle for building on AWS. A simplified take on the AI-DLC philosophy — think together, then build fast. Acts as a design partner that understands intent, proposes alternatives with trade-offs, and ships working code without the ceremony of full requirements\u002Fdesign\u002Fspec documents. Use when a founder says \"build X on AWS\", \"add Y to my stack\", \"scaffold an API\", or \"write the CDK for Z\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1983,1984,1987,1988],{"name":1970,"slug":1971,"type":16},{"name":1985,"slug":1986,"type":16},"AI Infrastructure","ai-infrastructure",{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},"2026-07-12T08:40:40.204103",{"slug":1991,"name":1991,"fn":1992,"description":1993,"org":1994,"tags":1995,"stars":26,"repoUrl":27,"updatedAt":2001},"architect-for-startups","advise on AWS architecture for startups","AWS architecture advisor tailored specifically for startups. Alters AWS architecture recommendations based on startup stage (pre-revenue through Series B+), team size, runway, and credits. ALWAYS use when asked about building on AWS, choosing services, planning infrastructure, managing costs with credits, or preparing architecture for fundraising.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1996,1997,1998],{"name":1973,"slug":1974,"type":16},{"name":24,"slug":25,"type":16},{"name":1999,"slug":2000,"type":16},"Strategy","strategy","2026-07-12T08:41:33.557354",{"slug":2003,"name":2003,"fn":2004,"description":2005,"org":2006,"tags":2007,"stars":26,"repoUrl":27,"updatedAt":2013},"aws-architect","design and review AWS architectures","Design and review AWS architectures following Well-Architected Framework principles. Use when planning new infrastructure, reviewing existing architectures, evaluating trade-offs between AWS services, or when asked about AWS best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2008,2009,2010],{"name":1973,"slug":1974,"type":16},{"name":24,"slug":25,"type":16},{"name":2011,"slug":2012,"type":16},"Infrastructure","infrastructure","2026-07-12T08:40:57.630086",{"slug":2015,"name":2015,"fn":2016,"description":2017,"org":2018,"tags":2019,"stars":26,"repoUrl":27,"updatedAt":2028},"aws-compare","compare AWS architecture options","Compare 2-3 AWS architecture options side-by-side across cost, complexity, performance, security, and operational burden. Use when evaluating trade-offs between approaches or when the user is deciding between options.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2020,2021,2022,2025],{"name":1973,"slug":1974,"type":16},{"name":24,"slug":25,"type":16},{"name":2023,"slug":2024,"type":16},"Cost Optimization","cost-optimization",{"name":2026,"slug":2027,"type":16},"Security","security","2026-07-12T08:40:23.960287",{"slug":2030,"name":2030,"fn":2031,"description":2032,"org":2033,"tags":2034,"stars":26,"repoUrl":27,"updatedAt":2044},"aws-debug","debug AWS infrastructure and deployment failures","Debug AWS infrastructure issues, deployment failures, and runtime errors. Use when troubleshooting CloudFormation stack failures, Lambda errors, ECS task failures, permission issues, networking problems, or any AWS service misbehavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2035,2036,2039,2042],{"name":24,"slug":25,"type":16},{"name":2037,"slug":2038,"type":16},"Debugging","debugging",{"name":2040,"slug":2041,"type":16},"Deployment","deployment",{"name":2043,"slug":1941,"type":16},"Observability","2026-07-12T08:40:16.767171",{"slug":2046,"name":2046,"fn":2047,"description":2048,"org":2049,"tags":2050,"stars":26,"repoUrl":27,"updatedAt":2059},"aws-diagram","generate AWS architecture diagrams","Generate AWS architecture diagrams in Mermaid or ASCII from a description, existing IaC, or conversation context. Use when the user wants to visualize an architecture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2051,2052,2053,2056],{"name":1973,"slug":1974,"type":16},{"name":24,"slug":25,"type":16},{"name":2054,"slug":2055,"type":16},"Diagrams","diagrams",{"name":2057,"slug":2058,"type":16},"Visualization","visualization","2026-07-12T08:40:43.26341",42,{"items":2062,"total":2232},[2063,2078,2097,2107,2120,2133,2143,2153,2172,2187,2202,2217],{"slug":2064,"name":2064,"fn":2065,"description":2066,"org":2067,"tags":2068,"stars":2075,"repoUrl":2076,"updatedAt":2077},"agentcore-investigation","investigate Bedrock AgentCore runtime sessions","Investigate Bedrock AgentCore runtime sessions via CloudWatch Logs Insights — resolve session\u002Ftrace IDs, query OTEL spans, filter noise, build timelines. Use when debugging AgentCore agent sessions, tracing tool calls, or analyzing latency.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2069,2070,2071,2074],{"name":24,"slug":25,"type":16},{"name":2037,"slug":2038,"type":16},{"name":2072,"slug":2073,"type":16},"Logs","logs",{"name":2043,"slug":1941,"type":16},9427,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fmcp","2026-07-12T08:37:22.601527",{"slug":2079,"name":2080,"fn":2081,"description":2082,"org":2083,"tags":2084,"stars":2075,"repoUrl":2076,"updatedAt":2096},"amazon-aurora-dsql","amazon aurora dsql","build applications with Aurora DSQL","Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL and PostgreSQL-to-DSQL schema conversion, FK replacement code generation, OCC retry patterns, ORM migration (Django\u002FHibernate\u002FRails), DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, create DSQL table, DSQL schema, migrate to DSQL, distributed SQL database, serverless PostgreSQL-compatible database, DSQL query plan, DSQL EXPLAIN ANALYZE, why is my DSQL query slow, DSQL foreign key, DSQL OCC retry, DSQL multi-region, load into DSQL, load CSV into DSQL, bulk load DSQL, aurora-dsql-loader.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2085,2088,2089,2092,2093],{"name":2086,"slug":2087,"type":16},"Aurora","aurora",{"name":24,"slug":25,"type":16},{"name":2090,"slug":2091,"type":16},"Database","database",{"name":21,"slug":22,"type":16},{"name":2094,"slug":2095,"type":16},"SQL","sql","2026-07-12T08:36:45.053393",{"slug":2098,"name":2099,"fn":2081,"description":2082,"org":2100,"tags":2101,"stars":2075,"repoUrl":2076,"updatedAt":2106},"aurora-dsql","aurora dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2102,2103,2104,2105],{"name":24,"slug":25,"type":16},{"name":2090,"slug":2091,"type":16},{"name":21,"slug":22,"type":16},{"name":2094,"slug":2095,"type":16},"2026-07-12T08:36:42.694299",{"slug":2108,"name":2109,"fn":2081,"description":2082,"org":2110,"tags":2111,"stars":2075,"repoUrl":2076,"updatedAt":2119},"aws-dsql","aws dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2112,2113,2114,2117,2118],{"name":24,"slug":25,"type":16},{"name":2090,"slug":2091,"type":16},{"name":2115,"slug":2116,"type":16},"Migration","migration",{"name":21,"slug":22,"type":16},{"name":2094,"slug":2095,"type":16},"2026-07-12T08:36:38.584057",{"slug":2121,"name":2122,"fn":2081,"description":2082,"org":2123,"tags":2124,"stars":2075,"repoUrl":2076,"updatedAt":2132},"distributed-postgres","distributed postgres",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2125,2126,2127,2130,2131],{"name":24,"slug":25,"type":16},{"name":2090,"slug":2091,"type":16},{"name":2128,"slug":2129,"type":16},"PostgreSQL","postgresql",{"name":21,"slug":22,"type":16},{"name":2094,"slug":2095,"type":16},"2026-07-12T08:36:46.530743",{"slug":2134,"name":2135,"fn":2081,"description":2082,"org":2136,"tags":2137,"stars":2075,"repoUrl":2076,"updatedAt":2142},"distributed-sql","distributed sql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2138,2139,2140,2141],{"name":24,"slug":25,"type":16},{"name":2090,"slug":2091,"type":16},{"name":21,"slug":22,"type":16},{"name":2094,"slug":2095,"type":16},"2026-07-12T08:36:48.104182",{"slug":2144,"name":2144,"fn":2081,"description":2082,"org":2145,"tags":2146,"stars":2075,"repoUrl":2076,"updatedAt":2152},"dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2147,2148,2149,2150,2151],{"name":24,"slug":25,"type":16},{"name":2090,"slug":2091,"type":16},{"name":2115,"slug":2116,"type":16},{"name":21,"slug":22,"type":16},{"name":2094,"slug":2095,"type":16},"2026-07-12T08:36:36.374512",{"slug":2154,"name":2154,"fn":2155,"description":2156,"org":2157,"tags":2158,"stars":2169,"repoUrl":2170,"updatedAt":2171},"cost-efficiency-analyzer","analyze cost efficiency and expenses","Analyzes cost structure, cost efficiency, and expense management from P&L data. Use when the user asks about costs, expenses, COGS, operating expenses, cost ratios, cost control, spending efficiency, margin compression from cost side, or wants to understand where money is going. Also use for \"are we spending too much\", \"cost breakdown\", \"expense analysis\", or \"how efficient are our operations\". NOT for revenue or top-line analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2159,2162,2165,2166],{"name":2160,"slug":2161,"type":16},"Accounting","accounting",{"name":2163,"slug":2164,"type":16},"Analytics","analytics",{"name":2023,"slug":2024,"type":16},{"name":2167,"slug":2168,"type":16},"Finance","finance",3176,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagentcore-samples","2026-07-12T08:40:03.29555",{"slug":2173,"name":2173,"fn":2174,"description":2175,"org":2176,"tags":2177,"stars":2169,"repoUrl":2170,"updatedAt":2186},"executive-financial-briefing","generate executive financial briefings","Generates a concise executive-level financial briefing or summary suitable for a CEO, CFO, or board presentation. Use when the user asks for a summary, briefing, executive summary, board update, financial overview, financial health check, or \"how is the business doing\". Covers the full P&L picture in one page. Also use for \"give me the highlights\", \"what do I need to know\", or \"quick financial update\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2178,2179,2180,2183],{"name":24,"slug":25,"type":16},{"name":2167,"slug":2168,"type":16},{"name":2181,"slug":2182,"type":16},"Management","management",{"name":2184,"slug":2185,"type":16},"Reporting","reporting","2026-07-12T08:40:02.066471",{"slug":2188,"name":2188,"fn":2189,"description":2190,"org":2191,"tags":2192,"stars":2169,"repoUrl":2170,"updatedAt":2201},"multi-quarter-trend-analysis","analyze multi-quarter financial trends","Analyzes financial trends across multiple quarters by comparing P&L metrics over time. Use when the user wants to see trends, patterns, trajectories, or directional movement across 3 or more quarters. Also use for \"how are we trending\", \"show me the trend\", \"track performance over time\", \"quarter over quarter comparison across all quarters\", or any multi-period longitudinal analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2193,2194,2195,2198],{"name":2163,"slug":2164,"type":16},{"name":2167,"slug":2168,"type":16},{"name":2196,"slug":2197,"type":16},"Financial Statements","financial-statements",{"name":2199,"slug":2200,"type":16},"Variance Analysis","variance-analysis","2026-07-12T08:40:00.79141",{"slug":2203,"name":2203,"fn":2204,"description":2205,"org":2206,"tags":2207,"stars":2169,"repoUrl":2170,"updatedAt":2216},"pdf","process and manipulate PDF documents","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2208,2211,2214],{"name":2209,"slug":2210,"type":16},"Automation","automation",{"name":2212,"slug":2213,"type":16},"Documents","documents",{"name":2215,"slug":2203,"type":16},"PDF","2026-07-12T08:41:44.135656",{"slug":2218,"name":2218,"fn":2219,"description":2220,"org":2221,"tags":2222,"stars":2169,"repoUrl":2170,"updatedAt":2231},"quarterly-kpi-calculator","calculate quarterly financial KPIs","Calculates quarterly financial KPIs from P&L data. P&L figures can be provided directly by the user or fetched from the financial data MCP server. Use when the user wants KPI calculations such as Gross Margin %, EBITDA Margin %, Operating Expense Ratio, or Revenue Growth % QoQ. Also use for quarterly performance review, P&L analysis, or interpreting financial ratios against benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2223,2224,2227,2228],{"name":2160,"slug":2161,"type":16},{"name":2225,"slug":2226,"type":16},"Data Analysis","data-analysis",{"name":2167,"slug":2168,"type":16},{"name":2229,"slug":2230,"type":16},"KPI","kpi","2026-07-12T08:39:59.54971",150]