skills/aws-cdk-builder/SKILL.md
AWS CDK infrastructure builder using TypeScript with L2/L3 constructs and Well-Architected patterns. Activate on: AWS CDK, CDK construct, CDK stack, CDK pipeline, AWS infrastructure as code TypeScript, L2 construct, CDK patterns. NOT for: Terraform IaC (use terraform-module-builder), Kubernetes manifests (use kubernetes-manifest-generator), serverless framework (use devops-automator).
npx skillsauth add curiositech/windags-skills aws-cdk-builderInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Expert in building AWS infrastructure using CDK with TypeScript, leveraging L2/L3 constructs and Well-Architected Framework patterns.
Activate on: "AWS CDK", "CDK construct", "CDK stack", "CDK pipeline", "AWS IaC TypeScript", "L2 construct", "CDK patterns", "cdk deploy", "cdk synth"
NOT for: Terraform IaC → terraform-module-builder | Kubernetes manifests → kubernetes-manifest-generator | Serverless Framework → devops-automator
npx cdk init app --language typescript| Domain | Technologies | |--------|-------------| | CDK Core | CDK 2.180+, Constructs library, CDK CLI, cdk.json | | L2/L3 Constructs | aws-lambda, aws-apigateway, aws-ecs-patterns, aws-rds | | Compliance | cdk-nag (AwsSolutions, NIST, HIPAA, PCI packs) | | CI/CD | CDK Pipelines, CodePipeline, CodeBuild, self-mutation | | Patterns | ECS Fargate patterns, API Gateway + Lambda, S3 + CloudFront |
// bin/app.ts — top-level app with environment separation
const app = new cdk.App();
// Stateful stack — rarely changes, careful with updates
const dataStack = new DataStack(app, 'Data-Prod', {
env: { account: '123456789', region: 'us-east-1' },
});
// Stateless stack — frequently deployed, safe to destroy/recreate
const apiStack = new ApiStack(app, 'Api-Prod', {
env: { account: '123456789', region: 'us-east-1' },
database: dataStack.database,
bucket: dataStack.bucket,
});
// Pipeline stack — self-mutating CI/CD
new PipelineStack(app, 'Pipeline', {
env: { account: '123456789', region: 'us-east-1' },
});
// lib/api-stack.ts
export class ApiStack extends cdk.Stack {
constructor(scope: Construct, id: string, props: ApiStackProps) {
super(scope, id, props);
const handler = new lambda.Function(this, 'Handler', {
runtime: lambda.Runtime.NODEJS_22_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda/'),
memorySize: 256,
timeout: cdk.Duration.seconds(30),
tracing: lambda.Tracing.ACTIVE, // X-Ray
insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_229_0,
environment: {
TABLE_NAME: props.table.tableName,
POWERTOOLS_SERVICE_NAME: 'api', // Lambda Powertools
},
});
props.table.grantReadWriteData(handler); // Least privilege
const api = new apigw.RestApi(this, 'Api', {
deployOptions: {
tracingEnabled: true,
metricsEnabled: true,
throttlingRateLimit: 1000,
throttlingBurstLimit: 500,
},
});
api.root.addResource('items').addMethod('GET',
new apigw.LambdaIntegration(handler));
}
}
Source (GitHub) → Synth (cdk synth) → Self-Mutate
│ │
▼ ▼
UpdatePipeline ─── Deploy Staging ─── Manual Approval ─── Deploy Prod
│ │
Integration Tests Smoke Tests
CfnBucket instead of s3.Bucket. L2 constructs encode best practices (encryption, logging, access control) by default.Aspects.of(app).add(new AwsSolutionsChecks()) to catch security issues pre-deploy.account: '123456789' in construct code. Use cdk.json context or cdk.Environment lookup for portability.expect(template).toMatchSnapshot() tests to detect unintended changes.[ ] Stacks separated: stateful (data) vs stateless (compute)
[ ] L2/L3 constructs used (not raw CloudFormation L1)
[ ] cdk-nag enabled with AwsSolutions pack
[ ] Snapshot tests for all stacks
[ ] CDK Pipelines for self-mutating CI/CD
[ ] Least privilege IAM via grant methods (grantRead, grantWrite)
[ ] cdk synth produces valid CloudFormation
[ ] Cross-stack references use exported outputs
[ ] Removal policies set (RETAIN for production data, DESTROY for dev)
[ ] Tags applied via Aspects for cost allocation
[ ] cdk diff reviewed before every deployment
[ ] Lambda functions use Powertools for observability
data-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.