
Deploy
- 205 installs
- 850 repo stars
- Updated August 3, 2026
- awslabs/agent-plugins
Deploy on AWS is a Claude skill that analyzes any codebase and deploys it to optimal AWS services, recommending services, estimating cost, and generating IaC with security defaults.
About
Deploy on AWS is a skill that takes an existing application and deploys it to AWS with minimal user decisions. A developer uses it to scan a codebase, get an AWS service recommendation with a monthly cost estimate, and generate infrastructure-as-code with security defaults applied. It runs IaC security scans before executing the deployment on user confirmation.
- Analyzes any codebase and deploys it to optimal AWS services with minimal decisions
- Recommends services, estimates monthly cost, and generates IaC with security defaults
- Runs IaC security scans (cfn-nag, checkov) before deploying
Deploy by the numbers
- 205 all-time installs (skills.sh)
- Ranked #399 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
deploy capabilities & compatibility
Requires an AWS account; deployed resources incur AWS costs
- Capabilities
- elastic beanstalk · aws serverless deployment · cost estimation
- Works with
- aws · terraform
- Use cases
- devops · ci cd
- Pricing
- Bring your own API key
What deploy says it does
Take any application and deploy it to AWS with minimal user decisions.
Run IaC security scans (cfn-nag, checkov) before deployment
npx skills add https://github.com/awslabs/agent-plugins --skill deployAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 205 |
|---|---|
| repo stars | ★ 850 |
| Last updated | August 3, 2026 |
| Repository | awslabs/agent-plugins ↗ |
What it does
Analyze a codebase, pick AWS services, estimate cost, and generate secure IaC to deploy the app.
Who is it for?
Deploying an existing app to AWS with automatic service selection, cost estimate, and secure IaC
Skip if: Deployments to non-AWS clouds or teams needing fine-grained manual service control
When should I use this skill?
You have working application code and want it deployed to AWS with services chosen and IaC generated for you.
What you get
A cost-estimated, security-scanned IaC deployment of the application on appropriate AWS services.
- AWS service recommendation
- Monthly cost estimate
- Generated IaC (CDK/CloudFormation/Terraform)
By the numbers
- 5-step workflow (Analyze, Recommend, Estimate, Generate, Deploy)
- defaults to dev-sized single-AZ resources
Files
Deploy on AWS
Take any application and deploy it to AWS with minimal user decisions.
Philosophy
Minimize cognitive burden. User has code, wants it on AWS. Pick the most straightforward services. Don't ask questions with obvious answers.
Workflow
1. Analyze - Scan codebase for framework, database, dependencies 2. Recommend - Select AWS services, concisely explain rationale 3. Estimate - Show monthly cost before proceeding 4. Generate - Write IaC code with security defaults applied 5. Deploy - Run security checks, then execute with user confirmation
Defaults
See defaults.md for the complete service selection matrix.
Core principle: Default to dev-sized (cost-conscious: small instance sizes, minimal redundancy, and non-HA/single-AZ defaults) unless user says "production-ready".
MCP Servers
awsknowledge
Consult for architecture decisions. Use when choosing between AWS services or validating that a service fits the use case. Helps answer "what's the right AWS service for X?"
Key topics: general for architecture, amplify_docs for static sites/SPAs, cdk_docs and cdk_constructs for IaC patterns.
awspricing
Get cost estimates. Always present costs before generating IaC so user can adjust before committing. See cost-estimation.md for query patterns.
awsiac
Consult for IaC best practices. Use when writing CDK/CloudFormation/Terraform to ensure patterns follow AWS recommendations.
Principles
- Concisely explain why each service was chosen
- Always show cost estimate before generating code
- Apply security defaults automatically (encryption, private subnets, least privilege)
- Run IaC security scans (cfn-nag, checkov) before deployment
- Don't ask "Lambda or Fargate?" - just pick the obvious one
- If genuinely ambiguous, then ask
- Never recommend AWS App Runner — it is in maintenance mode. Use ECS Express Mode instead.
- When user explicitly requests a managed application platform or signals low infrastructure involvement, route to Elastic Beanstalk
References
- Service defaults
- Security defaults
- Cost estimation patterns
- Elastic Beanstalk skill
Cost Estimation Patterns
Use the awspricing MCP server to get accurate cost estimates before generating IaC.
Workflow
1. Identify all AWS services in the architecture 2. Query pricing for each service 3. Calculate monthly estimates based on expected usage 4. Present total before proceeding
Service Codes
| Service | Code | Notes |
|---|---|---|
| Fargate | AmazonECS | Filter by usagetype containing "Fargate" |
| Aurora PostgreSQL | AmazonRDS | Filter: databaseEngine = "Aurora PostgreSQL" |
| Aurora MySQL | AmazonRDS | Filter: databaseEngine = "Aurora MySQL" |
| RDS PostgreSQL | AmazonRDS | Filter: databaseEngine = "PostgreSQL" |
| Amazon DocumentDB | AmazonDocDB | MongoDB-compatible managed database |
| ALB | AWSELB | Application Load Balancer |
| S3 | AmazonS3 | Storage and requests |
| CloudFront | AmazonCloudFront | CDN distribution |
| Amplify | AWSAmplify | Hosting, build minutes |
| Lambda | AWSLambda | Requests and duration |
| DynamoDB | AmazonDynamoDB | On-demand or provisioned |
| Secrets Manager | AWSSecretsManager | Per secret per month |
| Elastic Beanstalk | N/A (free service) | No EB charge; query EC2, AWSELB for actual costs |
Fargate Pricing
Fargate charges per vCPU-hour and per GB-hour. Query with usagetype filters:
usagetype: "USE1-Fargate-vCPU-Hours:perCPU" # vCPU pricing
usagetype: "USE1-Fargate-GB-Hours" # Memory pricingTypical small app (0.5 vCPU, 1GB):
- us-east-1: ~$18/month running 24/7
Aurora Serverless v2 Pricing
Aurora Serverless v2 charges per ACU-hour (Aurora Capacity Unit).
- Minimum: 0.5 ACU
- 1 ACU ≈ 2GB memory
Dev estimate (0.5-2 ACU range):
- ~$45-90/month depending on usage patterns
Production estimate (2-8 ACU range):
- ~$180-360/month depending on load
Amazon DocumentDB Serverless Pricing
Amazon DocumentDB Serverless charges per DCU-hour (DocumentDB Capacity Unit), storage (GB-month), and I/O (standard config only).
- Minimum: 0.5 DCU
- 1 DCU ≈ 2 GiB memory
Dev estimate (0.5-2 DCU range, 10GB storage):
- ~$35-120/month depending on usage patterns (scales to 0.5 DCU when idle)
Production estimate (2-8 DCU range, 100GB storage, multi-AZ):
- ~$130-400/month depending on load
Elastic Beanstalk Pricing
Elastic Beanstalk itself has no service fee. Cost equals the underlying AWS resources provisioned for the environment (EC2, ELB, EBS, CloudWatch). Query awspricing MCP server for region-accurate estimates. Approximate us-east-1 pricing:
Dev web (1x t3.small + ALB): ~$35-40/month Dev worker (1x t3.small, no ALB): ~$15-20/month Production web (4x t3.medium + ALB, Multi-AZ): ~$150-200/month
Include EBS volume costs (8GB gp3 default: ~$1/month per instance).
Quick Reference Estimates
Small web app (Fargate + Aurora Serverless v2 + ALB):
- Dev: ~$70-100/month
- Production: ~$200-400/month
Small web app (Fargate + Amazon DocumentDB Serverless + ALB):
- Dev: ~$70-155/month
- Production: ~$200-450/month
Static site / SPA (Amplify Hosting):
- Low traffic: ~$0-5/month (free tier covers most small sites)
- High traffic: ~$15-40/month
Static site (S3 + CloudFront):
- Low traffic: ~$1-5/month
- High traffic: ~$20-50/month
Serverless API (Lambda + API Gateway + DynamoDB):
- Low traffic: ~$5-20/month
- High traffic: scales with requests
Web app on Elastic Beanstalk:
- Dev (1x t3.small + ALB): ~$35-40/month
- Production (load-balanced, Multi-AZ): ~$80-200/month
Web app on EB + Aurora Serverless v2:
- Dev: ~$80-130/month
- Production: ~$200-400/month
Presenting Estimates
Always show:
1. Per-service breakdown 2. Monthly total 3. Key assumptions (e.g., "assumes 24/7 uptime", "assumes 1M requests/month") 4. Cost optimization tips if relevant
Service Defaults
Default AWS service selections. Override only when user explicitly requests alternatives.
Compute
| App Pattern | Default | Override Trigger |
|---|---|---|
| Web framework (Django, Rails, Express, FastAPI, etc.) | Fargate + ALB | "serverless" → Lambda + API Gateway; "managed platform" or "Elastic Beanstalk" → Elastic Beanstalk |
| Static site / SPA | Amplify Hosting | "S3" or "more control" → S3 + CloudFront |
| Background workers | Fargate | Short tasks (<15min) → Lambda; "managed platform" or "Elastic Beanstalk" → Elastic Beanstalk (Worker) |
| Scheduled jobs | EventBridge + Lambda | Long-running → EventBridge + Fargate |
| API-only (no web UI) | Fargate + ALB | "serverless" → API Gateway + Lambda; "managed platform" or "Elastic Beanstalk" → Elastic Beanstalk |
| Existing Heroku/Render/Railway app migrating to AWS | Elastic Beanstalk | "container orchestration" or "ECS" → Fargate + ALB; "serverless" → Lambda |
⚠️ App Runner is in maintenance mode — AWS has moved App Runner to maintenance mode. Do not recommend App Runner for new workloads. Use ECS Express Mode instead.
Why Fargate over Lambda for web frameworks
Most web frameworks (Django, Rails, Flask with WSGI) expect long-running processes. Lambda's cold starts and request/response model require adapters and introduce latency. Fargate provides a more natural fit without framework modifications.
Why Amplify for static sites/SPAs
Amplify Hosting handles CI/CD, HTTPS, custom domains, and CDN automatically. Less configuration than S3 + CloudFront. Git-based deployments work out of the box. Use S3 + CloudFront when user needs fine-grained control over caching, edge functions, or has existing CloudFront infrastructure.
Use amplify_docs topic in awsknowledge MCP for framework-specific guidance (React, Next.js, Vue, Angular, etc.).
Why Elastic Beanstalk for managed platform deployments
Elastic Beanstalk is an application management service: the user provides code, AWS manages deployments, scaling, patching, monitoring, and health response. Choose when the user wants production-grade reliability with the lowest ongoing maintenance cost. Choose Fargate when the user wants direct container control.
Database
| Data Pattern | Default (Dev) | Default (Prod) | Override Trigger |
|---|---|---|---|
| PostgreSQL | Aurora Serverless v2 | Aurora Serverless v2 | "simple RDS" → RDS |
| MySQL | Aurora Serverless v2 | Aurora Serverless v2 | "simple RDS" → RDS |
| Document / MongoDB | Amazon DocumentDB Serverless | Amazon DocumentDB Serverless | "provisioned" → Amazon DocumentDB provisioned |
| NoSQL / Key-Value | DynamoDB | DynamoDB | - |
| Redis / Caching | ElastiCache Serverless | ElastiCache Serverless | - |
| Full-text search | OpenSearch Serverless | OpenSearch Serverless | - |
Why Aurora Serverless v2
Scales to near-zero in dev (0.5 ACU minimum), scales up automatically for production. Single choice works for both environments. Only use provisioned RDS if user has specific cost constraints or compliance requirements.
Why Amazon DocumentDB Serverless for MongoDB
Amazon DocumentDB Serverless is the on-demand, auto-scaling configuration of Amazon DocumentDB. It dynamically adjusts capacity based on application demand so you only pay for what you use. Ideal for dev/test, variable workloads, and new applications where capacity needs are unknown. Compatible with MongoDB 3.6, 4.0, 5.0 and 8.0 APIs. Use provisioned Amazon DocumentDB only when you have predictable, steady-state workloads or specific compliance requirements that need fixed instance sizing.
Storage
| Pattern | Default |
|---|---|
| Static assets | S3 |
| User uploads | S3 |
| Secrets | Secrets Manager |
| Config | Parameter Store |
IaC
| Default | Override Trigger |
|---|---|
| CDK (TypeScript) | "terraform" → Terraform |
| "cloudformation" → CloudFormation YAML | |
| "sam" → SAM |
Why CDK
Most expressive, best IDE support, generates CloudFormation. TypeScript provides type safety without requiring Python/Java knowledge. If user's repo already has terraform/ or cdk.json, match existing choice.
Sizing (Dev vs Production)
| Component | Dev | Production |
|---|---|---|
| Fargate | 0.5 vCPU, 1GB | 1+ vCPU, 2+ GB |
| Aurora Serverless | 0.5-2 ACU | 2-16+ ACU |
| ALB | Single AZ OK | Multi-AZ |
| Elastic Beanstalk (web) | 1x t3.small + ALB | 2-4x t3.medium + ALB, Multi-AZ |
| Elastic Beanstalk (worker) | 1x t3.small | 2-4x t3.medium |
Default to dev sizing unless user says "production", "prod", or "production-ready".
Security
See security.md for encryption, VPC placement, IAM, security group defaults, and pre-deployment security checks.
Security Defaults
Security configurations applied by default. Override only when explicitly requested.
Philosophy
Secure by default, right-sized by environment. Dev environments allow more permissive access for debugging. Production environments enforce strict boundaries.
Secure-by-Default Checklist
Apply these patterns automatically when generating IaC:
- [ ] Private S3 buckets - Block all public access unless explicitly serving static content
- [ ] Encryption at rest - Enable for all storage (S3, RDS, EBS, Secrets Manager)
- [ ] HTTPS enforcement - TLS 1.2+ with automatic HTTP→HTTPS redirect
- [ ] Origin Access Control - CloudFront accesses S3 via AWS internal network, not public URLs
- [ ] IAM least privilege - Minimal required permissions per service, no wildcards
- [ ] Security scanning - Detect exposed secrets before deployment
- [ ] Quality gates - Run available tests and static analysis before deploy
Encryption
| Component | Default (Dev) | Default (Prod) | Override Trigger |
|---|---|---|---|
| S3 buckets | SSE-S3 (AES-256) | SSE-KMS (customer-managed) | "no encryption" |
| RDS/Aurora | Encrypted (AWS-managed key) | Encrypted (CMK) | - |
| Amazon DocumentDB | Encrypted (AWS-managed key) | Encrypted (CMK) | - |
| EBS volumes | Encrypted | Encrypted | - |
| ALB | TLS 1.2+ only | TLS 1.2+ only | - |
| Secrets Manager | AWS-managed key | CMK | - |
| CloudFront | TLS 1.2+ | TLS 1.2+ | - |
Why SSE-S3 for dev, SSE-KMS for prod
SSE-S3 is zero-config and free. Production benefits from CMK for audit trails, key rotation control, and cross-account access patterns.
S3 Security
| Setting | Default |
|---|---|
| Block Public Access | Enabled (all 4 settings) |
| Bucket Policy | Deny by default |
| Object Ownership | Bucket owner enforced |
| Versioning | Enabled for production |
| Access Logging | Enabled for production |
CloudFront + S3 Pattern
When serving static content via CloudFront:
- S3 bucket remains private (no public access)
- Use Origin Access Control (OAC) - CloudFront accesses S3 via internal AWS network
- Do NOT use legacy Origin Access Identity (OAI)
VPC Placement
| Component | Default (Dev) | Default (Prod) |
|---|---|---|
| Fargate tasks | Private subnet + NAT Gateway | Private subnet + NAT Gateway |
| ALB | Public subnet | Public subnet |
| RDS/Aurora | Private subnet (no public IP) | Private subnet (no public IP) |
| Amazon DocumentDB | Private subnet (no public IP) | Private subnet (no public IP) |
| Lambda | VPC-attached if DB access needed | VPC-attached if DB access needed |
| EB web instances | Private subnet + ALB in public | Private subnet + ALB in public |
| EB worker instances | Private subnet + NAT Gateway | Private subnet + NAT Gateway |
Why private subnets for compute
Public IPs on compute resources invite direct attack. Route outbound traffic through NAT Gateway. ALB is the only public-facing component.
Dev simplification
For dev, a single-AZ VPC with 1 public + 1 private subnet is sufficient. Use awsknowledge topic vpc_patterns for multi-AZ production layouts.
IAM
| Pattern | Default |
|---|---|
| Task/function roles | Least privilege (only resources explicitly used) |
| Service-linked roles | Use AWS-managed where available |
| Cross-service access | Via IAM roles, never access keys |
| Admin access | Not created (user manages separately) |
| EB instance profile | Least privilege (S3 for deploys, CloudWatch, ECR if Docker) |
| EB service role | AWS-managed (aws-elasticbeanstalk-service-role) |
Principle: Explicit grants only
Never use * for resources or actions unless unavoidable (e.g., S3 bucket contents require s3:GetObject on bucket/*). Enumerate specific ARNs. Use conditions where possible.
Consult awsiac MCP for IAM policy patterns by service.
Security Groups
| Component | Default Inbound | Default Outbound |
|---|---|---|
| ALB | 443 from 0.0.0.0/0 | Fargate SG only |
| Fargate | ALB SG only (on app port) | 443 (HTTPS), DB SG |
| RDS/Aurora | Fargate SG only (on DB port) | None |
| Amazon DocumentDB | Fargate SG only (port 27017) | None |
| Lambda (VPC) | None | 443, DB SG |
| EB ALB | 443 from 0.0.0.0/0 | EB instances SG only |
| EB web instances | EB ALB SG only (on app port) | 443 (HTTPS), DB SG |
| EB worker instances | None (SQS daemon on localhost) | 443 (HTTPS), DB SG |
Why deny-by-default
Start with no access, add only what's needed. Outbound 443 allows AWS API calls and package downloads. Lock down further for compliance if needed.
Secrets Management
| Secret Type | Default Storage | Access Pattern |
|---|---|---|
| Database credentials | Secrets Manager | IAM role + GetSecretValue |
| API keys | Secrets Manager | IAM role + GetSecretValue |
| Config values (non-secret) | Parameter Store | IAM role + GetParameter |
| Environment-specific | Secrets Manager with env prefix | /app/{env}/secret-name |
Why Secrets Manager over Parameter Store for secrets
Secrets Manager provides automatic rotation, cross-account sharing, and audit logging. Parameter Store SecureString works but lacks rotation.
Always inject secrets at runtime, never bake into images.
Pre-Deployment Security Checks
Secret Detection
Before deployment, scan for exposed secrets:
- Check for hardcoded credentials, API keys, tokens
- Use git-secrets, truffleHog, or detect-secrets
- Fail deployment if secrets detected in codebase
IaC Security Scanning
Validate generated IaC before deployment:
| Tool | Purpose |
|---|---|
| cfn-nag | CloudFormation security linting (AWS-native) |
| checkov | Multi-framework IaC scanner (CDK, CloudFormation, Terraform) |
| cdk-nag | CDK-specific security checks via Aspects |
| tfsec | Terraform security scanner |
Recommend running checkov or cfn-nag on generated templates before cdk deploy.
Quality Gates
Before deployment, run available checks:
1. Unit tests (if test suite exists) 2. Static code analysis (linters, type checkers) 3. IaC security scan 4. Secret detection scan
Logging & Monitoring
| Component | Default (Dev) | Default (Prod) |
|---|---|---|
| CloudTrail | Account-level (shared) | Account-level (shared) |
| VPC Flow Logs | Disabled | Enabled (S3 destination) |
| ALB Access Logs | Disabled | Enabled (S3 destination) |
| Container logs | CloudWatch Logs | CloudWatch Logs |
| RDS/Aurora logs | Error log only | Error + slow query + audit |
| Amazon DocumentDB logs | Profiler (slow ops) | Profiler + audit |
| S3 Access Logs | Disabled | Enabled |
| EB application logs | CloudWatch Logs agent | CloudWatch Logs + enhanced health |
| EB platform logs | Disabled | Enabled (CloudWatch Logs) |
Why minimal logging in dev
Logging has cost. Dev environments rarely need audit trails. Enable VPC Flow Logs and ALB logs for production debugging and compliance.
Production Hardening Checklist
When user requests "production" or "prod", additionally enable:
- [ ] Multi-AZ for all stateful services
- [ ] VPC Flow Logs
- [ ] ALB Access Logs
- [ ] S3 Access Logs
- [ ] RDS Performance Insights
- [ ] Amazon DocumentDB profiler + audit logs exported to CloudWatch Logs
- [ ] AWS WAF on ALB (if public-facing web app)
- [ ] GuardDuty (recommend, don't auto-enable)
- [ ] Run
checkovorcfn-nagbefore deployment
MCP References
awsknowledgetopics:vpc_patterns,iam_best_practices,securityawsiacfor CDK security constructs (L2 constructs apply many defaults)
Related skills
FAQ
Does it estimate cost first?
Yes; it always presents a monthly cost estimate before generating IaC so you can adjust before committing.
What security is applied?
It applies security defaults (encryption, private subnets, least privilege) and runs cfn-nag and checkov scans before deploying.