AWS

ServiceQuotaExceededException - Service Quota Exceeded

Hitting a **ServiceQuotaExceededException** means your request would exceed an AWS Service Quota (formerly soft limits)—you've reached the maximum allowed for a specific service quota like EC2 instances, DynamoDB tables, or IAM roles. This client-side error (4xx) happens when AWS enforces service quotas. Most common when creating too many EC2 instances or DynamoDB tables, but also appears when regional quotas are exceeded, account-level quotas are hit, or quotas haven't been increased from defaults.

#Common Causes

  • Identity: IAM role/user quota exceeded. Service Control Policy (SCP) enforces lower quotas. Account-level restrictions active.
  • Network: VPC endpoint quotas. Security Group quotas (50 rules per group). NACL quotas (20 rules per direction).
  • Limits: EC2 instance quota (default 20 per region). DynamoDB table quota (256 per region). IAM role quota (5000 per account). Regional quota limit reached. Account-level quota exceeded.

Solutions

  1. 1Step 1: Diagnose - Check current quota usage: aws service-quotas get-service-quota --service-code SERVICE_CODE --quota-code QUOTA_CODE --query '[QuotaName,Value,UsageMetric]' --output table. Compare usage vs limit.
  2. 2Step 2: Diagnose - List all service quotas: aws service-quotas list-service-quotas --service-code ec2 --query 'Quotas[*].[QuotaName,Value,Adjustable]' --output table. Find which quota is exceeded.
  3. 3Step 3: Diagnose - Check quota increase requests: aws service-quotas list-requested-service-quota-change-history --service-code SERVICE_CODE --query 'RequestedQuotas[*].[QuotaName,DesiredValue,Status]' --output table. See if increase is pending.
  4. 4Step 4: Fix - Request quota increase: aws service-quotas request-service-quota-increase --service-code SERVICE_CODE --quota-code QUOTA_CODE --desired-value NEW_VALUE. Check request status.
  5. 5Step 5: Fix - Delete unused resources or use different region: Delete unused EC2 instances: aws ec2 terminate-instances --instance-ids i-xxxxx. Or use different region with available quota. Wait for quota increase approval if requested.

</>Code Examples

Check Current Service Quota Usage
1#!/bin/bash
2SERVICE_CODE="ec2"
3QUOTA_CODE="L-34B43A08"  # Running On-Demand EC2 instances
4
5# Get specific quota
6echo "=== Service Quota Details ==="
7aws service-quotas get-service-quota \
8  --service-code ${SERVICE_CODE} \
9  --quota-code ${QUOTA_CODE} \
10  --query '[QuotaName,Value,UsageMetric]' \
11  --output table
12
13# List all quotas for service
14echo "\n=== All EC2 Service Quotas ==="
15aws service-quotas list-service-quotas \
16  --service-code ${SERVICE_CODE} \
17  --query 'Quotas[*].[QuotaName,Value,Adjustable]' \
18  --output table | head -20
19
20# Check current usage (if UsageMetric available)
21echo "\n=== Current Usage ==="
22CURRENT_USAGE=$(aws ec2 describe-instances \
23  --query 'length(Reservations[*].Instances[*])' \
24  --output text)
25echo "Current EC2 instances: ${CURRENT_USAGE}"
Request Service Quota Increase
1#!/bin/bash
2SERVICE_CODE="ec2"
3QUOTA_CODE="L-34B43A08"  # Running On-Demand EC2 instances
4CURRENT_VALUE=20
5DESIRED_VALUE=50
6
7echo "=== Requesting Quota Increase ==="
8echo "Service: ${SERVICE_CODE}"
9echo "Quota Code: ${QUOTA_CODE}"
10echo "Current Value: ${CURRENT_VALUE}"
11echo "Desired Value: ${DESIRED_VALUE}"
12
13# Request increase
14aws service-quotas request-service-quota-increase \
15  --service-code ${SERVICE_CODE} \
16  --quota-code ${QUOTA_CODE} \
17  --desired-value ${DESIRED_VALUE}
18
19# Check request status
20echo "\n=== Quota Increase Request Status ==="
21aws service-quotas list-requested-service-quota-change-history \
22  --service-code ${SERVICE_CODE} \
23  --query 'RequestedQuotas[*].[QuotaName,DesiredValue,Status,Created]' \
24  --output table
Delete Unused Resources to Free Up Quota
1#!/bin/bash
2# List stopped EC2 instances
3echo "=== Stopped EC2 Instances ==="
4aws ec2 describe-instances \
5  --filters "Name=instance-state-name,Values=stopped" \
6  --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,LaunchTime]' \
7  --output table
8
9# List empty DynamoDB tables
10echo "\n=== DynamoDB Tables ==="
11aws dynamodb list-tables --output table
12
13# Count current resources vs quota
14echo "\n=== Resource Count vs Quota ==="
15INSTANCE_COUNT=$(aws ec2 describe-instances \
16  --query 'length(Reservations[*].Instances[*])' \
17  --output text)
18echo "Current instances: ${INSTANCE_COUNT}"
19
20# Get quota limit
21QUOTA_LIMIT=$(aws service-quotas get-service-quota \
22  --service-code ec2 \
23  --quota-code L-34B43A08 \
24  --query 'Quota.Value' \
25  --output text)
26echo "Quota limit: ${QUOTA_LIMIT}"
27
28if [ ${INSTANCE_COUNT} -ge ${QUOTA_LIMIT} ]; then
29  echo "✗ Quota exceeded! Delete unused instances or request increase"
30else
31  echo "✓ Within quota (${INSTANCE_COUNT}/${QUOTA_LIMIT})"
32fi

Related Errors

Provider Information

This error code is specific to AWS services. For more information, refer to the official AWS documentation.

ServiceQuotaExceededException - Service Quota Exceeded | AWS Error Reference | Error Code Reference