Claude Skill

service-quota-check

Use this skill during any incident investigation, capacity planning, or

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download aws-tools-for-devops-agent-skills_service-quota-check-1c971c7.zip · 11 KB
Part of aws/tools-for-devops-agent — 21 skills

Install

skills CLI npx skills add https://github.com/aws/tools-for-devops-agent/tree/main/skills/service-quota-check
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install aws-tools-for-devops-agent@llmmart
Git git clone https://github.com/aws/tools-for-devops-agent.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole aws/tools-for-devops-agent collection as a plugin from our marketplace. Git is the plain clone.

README

Service Quota Check

This skill enables the AWS DevOps Agent to check AWS service quota utilization during incident investigations, capacity planning, and before provisioning new resources.

Purpose

When operational issues arise from hitting AWS service limits, or when recommendations involve provisioning additional resources, this skill checks current quota values and utilization. It proactively identifies quotas at risk (85%+ utilization), requests increases via the Service Quotas API when possible, and guides users to open support cases when programmatic increases are not available.

Key Capabilities

  • Retrieve current quota values and applied limits for any AWS service
  • Calculate real-time utilization using CloudWatch metrics or resource counts
  • Flag quotas at 85%+ utilization with risk-level assessment
  • Submit quota increase requests via the Service Quotas API
  • Check for existing pending increase requests to avoid duplicates
  • Recommend support case creation for non-adjustable quotas
  • Perform bulk quota assessments across all quotas for a service

Prerequisites

  • Agent permissions for Service Quotas APIs: servicequotas:ListServices, servicequotas:ListServiceQuotas, servicequotas:GetServiceQuota, servicequotas:RequestServiceQuotaIncrease, servicequotas:ListRequestedServiceQuotaChangeHistory, servicequotas:CreateSupportCase
  • Agent permissions for CloudWatch: cloudwatch:GetMetricData, cloudwatch:GetMetricStatistics
  • For resource counting fallback: read-only permissions on target services (e.g., ec2:DescribeInstances, rds:DescribeDBInstances)

Limitations

  • Service Quotas is a regional service; quotas must be checked in the correct region
  • Not all quotas have a UsageMetric in CloudWatch; some require manual resource counting
  • Some quotas are not adjustable via the API and require support cases
  • Quota increase requests may take minutes (auto-approved) to days (manual review)
  • Rate-based quotas (requests per second) require different monitoring than resource-count quotas

Agent Types

This skill is used by the following agent types:

  • Chat tasks — conversational quota lookup, capacity planning, and proactive checks
  • Incident RCA — quota exhaustion as root cause during active incidents

Uploading to AWS DevOps Agent

To deploy this skill to your Agent Space, you can use any of three ways:

Option A: Import from GitHub (recommended)

If you have a GitHub connection configured in your Agent Space, you can import this skill directly from the repository. In the DevOps Agent web app, go to Settings -> Add Skill -> Import from repository, then point to the skills/service-quota-check directory. See Importing a skill from a repository for full instructions.

Note: You cannot connect the aws GitHub organization directly because the GitHub connection setup requires admin rights on the organization. Instead, connect your personal GitHub account and select any repository from it during the connection setup. Once a GitHub connection is established, you can import skills from any public repository — including this one — even if it wasn't selected during the connection setup.

Option B: Upload as a zip file

  1. Zip the service-quota-check/ directory (only including allowed extensions):

    cd skills
    zip -r service-quota-check.zip service-quota-check/ -i '*.md' '*.txt' '*.json' '*.yaml' '*.yml' '*.xml' '*.csv' '*.tsv' '*.html' '*.htm' '*.png' '*.jpg' '*.jpeg' '*.gif' '*.svg' '*.webp' '*.pdf' -x '*/.claude/*' '*/scripts/*' '*/README.md' '*/.skilleval.yaml' '*/.skilleval.yml' '*/CHANGELOG.md' '*/evals/*'
    
  2. In the AWS DevOps Agent web app, navigate to the Skills page.

  3. Click Add skill -> Upload skill.

  4. Drag and drop the service-quota-check.zip file (max 6 MB).

  5. Select the agent types: Chat tasks and Incident RCA.

  6. Click Upload.

Option C: Upload via the Asset API

Use the AWS DevOps Agent Asset API to programmatically manage skills — useful for CI/CD pipelines or automation workflows. Assign the skill to the CHAT and INCIDENT_RCA agent types. See Managing a skill end-to-end for the full API workflow.

For more details, see Uploading a skill in the AWS DevOps Agent User Guide.

How to Use This Skill

This skill is most suitable for chat and investigation. Below are sample prompts for each use-case.

Chat

  • "Check the EC2 vCPU quota utilization in us-east-1."
  • "What's my current VPC quota and how many VPCs am I using?"
  • "Show me all quotas for Lambda that are above 70% utilization."
  • "Can I launch 50 more t3.large instances without hitting the quota?"
  • "List all service quotas that are near their limits across EC2, VPC, and RDS."
  • "Request an increase for my NAT Gateway quota in eu-west-1."

Investigation

  • "I'm getting LimitExceededException when creating a new VPC. Check quotas."
  • "Lambda function invocations are being throttled. Check if we're hitting concurrent execution limits."
  • "EC2 instance launch failed with InsufficientInstanceCapacity. Is this a quota issue?"
  • "We need to scale our ECS cluster but tasks are failing to start. Check Fargate quotas."
  • "The recommendation is to add more read replicas for RDS. Check if the quota allows it."
  • "CloudFormation stack creation failed — investigate if we hit the stack count limit."

Skill manifest

Service Quota Check

Use this skill to check AWS service quota utilization during investigations and before provisioning new resources. It determines whether a quota is nearing its limit (85%+ utilization) and takes action: requesting a quota increase via the Service Quotas API when possible, or recommending a support case when programmatic increases are not supported.

When to Use This Skill

  • An error message indicates throttling or limit exceeded (e.g., ThrottlingException, TooManyRequestsException, LimitExceededException, ResourceLimitExceeded).
  • A resource creation or scaling operation fails with capacity errors.
  • An investigation recommendation involves provisioning additional AWS resources (e.g., adding EC2 instances, creating VPCs, adding NAT Gateways, launching RDS instances).
  • Capacity planning or pre-launch readiness checks.
  • Proactive monitoring of quota utilization across services.

Prerequisites

  • The agent must have permissions to call Service Quotas APIs:
    • servicequotas:ListServices
    • servicequotas:ListServiceQuotas
    • servicequotas:GetServiceQuota
    • servicequotas:RequestServiceQuotaIncrease
    • servicequotas:ListRequestedServiceQuotaChangeHistory
    • servicequotas:CreateSupportCase
  • For utilization data via CloudWatch, the agent needs:
    • cloudwatch:GetMetricData
    • cloudwatch:GetMetricStatistics
  • Service Quotas is a regional service. Quotas must be checked in the region where resources are deployed.

Step 1: Identify the Service and Quota Context

Determine which service and quota to check based on the investigation context:

  1. From error messages — extract the service name and specific limit mentioned.
  2. From recommendations — if the recommendation is to provision resources, identify the service (e.g., EC2, VPC, RDS, Lambda, ELB) and the resource type.
  3. From alarms — if a CloudWatch alarm indicates capacity pressure, identify the underlying service.

Common service codes

AWS Service Service Code
Amazon EC2 ec2
Amazon VPC vpc
Elastic Load Balancing elasticloadbalancing
Amazon RDS rds
AWS Lambda lambda
Amazon ECS ecs
Amazon EKS eks
Amazon S3 s3
Amazon DynamoDB dynamodb
AWS Fargate fargate
Amazon CloudWatch monitoring
AWS CloudFormation cloudformation
Amazon SQS sqs
Amazon SNS sns
Amazon ElastiCache elasticache
Amazon OpenSearch Service es
Auto Scaling autoscaling

If you do not know the service code, use:

aws service-quotas list-services \
  --query "Services[?contains(ServiceName, '<keyword>')]" \
  --region <region>

Step 2: Retrieve Quota Value and Utilization

Get the applied quota value

aws service-quotas get-service-quota \
  --service-code <service-code> \
  --quota-code <quota-code> \
  --region <region>

The response includes:

  • Value — the current quota limit (applied value, or default if no increase was granted)
  • Adjustable — whether the quota can be increased
  • UsageMetric — CloudWatch metric to check current utilization (if available)

If you do not know the quota code

List all quotas for the service:

aws service-quotas list-service-quotas \
  --service-code <service-code> \
  --region <region>

Filter by quota name keyword:

aws service-quotas list-service-quotas \
  --service-code <service-code> \
  --region <region> \
  --query "Quotas[?contains(QuotaName, '<keyword>')]"

Get current utilization via CloudWatch

If the UsageMetric field is present in the quota response, query CloudWatch for actual usage:

aws cloudwatch get-metric-statistics \
  --namespace "<MetricNamespace>" \
  --metric-name "<MetricName>" \
  --dimensions <MetricDimensions> \
  --start-time "<15-minutes-ago-ISO8601>" \
  --end-time "<now-ISO8601>" \
  --period 300 \
  --statistics <MetricStatisticRecommendation> \
  --region <region>

The UsageMetric object from the quota response provides all the parameters:

  • MetricNamespace — typically AWS/Usage
  • MetricName — typically ResourceCount
  • MetricDimensions — service-specific dimensions (e.g., Class, Resource, Service, Type)
  • MetricStatisticRecommendation — either Maximum or Sum

Alternative: count resources directly

If no UsageMetric is available, count resources using the service's Describe/List APIs:

Service Command to count resources
EC2 instances aws ec2 describe-instances --query "Reservations[].Instances[] \| length(@)"
VPCs aws ec2 describe-vpcs --query "Vpcs \| length(@)"
NAT Gateways aws ec2 describe-nat-gateways --filter Name=state,Values=available --query "NatGateways \| length(@)"
EIPs aws ec2 describe-addresses --query "Addresses \| length(@)"
RDS instances aws rds describe-db-instances --query "DBInstances \| length(@)"
Lambda functions aws lambda list-functions --query "Functions \| length(@)"
ECS services aws ecs list-services --cluster <cluster> --query "serviceArns \| length(@)"
ALBs aws elbv2 describe-load-balancers --query "LoadBalancers \| length(@)"

Step 3: Calculate Utilization and Assess Risk

Calculate utilization percentage

utilization_pct = (current_usage / quota_value) × 100

Risk assessment thresholds

Utilization Risk Level Action
< 70% Low No action needed. Report current state.
70% – 84% Medium Flag as approaching limit. Monitor closely.
85% – 94% High Recommend quota increase. Proceed to Step 4.
95% – 100% Critical Urgent quota increase required. Proceed to Step 4.
= 100% Exhausted Quota is blocking operations. Immediate action required.

Present findings

Always show the user a summary table:

┌─────────────────────────────────────────────────────────────────────┐
│ Service Quota Check                                                  │
├─────────────────────────┬───────────┬─────────┬─────────┬───────────┤
│ Quota Name              │ Limit     │ Used    │ % Used  │ Status    │
├─────────────────────────┼───────────┼─────────┼─────────┼───────────┤
│ Running On-Demand (std) │ 1920 vCPU │ 1740    │ 90.6%   │ ⚠️ HIGH   │
│ VPCs per Region         │ 5         │ 5       │ 100%    │ 🚫 FULL   │
│ NAT Gateways per AZ    │ 5         │ 3       │ 60%     │ ✅ OK     │
└─────────────────────────┴───────────┴─────────┴─────────┴───────────┘

Step 4: Request Quota Increase

When utilization is at 85% or higher, proceed based on whether the quota is adjustable.

Decision Tree

Is utilization >= 85%?
├── NO → Report findings, no action needed
└── YES → Check "Adjustable" field
    ├── Adjustable = true → Proceed to quota increase request
    │   ├── Ask user to confirm the increase
    │   ├── User confirms → Submit request via API (Step 4a)
    │   └── User declines → Report findings only
    └── Adjustable = false → Recommend support case (Step 4b)

Step 4a: Submit Quota Increase Request via API

Before requesting, determine the desired new value. Use this formula:

desired_value = current_quota × 1.5   (50% increase over current limit)

If the quota is already exhausted (100% utilization), recommend:

desired_value = current_quota × 2.0   (double the current limit)

Present the recommendation to the user:

"The quota [QuotaName] is at [X]% utilization ([current_usage]/[quota_value]). I recommend increasing it to [desired_value]. Shall I submit the quota increase request?"

If the user confirms, submit the request:

aws service-quotas request-service-quota-increase \
  --service-code <service-code> \
  --quota-code <quota-code> \
  --desired-value <desired-value> \
  --region <region>

After submitting, check the response:

  • Status: PENDING — request submitted successfully. Inform the user that AWS will review the request (typically processed within minutes for auto-approved quotas, or up to a few days for manual review).
  • Status: CASE_OPENED — a support case was automatically created.

Report the request ID and status:

"Quota increase request submitted successfully.

  • Request ID: [Id]
  • Status: [Status]
  • Desired value: [DesiredValue]

You can check the status with: aws service-quotas get-requested-service-quota-change --request-id <Id>"

Step 4b: Recommend Support Case (non-adjustable quotas)

If the quota cannot be increased via the API (Adjustable: false), inform the user:

"The quota [QuotaName] cannot be increased programmatically via the Service Quotas API. To request an increase, you need to open an AWS Support case.

Would you like me to:

  1. Open a support case via the Service Quotas API (requires an existing pending quota increase request)
  2. Provide instructions to open a support case manually via the AWS Console"

If there is an existing pending request, use:

aws service-quotas create-support-case \
  --request-id <request-id> \
  --region <region>

Otherwise, provide manual instructions:

"To request this quota increase:

  1. Go to the AWS Support Center: https://console.aws.amazon.com/support/
  2. Create a new case → Service limit increase
  3. Select service: [ServiceName]
  4. Select quota: [QuotaName]
  5. Specify the new desired value: [desired_value]
  6. Provide business justification for the increase"

Step 5: Check for Pending Requests

Before submitting a new request, check if there is already a pending increase request:

aws service-quotas list-requested-service-quota-change-history-by-quota \
  --service-code <service-code> \
  --quota-code <quota-code> \
  --region <region> \
  --query "RequestedQuotas[?Status=='PENDING']"

If a pending request exists:

  • Report the existing request details (ID, desired value, date submitted)
  • Do NOT submit a duplicate request
  • Offer to create a support case to expedite the existing request if needed

Step 6: Post-Increase Verification

After a quota increase is approved, verify the new limit:

aws service-quotas get-service-quota \
  --service-code <service-code> \
  --quota-code <quota-code> \
  --region <region>

Confirm the Value field reflects the new limit.


Multi-Quota Check (Bulk Assessment)

When a recommendation involves provisioning multiple resource types, or for proactive capacity planning, check all relevant quotas for the service:

aws service-quotas list-service-quotas \
  --service-code <service-code> \
  --region <region>

For each quota that has a UsageMetric, calculate utilization. Report any quotas at 70%+ utilization as part of a comprehensive capacity report.


Common Quota Codes Reference

See references/common-quota-codes.md for a table of frequently checked quota codes by service.


Error Handling

Error Cause Resolution
NoSuchResourceException Quota code does not exist for the service Use list-service-quotas to find the correct code
TooManyRequestsException Service Quotas API is throttling Wait and retry with exponential backoff
ResourceAlreadyExistsException A pending request already exists Check existing requests (Step 5)
QuotaExceededException The desired value exceeds the maximum allowed Reduce the desired value or open a support case
AccessDeniedException Missing IAM permissions Check that the agent has servicequotas:* permissions
DependencyAccessDeniedException Missing permissions on the target service Verify IAM policies for the target service

Tips

  • Check the region: Service quotas are regional. Always query in the region where resources are deployed, unless the quota is global (check GlobalQuota: true).
  • Applied vs. default: get-service-quota returns the applied value (which may differ from the default if a previous increase was granted). Use get-aws-default-service-quota to see the original default.
  • Auto-approved vs. manual: Many quotas (especially EC2 vCPU limits) are auto-approved within minutes. Others require manual AWS review. The API does not indicate which type a quota is in advance — submit the request and monitor the status.
  • Resource-level quotas: Some quotas (e.g., OpenSearch instances per domain) are resource-level. Use --context-id with the resource ARN for these.
  • Rate-based quotas: Some quotas measure requests per second (e.g., API call rates). These require different monitoring approaches (CloudWatch metrics rather than resource counts).
Files (tools-for-devops-agent)
  • evals
    • evals.json 4.7 KB
      [
        {
          "id": "check-ec2-vcpu-quota-utilization",
          "prompt": "Check the EC2 On-Demand Standard vCPU quota utilization in us-east-1. We're planning to launch 100 more t3.large instances.",
          "expected_output": "The agent retrieves the EC2 On-Demand Standard vCPU quota (L-1216C47A), checks current utilization via CloudWatch or resource count, calculates the percentage used, and assesses whether 100 additional t3.large instances (200 vCPUs) can be launched within the current limit.",
          "assertions": [
            "The output references the EC2 service code or quota code L-1216C47A",
            "The output shows the current quota value (limit)",
            "The output calculates or reports current utilization as a percentage",
            "The output assesses whether the additional 200 vCPUs would exceed the quota"
          ]
        },
        {
          "id": "vpc-limit-exceeded-investigation",
          "prompt": "I'm getting a VpcLimitExceeded error when trying to create a new VPC in us-west-2. Investigate the quota.",
          "expected_output": "The agent checks the VPCs per Region quota (L-F678F1CE), finds it at or near 100% utilization, and recommends a quota increase since the limit is reached.",
          "assertions": [
            "The output identifies the VPC quota or quota code L-F678F1CE",
            "The output shows that the VPC quota is at or near its limit",
            "The output recommends or offers to request a quota increase",
            "The output does not produce an unrelated error"
          ]
        },
        {
          "id": "lambda-throttling-quota-check",
          "prompt": "Lambda functions are being throttled. Check if we're hitting the concurrent execution quota limit.",
          "expected_output": "The agent checks the Lambda concurrent executions quota (L-B99A9384), retrieves current utilization, and reports whether throttling is caused by the quota limit.",
          "assertions": [
            "The output identifies the Lambda concurrent executions quota",
            "The output shows the current quota limit value",
            "The output reports utilization or states whether the limit is being hit",
            "The output provides recommendations if utilization is high"
          ]
        },
        {
          "id": "request-quota-increase-flow",
          "prompt": "My NAT Gateway quota in eu-west-1 is at 4 out of 5. I need to create 2 more. Please request an increase.",
          "expected_output": "The agent confirms the NAT Gateway quota is at 80% (4/5), recognizes that adding 2 more would exceed the limit, and submits a quota increase request via the Service Quotas API after confirming with the user.",
          "assertions": [
            "The output shows current utilization (4 out of 5 or 80%)",
            "The output recognizes the need for a quota increase",
            "The output uses request-service-quota-increase or equivalent API",
            "The output reports the request status (PENDING or similar)"
          ]
        },
        {
          "id": "non-adjustable-quota-handling",
          "prompt": "I need to increase the S3 bucket quota but it says it's not adjustable. What should I do?",
          "expected_output": "The agent checks the S3 buckets quota, finds that Adjustable is false or the increase cannot be done via API, and recommends opening a support case with specific instructions.",
          "assertions": [
            "The output identifies that the quota is not adjustable via the API",
            "The output recommends opening a support case",
            "The output provides instructions on how to open the support case",
            "The output does not attempt to call request-service-quota-increase for a non-adjustable quota"
          ]
        },
        {
          "id": "bulk-quota-assessment",
          "prompt": "We're planning a major scaling event. Check all relevant quotas for EC2, VPC, and ELB in us-east-1 and flag any that are above 70% utilization.",
          "expected_output": "The agent checks quotas across EC2, VPC, and ELB services, calculates utilization for each, and presents a summary table flagging any quotas above 70%.",
          "assertions": [
            "The output checks quotas for multiple services (EC2, VPC, ELB)",
            "The output presents utilization data for multiple quotas",
            "The output flags or highlights any quotas above 70% utilization",
            "The output provides a structured summary or table"
          ]
        },
        {
          "id": "pending-request-detection",
          "prompt": "Request an increase for the RDS DB instances quota in us-east-1.",
          "expected_output": "The agent first checks for existing pending requests for the RDS DB instances quota before submitting a new one. If a pending request exists, it reports it rather than creating a duplicate.",
          "assertions": [
            "The output checks for existing pending requests before submitting",
            "The output either reports an existing pending request or submits a new one",
            "The output does not create a duplicate request if one is already pending",
            "The output shows the request ID and status"
          ]
        }
      ]
      
    • eval_queries.json 615 B
      [
        {
          "query": "How do I configure a CloudFront distribution with a custom SSL certificate?",
          "should_trigger": false
        },
        {
          "query": "What is the best way to set up a multi-AZ RDS deployment?",
          "should_trigger": false
        },
        {
          "query": "Explain the difference between S3 Standard and S3 Glacier storage classes.",
          "should_trigger": false
        },
        {
          "query": "How do I write a Lambda function in Python that processes SQS messages?",
          "should_trigger": false
        },
        {
          "query": "What IAM policies do I need for cross-account access to DynamoDB?",
          "should_trigger": false
        }
      ]
      
  • references
    • common-quota-codes.md 4.6 KB
      # Common Quota Codes Reference
      
      This reference lists frequently checked quota codes for common AWS services. Use these
      codes with `get-service-quota` and `request-service-quota-increase`.
      
      ## Amazon EC2
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) instances | L-1216C47A | 5 vCPU | vCPU |
      | Running On-Demand G and VT instances | L-DB2E81BA | 0 vCPU | vCPU |
      | Running On-Demand P instances | L-417A185B | 0 vCPU | vCPU |
      | Running On-Demand Inf instances | L-B5D1601B | 0 vCPU | vCPU |
      | Running Dedicated Standard (A, C, D, H, I, M, R, T, Z) Hosts | L-20F13EBD | 0 | None |
      | EC2-VPC Elastic IPs | L-0263D0A3 | 5 | None |
      | Public AMIs | L-0E3CBAB9 | 25 | None |
      
      ## Amazon VPC
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | VPCs per Region | L-F678F1CE | 5 | None |
      | Subnets per VPC | L-407747CB | 200 | None |
      | Internet gateways per Region | L-A4707A72 | 5 | None |
      | NAT gateways per Availability Zone | L-FE5A380F | 5 | None |
      | Network interfaces per Region | L-DF5E4CA3 | 5000 | None |
      | Security groups per Region | L-E79EC296 | 2500 | None |
      | Routes per route table | L-93826ACB | 50 | None |
      | Route tables per VPC | L-589F43AA | 200 | None |
      
      ## Elastic Load Balancing
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Application Load Balancers per Region | L-53DA6B97 | 50 | None |
      | Network Load Balancers per Region | L-69A177A2 | 50 | None |
      | Target groups per Region | L-B6DF7632 | 3000 | None |
      | Targets per Application Load Balancer | L-7E6692B2 | 1000 | None |
      | Listeners per Application Load Balancer | L-B6DF7632 | 50 | None |
      
      ## Amazon RDS
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | DB instances | L-7B6409FD | 40 | None |
      | DB clusters | L-952B80B8 | 40 | None |
      | Read replicas per primary | L-5480080B | 5 | None |
      | Manual DB instance snapshots | L-272F1212 | 100 | None |
      | Total storage for all DB instances (GiB) | L-7ADDB58A | 100000 | GiB |
      
      ## AWS Lambda
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Concurrent executions | L-B99A9384 | 1000 | None |
      | Function and layer storage | L-2ACBD22F | 75 GB | Gigabytes |
      | Elastic network interfaces per VPC | L-9FEE3D26 | 250 | None |
      
      ## Amazon ECS
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Clusters per account | L-21C621EB | 10000 | None |
      | Services per cluster | L-9A2EAEDE | 5000 | None |
      | Tasks per service | L-EE04B13E | 5000 | None |
      | Container instances per cluster | L-21C621EB | 5000 | None |
      
      ## AWS Fargate
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Fargate On-Demand resource count | L-790F3D0E | 500 | None |
      | Fargate Spot resource count | L-36FBB829 | 500 | None |
      
      ## Amazon DynamoDB
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Maximum number of tables | L-F98FE922 | 2500 | None |
      | Account-level read throughput limit (on-demand, per region) | L-B5A90E5F | 40000 | RCU |
      | Account-level write throughput limit (on-demand, per region) | L-4CF20C20 | 40000 | WCU |
      
      ## AWS CloudFormation
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Stack count | L-0485CB21 | 2000 | None |
      | Stack sets per administrator account | L-EC62D81A | 100 | None |
      | Resources per stack | L-844E580A | 500 | None |
      
      ## Amazon S3
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Buckets | L-DC2B2D3D | 100 | None |
      
      ## Amazon SNS
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Topics per account | L-61103206 | 100000 | None |
      | Subscriptions per topic | L-A4340BCD | 12500000 | None |
      
      ## Amazon SQS
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Queues per account | L-2BFD9882 | 1000000 | None |
      
      ## Auto Scaling
      
      | Quota Name | Quota Code | Default | Unit |
      |-----------|-----------|---------|------|
      | Auto Scaling groups per region | L-CDE20ADC | 200 | None |
      | Launch configurations per region | L-6B80B8FA | 200 | None |
      
      ---
      
      ## Notes
      
      - Default values shown are the AWS defaults. Your account may have different applied
        values if previous increases were granted.
      - Quota codes are stable identifiers that do not change, but new quotas may be added
        over time.
      - Use `list-service-quotas` to get the most current list for any service.
      - Some quotas listed here may be resource-level (not account-level) in newer API versions.
      
  • .skilleval.yaml 77 B
    audit:
      ignore:
        - STR-016    # README alongside SKILL.md is intentional
    
  • CHANGELOG.md 513 B
    # Changelog
    
    ## 1.0.0
    
    - Initial version
    - Quota value retrieval via get-service-quota and list-service-quotas
    - Utilization calculation using CloudWatch UsageMetric or resource counting
    - Risk assessment with 85% threshold for triggering increase recommendations
    - Automated quota increase request via request-service-quota-increase API
    - Support case recommendation for non-adjustable quotas
    - Duplicate request detection via pending request check
    - Common quota codes reference for frequently checked services
    
  • README.md 5.7 KB
    # Service Quota Check
    
    This skill enables the AWS DevOps Agent to check AWS service quota utilization during incident investigations, capacity planning, and before provisioning new resources.
    
    ## Purpose
    
    When operational issues arise from hitting AWS service limits, or when recommendations involve provisioning additional resources, this skill checks current quota values and utilization. It proactively identifies quotas at risk (85%+ utilization), requests increases via the Service Quotas API when possible, and guides users to open support cases when programmatic increases are not available.
    
    ## Key Capabilities
    
    - Retrieve current quota values and applied limits for any AWS service
    - Calculate real-time utilization using CloudWatch metrics or resource counts
    - Flag quotas at 85%+ utilization with risk-level assessment
    - Submit quota increase requests via the Service Quotas API
    - Check for existing pending increase requests to avoid duplicates
    - Recommend support case creation for non-adjustable quotas
    - Perform bulk quota assessments across all quotas for a service
    
    ## Prerequisites
    
    - Agent permissions for Service Quotas APIs: `servicequotas:ListServices`, `servicequotas:ListServiceQuotas`, `servicequotas:GetServiceQuota`, `servicequotas:RequestServiceQuotaIncrease`, `servicequotas:ListRequestedServiceQuotaChangeHistory`, `servicequotas:CreateSupportCase`
    - Agent permissions for CloudWatch: `cloudwatch:GetMetricData`, `cloudwatch:GetMetricStatistics`
    - For resource counting fallback: read-only permissions on target services (e.g., `ec2:DescribeInstances`, `rds:DescribeDBInstances`)
    
    ## Limitations
    
    - Service Quotas is a regional service; quotas must be checked in the correct region
    - Not all quotas have a `UsageMetric` in CloudWatch; some require manual resource counting
    - Some quotas are not adjustable via the API and require support cases
    - Quota increase requests may take minutes (auto-approved) to days (manual review)
    - Rate-based quotas (requests per second) require different monitoring than resource-count quotas
    
    ## Agent Types
    
    This skill is used by the following agent types:
    
    - **Chat tasks** — conversational quota lookup, capacity planning, and proactive checks
    - **Incident RCA** — quota exhaustion as root cause during active incidents
    
    ## Uploading to AWS DevOps Agent
    
    To deploy this skill to your Agent Space, you can use any of three ways:
    
    **Option A: Import from GitHub (recommended)**
    
    If you have a [GitHub connection configured](https://docs.aws.amazon.com/devopsagent/latest/userguide/connecting-to-cicd-pipelines-connecting-github.html) in your Agent Space, you can import this skill directly from the repository. In the DevOps Agent web app, go to Settings -> Add Skill -> Import from repository, then point to the `skills/service-quota-check` directory. See [Importing a skill from a repository](https://docs.aws.amazon.com/devopsagent/latest/userguide/about-aws-devops-agent-devops-agent-skills.html#creating-skills) for full instructions.
    
    > **Note:** You cannot connect the `aws` GitHub organization directly because the GitHub connection setup requires admin rights on the organization. Instead, connect your personal GitHub account and select any repository from it during the connection setup. Once a GitHub connection is established, you can import skills from any public repository — including this one — even if it wasn't selected during the connection setup.
    
    **Option B: Upload as a zip file**
    
    1. Zip the `service-quota-check/` directory (only including allowed extensions):
    
       ```bash
       cd skills
       zip -r service-quota-check.zip service-quota-check/ -i '*.md' '*.txt' '*.json' '*.yaml' '*.yml' '*.xml' '*.csv' '*.tsv' '*.html' '*.htm' '*.png' '*.jpg' '*.jpeg' '*.gif' '*.svg' '*.webp' '*.pdf' -x '*/.claude/*' '*/scripts/*' '*/README.md' '*/.skilleval.yaml' '*/.skilleval.yml' '*/CHANGELOG.md' '*/evals/*'
       ```
    
    2. In the AWS DevOps Agent web app, navigate to the **Skills** page.
    3. Click **Add skill** -> **Upload skill**.
    4. Drag and drop the `service-quota-check.zip` file (max 6 MB).
    5. Select the agent types: **Chat tasks** and **Incident RCA**.
    6. Click **Upload**.
    
    **Option C: Upload via the Asset API**
    
    Use the AWS DevOps Agent Asset API to programmatically manage skills — useful for CI/CD pipelines or automation workflows. Assign the skill to the `CHAT` and `INCIDENT_RCA` agent types. See [Managing a skill end-to-end](https://docs.aws.amazon.com/devopsagent/latest/userguide/about-aws-devops-agent-managing-assets.html#managing-a-skill-end-to-end) for the full API workflow.
    
    For more details, see [Uploading a skill](https://docs.aws.amazon.com/devopsagent/latest/userguide/about-aws-devops-agent-devops-agent-skills.html#creating-skills) in the AWS DevOps Agent User Guide.
    
    ## How to Use This Skill
    
    This skill is most suitable for chat and investigation. Below are sample prompts for each use-case.
    
    ### Chat
    
    - "Check the EC2 vCPU quota utilization in us-east-1."
    - "What's my current VPC quota and how many VPCs am I using?"
    - "Show me all quotas for Lambda that are above 70% utilization."
    - "Can I launch 50 more t3.large instances without hitting the quota?"
    - "List all service quotas that are near their limits across EC2, VPC, and RDS."
    - "Request an increase for my NAT Gateway quota in eu-west-1."
    
    ### Investigation
    
    - "I'm getting LimitExceededException when creating a new VPC. Check quotas."
    - "Lambda function invocations are being throttled. Check if we're hitting concurrent execution limits."
    - "EC2 instance launch failed with InsufficientInstanceCapacity. Is this a quota issue?"
    - "We need to scale our ECS cluster but tasks are failing to start. Check Fargate quotas."
    - "The recommendation is to add more read replicas for RDS. Check if the quota allows it."
    - "CloudFormation stack creation failed — investigate if we hit the stack count limit."
    
  • SKILL.md 14 KB
    ---
    name: service-quota-check
    description: Use this skill during any incident investigation, capacity planning, or
      operational troubleshooting when the issue may be caused by hitting AWS service limits.
      Activate when you observe throttling errors (ThrottlingException, TooManyRequestsException,
      LimitExceededException), resource creation failures, capacity-related alarms, or when
      a recommendation involves provisioning new AWS resources.
    metadata:
      author: yuriypr
      version: "1.0.0"
      aws-devops-agent-skills.agent-types: "Chat tasks, Incident RCA"
      aws-devops-agent-skills.aws-services: "AWS Service Quotas, Amazon CloudWatch"
      aws-devops-agent-skills.technical-domains: "Operations, Capacity Planning"
    ---
    
    # Service Quota Check
    
    Use this skill to check AWS service quota utilization during investigations and before
    provisioning new resources. It determines whether a quota is nearing its limit (85%+
    utilization) and takes action: requesting a quota increase via the Service Quotas API
    when possible, or recommending a support case when programmatic increases are not supported.
    
    ## When to Use This Skill
    
    - An error message indicates throttling or limit exceeded (e.g., `ThrottlingException`,
      `TooManyRequestsException`, `LimitExceededException`, `ResourceLimitExceeded`).
    - A resource creation or scaling operation fails with capacity errors.
    - An investigation recommendation involves provisioning additional AWS resources
      (e.g., adding EC2 instances, creating VPCs, adding NAT Gateways, launching RDS instances).
    - Capacity planning or pre-launch readiness checks.
    - Proactive monitoring of quota utilization across services.
    
    ## Prerequisites
    
    - The agent must have permissions to call Service Quotas APIs:
      - `servicequotas:ListServices`
      - `servicequotas:ListServiceQuotas`
      - `servicequotas:GetServiceQuota`
      - `servicequotas:RequestServiceQuotaIncrease`
      - `servicequotas:ListRequestedServiceQuotaChangeHistory`
      - `servicequotas:CreateSupportCase`
    - For utilization data via CloudWatch, the agent needs:
      - `cloudwatch:GetMetricData`
      - `cloudwatch:GetMetricStatistics`
    - Service Quotas is a regional service. Quotas must be checked in the region
      where resources are deployed.
    
    ---
    
    ## Step 1: Identify the Service and Quota Context
    
    Determine which service and quota to check based on the investigation context:
    
    1. **From error messages** — extract the service name and specific limit mentioned.
    2. **From recommendations** — if the recommendation is to provision resources, identify
       the service (e.g., EC2, VPC, RDS, Lambda, ELB) and the resource type.
    3. **From alarms** — if a CloudWatch alarm indicates capacity pressure, identify the
       underlying service.
    
    ### Common service codes
    
    | AWS Service | Service Code |
    |-------------|-------------|
    | Amazon EC2 | `ec2` |
    | Amazon VPC | `vpc` |
    | Elastic Load Balancing | `elasticloadbalancing` |
    | Amazon RDS | `rds` |
    | AWS Lambda | `lambda` |
    | Amazon ECS | `ecs` |
    | Amazon EKS | `eks` |
    | Amazon S3 | `s3` |
    | Amazon DynamoDB | `dynamodb` |
    | AWS Fargate | `fargate` |
    | Amazon CloudWatch | `monitoring` |
    | AWS CloudFormation | `cloudformation` |
    | Amazon SQS | `sqs` |
    | Amazon SNS | `sns` |
    | Amazon ElastiCache | `elasticache` |
    | Amazon OpenSearch Service | `es` |
    | Auto Scaling | `autoscaling` |
    
    If you do not know the service code, use:
    
    ```bash
    aws service-quotas list-services \
      --query "Services[?contains(ServiceName, '<keyword>')]" \
      --region <region>
    ```
    
    ---
    
    ## Step 2: Retrieve Quota Value and Utilization
    
    ### Get the applied quota value
    
    ```bash
    aws service-quotas get-service-quota \
      --service-code <service-code> \
      --quota-code <quota-code> \
      --region <region>
    ```
    
    The response includes:
    - `Value` — the current quota limit (applied value, or default if no increase was granted)
    - `Adjustable` — whether the quota can be increased
    - `UsageMetric` — CloudWatch metric to check current utilization (if available)
    
    ### If you do not know the quota code
    
    List all quotas for the service:
    
    ```bash
    aws service-quotas list-service-quotas \
      --service-code <service-code> \
      --region <region>
    ```
    
    Filter by quota name keyword:
    
    ```bash
    aws service-quotas list-service-quotas \
      --service-code <service-code> \
      --region <region> \
      --query "Quotas[?contains(QuotaName, '<keyword>')]"
    ```
    
    ### Get current utilization via CloudWatch
    
    If the `UsageMetric` field is present in the quota response, query CloudWatch for actual usage:
    
    ```bash
    aws cloudwatch get-metric-statistics \
      --namespace "<MetricNamespace>" \
      --metric-name "<MetricName>" \
      --dimensions <MetricDimensions> \
      --start-time "<15-minutes-ago-ISO8601>" \
      --end-time "<now-ISO8601>" \
      --period 300 \
      --statistics <MetricStatisticRecommendation> \
      --region <region>
    ```
    
    The `UsageMetric` object from the quota response provides all the parameters:
    - `MetricNamespace` — typically `AWS/Usage`
    - `MetricName` — typically `ResourceCount`
    - `MetricDimensions` — service-specific dimensions (e.g., `Class`, `Resource`, `Service`, `Type`)
    - `MetricStatisticRecommendation` — either `Maximum` or `Sum`
    
    ### Alternative: count resources directly
    
    If no `UsageMetric` is available, count resources using the service's Describe/List APIs:
    
    | Service | Command to count resources |
    |---------|---------------------------|
    | EC2 instances | `aws ec2 describe-instances --query "Reservations[].Instances[] \| length(@)"` |
    | VPCs | `aws ec2 describe-vpcs --query "Vpcs \| length(@)"` |
    | NAT Gateways | `aws ec2 describe-nat-gateways --filter Name=state,Values=available --query "NatGateways \| length(@)"` |
    | EIPs | `aws ec2 describe-addresses --query "Addresses \| length(@)"` |
    | RDS instances | `aws rds describe-db-instances --query "DBInstances \| length(@)"` |
    | Lambda functions | `aws lambda list-functions --query "Functions \| length(@)"` |
    | ECS services | `aws ecs list-services --cluster <cluster> --query "serviceArns \| length(@)"` |
    | ALBs | `aws elbv2 describe-load-balancers --query "LoadBalancers \| length(@)"` |
    
    ---
    
    ## Step 3: Calculate Utilization and Assess Risk
    
    ### Calculate utilization percentage
    
    ```
    utilization_pct = (current_usage / quota_value) × 100
    ```
    
    ### Risk assessment thresholds
    
    | Utilization | Risk Level | Action |
    |------------|------------|--------|
    | < 70% | Low | No action needed. Report current state. |
    | 70% – 84% | Medium | Flag as approaching limit. Monitor closely. |
    | 85% – 94% | High | Recommend quota increase. Proceed to Step 4. |
    | 95% – 100% | Critical | Urgent quota increase required. Proceed to Step 4. |
    | = 100% | Exhausted | Quota is blocking operations. Immediate action required. |
    
    ### Present findings
    
    Always show the user a summary table:
    
    ```
    ┌─────────────────────────────────────────────────────────────────────┐
    │ Service Quota Check                                                  │
    ├─────────────────────────┬───────────┬─────────┬─────────┬───────────┤
    │ Quota Name              │ Limit     │ Used    │ % Used  │ Status    │
    ├─────────────────────────┼───────────┼─────────┼─────────┼───────────┤
    │ Running On-Demand (std) │ 1920 vCPU │ 1740    │ 90.6%   │ ⚠️ HIGH   │
    │ VPCs per Region         │ 5         │ 5       │ 100%    │ 🚫 FULL   │
    │ NAT Gateways per AZ    │ 5         │ 3       │ 60%     │ ✅ OK     │
    └─────────────────────────┴───────────┴─────────┴─────────┴───────────┘
    ```
    
    ---
    
    ## Step 4: Request Quota Increase
    
    When utilization is at 85% or higher, proceed based on whether the quota is adjustable.
    
    ### Decision Tree
    
    ```
    Is utilization >= 85%?
    ├── NO → Report findings, no action needed
    └── YES → Check "Adjustable" field
        ├── Adjustable = true → Proceed to quota increase request
        │   ├── Ask user to confirm the increase
        │   ├── User confirms → Submit request via API (Step 4a)
        │   └── User declines → Report findings only
        └── Adjustable = false → Recommend support case (Step 4b)
    ```
    
    ### Step 4a: Submit Quota Increase Request via API
    
    Before requesting, determine the desired new value. Use this formula:
    
    ```
    desired_value = current_quota × 1.5   (50% increase over current limit)
    ```
    
    If the quota is already exhausted (100% utilization), recommend:
    
    ```
    desired_value = current_quota × 2.0   (double the current limit)
    ```
    
    Present the recommendation to the user:
    
    > "The quota **[QuotaName]** is at **[X]%** utilization ([current_usage]/[quota_value]).
    > I recommend increasing it to **[desired_value]**. Shall I submit the quota increase
    > request?"
    
    If the user confirms, submit the request:
    
    ```bash
    aws service-quotas request-service-quota-increase \
      --service-code <service-code> \
      --quota-code <quota-code> \
      --desired-value <desired-value> \
      --region <region>
    ```
    
    After submitting, check the response:
    - `Status: PENDING` — request submitted successfully. Inform the user that AWS will
      review the request (typically processed within minutes for auto-approved quotas,
      or up to a few days for manual review).
    - `Status: CASE_OPENED` — a support case was automatically created.
    
    Report the request ID and status:
    
    > "Quota increase request submitted successfully.
    > - Request ID: [Id]
    > - Status: [Status]
    > - Desired value: [DesiredValue]
    >
    > You can check the status with:
    > `aws service-quotas get-requested-service-quota-change --request-id <Id>`"
    
    ### Step 4b: Recommend Support Case (non-adjustable quotas)
    
    If the quota cannot be increased via the API (`Adjustable: false`), inform the user:
    
    > "The quota **[QuotaName]** cannot be increased programmatically via the Service
    > Quotas API. To request an increase, you need to open an AWS Support case.
    >
    > Would you like me to:
    > 1. Open a support case via the Service Quotas API (requires an existing pending
    >    quota increase request)
    > 2. Provide instructions to open a support case manually via the AWS Console"
    
    If there is an existing pending request, use:
    
    ```bash
    aws service-quotas create-support-case \
      --request-id <request-id> \
      --region <region>
    ```
    
    Otherwise, provide manual instructions:
    
    > "To request this quota increase:
    > 1. Go to the AWS Support Center: https://console.aws.amazon.com/support/
    > 2. Create a new case → Service limit increase
    > 3. Select service: [ServiceName]
    > 4. Select quota: [QuotaName]
    > 5. Specify the new desired value: [desired_value]
    > 6. Provide business justification for the increase"
    
    ---
    
    ## Step 5: Check for Pending Requests
    
    Before submitting a new request, check if there is already a pending increase request:
    
    ```bash
    aws service-quotas list-requested-service-quota-change-history-by-quota \
      --service-code <service-code> \
      --quota-code <quota-code> \
      --region <region> \
      --query "RequestedQuotas[?Status=='PENDING']"
    ```
    
    If a pending request exists:
    - Report the existing request details (ID, desired value, date submitted)
    - Do NOT submit a duplicate request
    - Offer to create a support case to expedite the existing request if needed
    
    ---
    
    ## Step 6: Post-Increase Verification
    
    After a quota increase is approved, verify the new limit:
    
    ```bash
    aws service-quotas get-service-quota \
      --service-code <service-code> \
      --quota-code <quota-code> \
      --region <region>
    ```
    
    Confirm the `Value` field reflects the new limit.
    
    ---
    
    ## Multi-Quota Check (Bulk Assessment)
    
    When a recommendation involves provisioning multiple resource types, or for proactive
    capacity planning, check all relevant quotas for the service:
    
    ```bash
    aws service-quotas list-service-quotas \
      --service-code <service-code> \
      --region <region>
    ```
    
    For each quota that has a `UsageMetric`, calculate utilization. Report any quotas
    at 70%+ utilization as part of a comprehensive capacity report.
    
    ---
    
    ## Common Quota Codes Reference
    
    See [references/common-quota-codes.md](references/common-quota-codes.md) for a table of
    frequently checked quota codes by service.
    
    ---
    
    ## Error Handling
    
    | Error | Cause | Resolution |
    |-------|-------|-----------|
    | `NoSuchResourceException` | Quota code does not exist for the service | Use `list-service-quotas` to find the correct code |
    | `TooManyRequestsException` | Service Quotas API is throttling | Wait and retry with exponential backoff |
    | `ResourceAlreadyExistsException` | A pending request already exists | Check existing requests (Step 5) |
    | `QuotaExceededException` | The desired value exceeds the maximum allowed | Reduce the desired value or open a support case |
    | `AccessDeniedException` | Missing IAM permissions | Check that the agent has `servicequotas:*` permissions |
    | `DependencyAccessDeniedException` | Missing permissions on the target service | Verify IAM policies for the target service |
    
    ---
    
    ## Tips
    
    - **Check the region**: Service quotas are regional. Always query in the region where
      resources are deployed, unless the quota is global (check `GlobalQuota: true`).
    - **Applied vs. default**: `get-service-quota` returns the applied value (which may differ
      from the default if a previous increase was granted). Use `get-aws-default-service-quota`
      to see the original default.
    - **Auto-approved vs. manual**: Many quotas (especially EC2 vCPU limits) are auto-approved
      within minutes. Others require manual AWS review. The API does not indicate which type
      a quota is in advance — submit the request and monitor the status.
    - **Resource-level quotas**: Some quotas (e.g., OpenSearch instances per domain) are
      resource-level. Use `--context-id` with the resource ARN for these.
    - **Rate-based quotas**: Some quotas measure requests per second (e.g., API call rates).
      These require different monitoring approaches (CloudWatch metrics rather than resource counts).
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related