目次
AWS Service Quotas 完全ガイド v2.0
AWS サービス使用制限の一元管理・自動スケーリング
AWS Service Quotas は、AWS サービスの使用制限(クォータ・リミット)を一元管理・申請・監視するサービス である。EC2 インスタンス上限・Lambda 同時実行数・VPC 数・RDS インスタンス数などのクォータをコンソール / API から確認し、クォータ引き上げリクエストを申請できる。CloudWatch との統合で使用率 80% 超過時に自動アラーム、Terraform / CloudFormation での IaC 管理、Organizations 全アカウントへのクォータテンプレート一括適用も可能。本ドキュメントは Service Quotas の概念・クォータ管理・自動スケーリング・ベストプラクティスを体系的に解説。
ドキュメントの目的
本ガイドは以下を対象としています。
- DevOps / インフラエンジニア向け:クォータ管理・キャパシティプランニング
- SRE 向け:CloudWatch アラーム + Lambda による自動クォータ引き上げ
- Platform Team 向け:Organizations クォータテンプレート・一元管理
- コスト最適化 Team 向け:リソース使用率と制限の可視化・効率化
- 意思決定者向け:Azure Resource Manager・GCP Resource Quotas との比較
2025-2026 年の Service Quotas エコシステム
- 自動スケーリングクォータ:使用率に基づいて自動的にクォータ引き上げ(オプトイン)
- ML 駆動の推奨:機械学習で必要なクォータを予測、事前申請の提案
- Resource Tagging 統合:タグベースのクォータ管理・チャージバック
- Terraform・CDK での完全管理:IaC による宣言的クォータ定義
- Real-time Quota API:使用率のリアルタイム取得、キャッシング削減
目次
- 概要・課題・特徴
- Service Quotas が解決する課題
- 主な特徴
- アーキテクチャ・概念
- クォータ体系・主要クォータ一覧
- コアコンポーネント詳細
- 主要ユースケース(10+)
- 設定・操作の具体例
- 類似サービス比較表
- ベストプラクティス
- トラブルシューティング
- 2025-2026 最新動向
- 学習リソース・参考文献
- 実装チェックリスト・導入ロードマップ
- まとめ
概要・課題・特徴
本質
AWS Service Quotas は「AWS サービスの使用上限をコンソール・API から一元管理し、制限に達する前に引き上げ申請できるサービス」。
各 AWS サービスは デフォルトクォータ を設定しており(例:EC2 vCPU 上限 32、Lambda 同時実行数 1,000)、制限を超えるとサービスが停止される。Service Quotas を使用することで、以下を実現する。
- クォータ枯渇の事前防止:CloudWatch で使用率 80% 検知 → 自動アラーム・引き上げ申請
- IaC・CI/CD への統合:Terraform でインフラコード化、デプロイ前にクォータ充足確認
- Organizations 全アカウント管理:クォータテンプレートを一括適用、新規アカウント自動セットアップ
- API ドリブン運用:Lambda で自動判断・クォータ引き上げリクエスト
Service Quotas が解決する課題
| 課題 | Service Quotas の解決策 |
|---|---|
| スケールアウト時のクォータ枯渇 | CloudWatch で事前アラーム → 80% 到達時に引き上げ申請 |
| 複数サービスのクォータを分散管理 | Service Quotas コンソール 1 つで全サービスのクォータ横断確認 |
| 新規 AWS アカウントのセットアップ遅延 | クォータテンプレート一括適用 → 自動でクォータ引き上げ申請 |
| CI/CD パイプラインの予期しない失敗 | デプロイ前にクォータ充足確認 → キャパシティ不足で失敗するまで待たない |
| リージョン別・アカウント別のクォータ値の不一致 | クォータテンプレートで統一値管理 |
| 本番環境でのスケーリング限界 | 月間・年間予測使用量に基づいて事前にクォータ引き上げ |
主な特徴
1. クォータの種類
┌──────────────────────┬──────────────────────┬────────────────────┐
│ クォータ種別 │ 説明 │ 引き上げ可否 │
├──────────────────────┼──────────────────────┼────────────────────┤
│ Adjustable(調整可) │ AWS が引き上げを許可 │ ✅ 引き上げ可能 │
│ Non-adjustable │ AWS が変更不可に指定 │ ❌ 引き上げ不可 │
│ Account-level │ アカウント全体に適用 │ 全リージョン共通 │
│ Region-level │ リージョンごとに適用 │ リージョン単位申請 │
│ Resource-level │ リソース個別に適用 │ リソース ARN 指定 │
└──────────────────────┴──────────────────────┴────────────────────┘
2. CloudWatch 統合
フロー:
Service Quotas メトリクス(使用率)
↓ CloudWatch に自動公開
CloudWatch Alarm(80% threshold)
↓ トリガー
SNS / Lambda
├─ Slack 通知
└─ Lambda で自動クォータ引き上げリクエスト
3. IaC・Terraform サポート
Terraform で宣言的にクォータ管理:
resource "aws_servicequotas_service_quota" "lambda_concurrency" {
service_code = "lambda"
quota_code = "L-B99A9384"
value = 3000 # 1,000 → 3,000 に引き上げ
}
4. Organizations テンプレート
管理アカウントでクォータテンプレート定義
↓
メンバーアカウント作成時に自動適用
↓
全アカウント・全リージョンで統一クォータ値
Service Quotas が解決する課題
ビジネス課題
-
本番デプロイの突然のキャパシティ上限エラー
- ローンチ直前に「EC2 vCPU 上限に達した」で止まる
- 引き上げ申請に数日 → ビジネス損失
- Service Quotas で事前計画 → 計画通りローンチ
-
SaaS のユーザー増加への自動スケール対応
- 顧客が月 50 人 → 200 人に増加
- Lambda 同時実行数・RDS ストレージが追いつかない
- Service Quotas + Lambda で自動スケーリング
-
複数 AWS アカウント間のクォータ不一致
- 本番アカウント = Lambda クォータ 3,000
- 開発アカウント = Lambda クォータ 1,000(テスト失敗)
- クォータテンプレート一元管理で統一
技術課題
-
CI/CD パイプラインの予測不可能な失敗
デプロイ時に Lambda 関数数 100 個追加 → クォータ 500 に達してエラー → Service Quotas API で事前確認 → キャパシティプランニング -
マルチリージョン運用のクォータ管理
東京リージョン(ap-northeast-1)と大阪リージョン(ap-northeast-2) で異なるクォータ設定 → Service Quotas で統一管理 -
キャパシティプランニングの属人化
SRE の頭の中でのみ「月あたり何リソースが必要か」管理 → Service Quotas API で可視化 → チームで共有可能
主な特徴
Service Quotas アーキテクチャ
graph TB
SQ["Service Quotas<br/>コンソール / API"]
QA["Quota Analysis<br/>現在の使用率"]
AR["Adjustment Request<br/>引き上げ申請"]
CW["CloudWatch<br/>メトリクス"]
Services["AWS Services<br/>EC2, Lambda, RDS, DynamoDB..."]
Template["Quota Template<br/>Organizations"]
SQ --> QA
SQ --> AR
QA --> CW
AR --> Services
Template --> Services
CW -.-> Alarm["CloudWatch Alarm"]
Alarm -.-> Lambda["Lambda<br/>自動引き上げ"]
Lambda -.-> AR
リージョンレベル vs アカウントレベル
┌────────────────────────────┬─────────────┬──────────────────┐
│ クォータ例 │ レベル │ 申請方法 │
├────────────────────────────┼─────────────┼──────────────────┤
│ VPC 数 │ Region │ リージョンごと │
│ Lambda 同時実行数 │ Account │ 全リージョン共通 │
│ EC2 vCPU(オンデマンド) │ Region │ リージョンごと │
│ RDS インスタンス数 │ Account │ 全リージョン共通 │
│ DynamoDB テーブル数 │ Account │ 全リージョン共通 │
│ Elastic IP 数 │ Region │ リージョンごと │
│ S3 バケット数 │ Account │ 全リージョン共通 │
│ ELB 数(ALB/NLB) │ Region │ リージョンごと │
└────────────────────────────┴─────────────┴──────────────────┘
アーキテクチャ・概念
クォータリクエストのライフサイクル
Step 1: リクエスト作成
aws service-quotas request-service-quota-increase \
--service-code lambda \
--quota-code L-B99A9384 \
--desired-value 3000
Status: PENDING (審査中)
Step 2: AWS 審査
通常 1-3 営業日
AWS が以下を確認:
- アカウント実績
- クレジット履歴
- 妥当性判定
Step 3: 承認 / 却下
Status: APPROVED / DENIED / CASE_OPENED
承認時:
→ クォータが即座に反映
→ 変更は CloudTrail に記録
→ CloudWatch メトリクスが更新
Step 4: リクエスト確認
aws service-quotas list-requested-service-quota-changes
キャッシュ vs リアルタイム取得
CloudWatch メトリクス(遅延 1-2 分):
✓ 使用率トレンド可視化
✓ 履歴データ保持
❌ リアルタイム判定には不向き
Service Quotas GetQuota API(リアルタイム):
✓ デプロイ時の即時判定
✓ 正確な残容量確認
❌ API レート制限(最大 40 req/sec)
クォータ体系・主要クォータ一覧
EC2 クォータ
デフォルト値:
Running On-Demand Standard instances
→ vCPU 単位(リージョン別)
→ デフォルト:32 vCPU
→ 例:t3.medium(1 vCPU)100 個 = 100 vCPU 消費
Elastic IP addresses
→ アカウント全体:5 個(リージョンごと)
→ デフォルト:5
VPC
→ リージョンごと:5 個
→ Elastic Network Interfaces:350 個/リージョン
On-Demand Instance Limit by Instance Type
→ c5.large, t3.medium などインスタンスタイプ別
→ 各タイプのデフォルト異なる
Lambda クォータ
Concurrent executions
→ アカウント・リージョン全体:1,000
→ 個別 Lambda 関数:制限なし
Storage
→ /tmp(一時ファイル):512 MB
→ 全レイヤー合計:250 MB
→ 環境変数:4 KB
Memory and timeout
→ メモリ:128 MB~ 10,240 MB
→ タイムアウト:900 秒(15 分)
RDS クォータ
DB instances
→ アカウント全体:40 個
→ ストレージ:65,536 GB / DB インスタンス
Read Replicas
→ 1 DB インスタンスあたり:15 個
→ クロスリージョン:制限なし(リージョンクォータ適用)
Backup storage
→ 自動バックアップ:DB サイズ分無料
→ 追加 backup storage:アカウント合計 100 TB
DynamoDB クォータ
Table per Account
→ 2,500 個(Account-level)
Throughput(オンデマンドモード)
→ Write Capacity Units:40,000 WCU/秒/テーブル
→ Read Capacity Units:40,000 RCU/秒/テーブル
Item Size
→ 1 アイテム:最大 400 KB
→ パーティションキー:最大 2,048 bytes
VPC 関連クォータ
VPC
→ リージョンごと:5 個
Subnets per VPC
→ 200 個
Security Groups per VPC
→ 500 個
Route Tables per VPC
→ 200 個
NAT Gateways per AZ
→ リージョンあたり:5 個(リージョン制限)
その他主要クォータ
CloudFormation Stacks
→ アカウント全体:10,000 個
IAM Policies per Role
→ 10 個
Elastic Container Registry(ECR)Images per Repository
→ 1,000 個
SNS Topics
→ アカウント全体:100,000 個
SQS Queue
→ アカウント全体:制限なし
コアコンポーネント詳細
1. Service Quotas コンソール
機能:
Quotas ページ
→ サービス別クォータ一覧
→ 現在値・使用率表示
→ Adjustable / Non-adjustable フラグ
Request Quota Increase
→ 「Request quota increase」ボタン
→ 目標値を指定 → AWS に申請
→ ステータス追跡
AWS Default Service Quotas
→ 各サービスのデフォルト値
→ リージョン別に異なる値表示
Service Quota Alarm
→ 使用率 X% で CloudWatch アラーム設定
→ SNS 通知
2. Service Quotas API
主要オペレーション:
ListServices
→ 対応サービス一覧
ListServiceQuotas
→ 特定サービスのクォータ全件取得
→ フィルター:Adjustable のみなど
GetServiceQuota
→ 特定クォータの詳細(現在値・使用率)
RequestServiceQuotaIncrease
→ クォータ引き上げをリクエスト
→ 非同期実行(結果は別途確認)
ListRequestedServiceQuotaChanges
→ リクエスト履歴・ステータス確認
3. CloudWatch メトリクス
メトリクス:
AWS/ServiceQuotas Namespace
MetricName: ServiceQuota
Dimensions:
- ServiceCode: lambda
- QuotaCode: L-B99A9384
- QuotaName: Concurrent executions
Value: 現在使用数(e.g., 850 / 1,000)
HistoricalData
→ 14 日分のデータ保持
→ CloudWatch Logs Insights で分析可能
4. Organizations クォータテンプレート
ロール:
管理アカウントでテンプレート定義
{
"service_code": "lambda",
"quota_code": "L-B99A9384",
"desired_value": 3000
}
全メンバーアカウント(新規含)に自動適用
→ 新規アカウント作成時に 3,000 同時実行
→ 既存アカウント:opt-in で適用
主要ユースケース
1. 本番ローンチ前のキャパシティプランニング
シナリオ:
SaaS 企業がローンチ前にスケーリング計画
Step 1: 予想最大クライアント数を見積
→ 初期:100 クライアント
→ 1 年後:1,000 クライアント
→ 5 年後:10,000 クライアント
Step 2: Service Quotas で必要クォータ計算
Lambda 同時実行数:
100 クライアント × 10 req/秒 × 100ms = 100 並行実行
1 年後:1,000 並行実行
EC2 vCPU(web tier):
web サーバー 1 台:c5.xlarge(4 vCPU)× 100 台 = 400 vCPU
1 年後:4,000 vCPU に拡張予定
Step 3: ローンチ前に引き上げ申請
service-quotas request-service-quota-increase \
--service-code lambda \
--quota-code L-B99A9384 \
--desired-value 5000 # 余裕 5 倍を確保
service-quotas request-service-quota-increase \
--service-code ec2 \
--quota-code L-1216C47A \
--desired-value 5000 # EC2 vCPU
Step 4: 承認待機(通常 3 営業日)
→ 承認後即座に値反映
→ ローンチ日確定
効果: 予期しないスケーリング失敗を防止
2. CI/CD パイプラインへのクォータ検証ステップ
シナリオ:
CloudFormation で 100 個の Lambda 関数をデプロイ
従来(クォータ検証なし):
cfn create-stack → 50 個目の関数でエラー
→ パイプライン失敗 → 原因調査に数時間
クォータ検証導入:
Pipeline Step 1: Pre-deployment Quota Check
def check_quotas(template):
qs = boto3.client('service-quotas')
# Lambda クォータ取得
quota = qs.get_service_quota(
ServiceCode='lambda',
QuotaCode='L-B99A9384'
)
current_quota = quota['ServiceQuota']['Value']
# テンプレートで定義される関数数カウント
functions_in_template = count_lambda_functions(template)
# 既存関数数確認
existing_functions = count_existing_lambdas()
total_required = existing_functions + functions_in_template
if total_required > current_quota:
print(f"ERROR: Need {total_required}, only {current_quota} available")
sys.exit(1)
else:
print(f"OK: {total_required} <= {current_quota}")
return True
Pipeline Step 2: Deploy(クォータ OK なら実行)
cfn create-stack ...
効果: デプロイ失敗を事前防止
3. Lambda 同時実行数の自動スケーリング
シナリオ:
トラフィック増加に伴い Lambda 同時実行が増加中
アーキテクチャ:
CloudWatch Alarm(90% threshold)
↓ トリガー時
SNS Topic
↓
Lambda(auto-scale-quotas)
│
├─ Step 1: 現在クォータ確認
│ quota = qs.get_service_quota(...)
│ current = 1000
│
├─ Step 2: 引き上げ必要か判定
│ if current_usage / current > 0.85:
│ target = current * 2
│
├─ Step 3: 引き上げリクエスト
│ qs.request_service_quota_increase(
│ desired_value = 2000
│ )
│
└─ Step 4: Slack 通知
"Lambda quota increased 1000 → 2000"
CloudWatch メトリクス:
QuotaUtilization: 95% → 90% → 75% (安定)
効果: 手動介入なく自動スケーリング
4. Organizations による統一クォータ管理
シナリオ:
5 つの AWS アカウント(Dev・Test・Staging・Prod-JP・Prod-US)
を統一したクォータで管理
従来(テンプレートなし):
Dev: Lambda 1,000
Test: Lambda 1,000
Staging: Lambda 5,000
Prod-JP: Lambda 10,000
Prod-US: Lambda 10,000
→ バラバラ、管理困難
クォータテンプレート:
Management Account:
Step 1: テンプレート作成
aws service-quotas put-service-quota-increase-request-into-template \
--service-code lambda \
--quota-code L-B99A9384 \
--desired-value 5000
Step 2: 全メンバーアカウントに適用
aws service-quotas associate-service-quota-template
結果:
全 5 アカウント → Lambda クォータ 5,000 に自動統一
新規アカウント作成 → 自動的に 5,000 適用
効果: クォータ値を一元管理、アカウント新設時の自動適用
5. マルチリージョン展開時のキャパシティプランニング
シナリオ:
東京(ap-northeast-1)と大阪(ap-northeast-2)に
同じ 150 EC2 インスタンスをデプロイ
クォータ確認:
Tokyo: EC2 vCPU On-Demand Standard
Default: 32
Required: 150 * 4 (t3.medium) = 600 vCPU
→ 引き上げ申請:600 → 1000
Osaka: 同じ
Default: 32
Required: 150 * 4 = 600 vCPU
→ 引き上げ申請:600 → 1000
Service Quotas API で両リージョンを並列確認:
def check_multiregion_quotas():
regions = ['ap-northeast-1', 'ap-northeast-2']
results = {}
for region in regions:
qs = boto3.client('service-quotas', region_name=region)
quota = qs.get_service_quota(
ServiceCode='ec2',
QuotaCode='L-1216C47A'
)
results[region] = quota['ServiceQuota']
return results
効果: マルチリージョン展開時の一括キャパシティ確認
6. コスト分析とリソース最適化
シナリオ:
クォータ使用率と実際のコスト相関分析
CloudWatch メトリクス取得:
EC2 vCPU 使用率: 25% (クォータ 1000 vCPU)
→ 平均 250 vCPU しか使わない
コスト削減検討:
1. 不要なインスタンス削除
2. Reserved Instance 検討(使用率 25% なら不要)
3. Spot Instance ミックス(アーキテクチャ次第)
Service Quotas で引き下げ申請:
→ デフォルト 32 vCPU に戻す
→ コスト最適化
効果: クォータ値からの逆算でコスト最適化
7. 部門別・プロジェクト別クォータ管理
シナリオ:
マーケティング部と SaaS 部で AWS リソース共有
部門ごとの予算・キャパシティ配分
タグベースのクォータ割当:
Tag: team=marketing
Lambda Concurrent: 500
RDS Instances: 5
Tag: team=saas
Lambda Concurrent: 2,000
RDS Instances: 20
Resource Tagging:
def apply_team_quota_checks(team):
qs = boto3.client('service-quotas')
quota_config = {
'marketing': {'lambda_concurrent': 500},
'saas': {'lambda_concurrent': 2000}
}
target_quota = quota_config[team]['lambda_concurrent']
return target_quota
効果: 部門別にリソースを割当、チャージバック可能
8. RDS 本番環境のストレージ制限
シナリオ:
RDS MySQL 本番クラスター
初期 500 GB → 3 ヶ月後 2 TB に増加
CloudWatch で使用率監視:
Alarm: RDS Storage Utilization > 80%
→ Lambda でストレージ拡張
Automation:
def expand_rds_storage():
rds = boto3.client('rds')
# 現在のストレージサイズ取得
db = rds.describe_db_instances(
DBInstanceIdentifier='prod-mysql'
)
current_size = db['DBInstances'][0]['AllocatedStorage']
# 新サイズ(2 倍)
new_size = current_size * 2
# Service Quotas で上限確認
qs = boto3.client('service-quotas')
quota = qs.get_service_quota(
ServiceCode='rds',
QuotaCode='L-...' # RDS storage
)
if new_size <= quota['ServiceQuota']['Value']:
# ストレージ拡張実行
rds.modify_db_instance(
DBInstanceIdentifier='prod-mysql',
AllocatedStorage=new_size,
ApplyImmediately=False # メンテナンスウィンドウで実施
)
効果: ストレージ枯渇前の自動拡張
9. 多言語・多地域 SaaS のクォータ最適化
シナリオ:
SaaS が 20 か国で運用
各国で異なるクォータが必要
要件:
日本:100 Lambda 同時実行
米国:500 Lambda 同時実行
EU:300 Lambda 同時実行
...
実装:
quota_map = {
'jp': {'lambda_concurrent': 100},
'us': {'lambda_concurrent': 500},
'eu': {'lambda_concurrent': 300}
}
def apply_regional_quota(region_code):
target_quota = quota_map[region_code]
qs = boto3.client('service-quotas', region_name=...)
return target_quota
効果: 地域別にリソース配分最適化
10. デプロイ前のフルバリデーション
シナリオ:
本番環境への大規模デプロイ前に
複数リソースのクォータを一括検証
Validation Pipeline:
def pre_deployment_quota_validation(infra_code):
results = []
# 解析: CloudFormation テンプレートから必要リソース抽出
resources_required = parse_cfn_template(infra_code)
# 検証: 各クォータに対して
for resource_type, quantity in resources_required.items():
qs = boto3.client('service-quotas')
quota = qs.get_service_quota(
ServiceCode=resource_type,
QuotaCode='...'
)
if quantity > quota['ServiceQuota']['Value']:
results.append({
'status': 'FAIL',
'resource': resource_type,
'required': quantity,
'available': quota['ServiceQuota']['Value']
})
else:
results.append({'status': 'OK', 'resource': resource_type})
# レポート
if any(r['status'] == 'FAIL' for r in results):
print("❌ Deploy blocked due to quota limits")
return False
else:
print("✅ All quotas validated, proceed with deployment")
return True
効果: デプロイ失敗の完全防止
設定・操作の具体例
CLI 例
# サービスコード一覧
aws service-quotas list-services \
--query 'Services[*].[ServiceCode,ServiceName]' \
--output table
# Lambda クォータ一覧
aws service-quotas list-service-quotas \
--service-code lambda \
--query 'Quotas[*].[QuotaName,Value,Adjustable]' \
--output table
# 特定クォータの詳細(使用率含む)
aws service-quotas get-service-quota \
--service-code lambda \
--quota-code L-B99A9384 \
--query '{QuotaName: ServiceQuota.QuotaName, Value: ServiceQuota.Value, Usage: Usage}'
# クォータ引き上げリクエスト
aws service-quotas request-service-quota-increase \
--service-code lambda \
--quota-code L-B99A9384 \
--desired-value 3000
# リクエストステータス確認
aws service-quotas list-requested-service-quota-changes \
--service-code lambda \
--query 'RequestedQuotaChanges[*].[QuotaCode,Status,DesiredValue,Created]'
# EC2 vCPU クォータ(リージョン指定)
aws service-quotas list-service-quotas \
--service-code ec2 \
--region ap-northeast-1 \
--query "Quotas[?QuotaName=='Running On-Demand Standard instances']"
# CloudWatch アラーム設定(80% 超過時)
aws service-quotas put-service-quota-alarm \
--service-code lambda \
--quota-code L-B99A9384 \
--threshold-percentage 80 \
--aws-sns-arn arn:aws:sns:ap-northeast-1:123456789012:quota-alerts
SDK 例(Python)
import boto3
from datetime import datetime
def monitor_quotas():
"""全クォータの使用率を監視"""
qs = boto3.client('service-quotas', region_name='ap-northeast-1')
cloudwatch = boto3.client('cloudwatch')
# 主要サービスのクォータを確認
services = ['lambda', 'ec2', 'rds', 'dynamodb']
for service in services:
response = qs.list_service_quotas(ServiceCode=service)
for quota in response['Quotas']:
quota_code = quota['QuotaCode']
quota_name = quota['QuotaName']
max_value = quota['Value']
# 使用量取得(サービスによって異なる)
try:
usage_response = qs.get_service_quota_usage_record(
ServiceCode=service,
QuotaCode=quota_code
)
current_usage = usage_response['ServiceQuotaUsageRecord']['Value']
except:
current_usage = None # 使用量が公開されていない場合
if current_usage:
utilization = (current_usage / max_value) * 100
# CloudWatch に記録
cloudwatch.put_metric_data(
Namespace='ServiceQuotasMonitoring',
MetricData=[{
'MetricName': 'QuotaUtilization',
'Value': utilization,
'Unit': 'Percent',
'Timestamp': datetime.utcnow(),
'Dimensions': [
{'Name': 'ServiceCode', 'Value': service},
{'Name': 'QuotaCode', 'Value': quota_code},
{'Name': 'QuotaName', 'Value': quota_name}
]
}]
)
# 警告ログ
if utilization > 80:
print(f"⚠️ {service}/{quota_name}: {utilization:.1f}% "
f"({current_usage}/{max_value})")
def request_quota_increase_batch(increases):
"""複数のクォータ引き上げをバッチリクエスト"""
qs = boto3.client('service-quotas')
requests = []
for increase in increases:
response = qs.request_service_quota_increase(
ServiceCode=increase['service_code'],
QuotaCode=increase['quota_code'],
DesiredValue=increase['desired_value']
)
requests.append(response['RequestedQuotaChange'])
return requests
if __name__ == '__main__':
monitor_quotas()
# バッチ引き上げ例
increases = [
{
'service_code': 'lambda',
'quota_code': 'L-B99A9384',
'desired_value': 5000
},
{
'service_code': 'ec2',
'quota_code': 'L-1216C47A',
'desired_value': 1000
}
]
results = request_quota_increase_batch(increases)
for r in results:
print(f"Requested: {r['QuotaCode']} → {r['DesiredValue']}")
Terraform 例
# Service Quotas Provider
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
# Lambda 同時実行クォータを 3,000 に引き上げ
resource "aws_servicequotas_service_quota" "lambda_concurrent_executions" {
service_code = "lambda"
quota_code = "L-B99A9384"
value = 3000
}
# EC2 vCPU クォータを 1,000 に引き上げ
resource "aws_servicequotas_service_quota" "ec2_vcpu_quota" {
service_code = "ec2"
quota_code = "L-1216C47A"
value = 1000
}
# RDS DB インスタンス数を 100 に拡張
resource "aws_servicequotas_service_quota" "rds_instances" {
service_code = "rds"
quota_code = "L-7B6409FD"
value = 100
}
# CloudWatch アラーム設定
resource "aws_cloudwatch_metric_alarm" "lambda_quota_80pct" {
alarm_name = "lambda-quota-80-percent"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
metric_name = "ServiceQuotaUtilization"
namespace = "AWS/ServiceQuotas"
period = "60"
statistic = "Average"
threshold = "80"
alarm_description = "Alert when Lambda quota utilization exceeds 80%"
alarm_actions = [aws_sns_topic.quota_alerts.arn]
dimensions = {
ServiceCode = "lambda"
QuotaCode = "L-B99A9384"
}
}
resource "aws_sns_topic" "quota_alerts" {
name = "service-quotas-alerts"
}
# Output
output "lambda_quota_requested" {
value = aws_servicequotas_service_quota.lambda_concurrent_executions.value
description = "Lambda concurrent executions quota requested"
}
類似サービス比較表
┌──────────────────────┬──────────────────┬──────────────────┬──────────────────┐
│ 観点 │ AWS Service │ Azure Resource │ GCP Resource │
│ │ Quotas │ Manager Quotas │ Quotas │
├──────────────────────┼──────────────────┼──────────────────┼──────────────────┤
│ コンソール管理 │ ✅ Service │ ✅ Portal │ ✅ Console │
│ │ Quotas 専用UI │ │ │
│ API 提供 │ ✅ 豊富 │ ✅ REST API │ ✅ REST / gRPC │
│ CloudWatch 連携 │ ✅ ネイティブ │ ⚠️ Azure Monitor │ ❌ 別途実装 │
│ IaC (Terraform) │ ✅ 完全対応 │ ✅ Azure ARM │ ✅ Terraform │
│ Organizations管理 │ ✅ テンプレート │ ✅ Tenant │ ⚠️ 限定的 │
│ 自動スケーリング │ ✅ Lambda 可能 │ ⚠️ ルール基 │ ❌ 手動 │
│ 料金 │ 無料 │ 無料 │ 無料 │
└──────────────────────┴──────────────────┴──────────────────┴──────────────────┘
ベストプラクティス
キャパシティプランニング
✅ DO
-
6 ~ 12 ヶ月の成長予測に基づいてクォータ決定
現在:Lambda 500 req/sec 1 年後(予測):Lambda 5,000 req/sec → 引き上げ:クォータ 5,000 を申請 -
クォータの 2-3 倍の余裕を確保
実際の使用:Lambda 1,000 req/sec クォータ:5,000(5 倍の余裕) → スパイクトラフィック・一時的な不具合に対応 -
定期的なクォータ使用率レビュー
月 1 回、CloudWatch メトリクスを確認 実使用率が 20% なら引き下げ検討(コスト最適化)
❌ DON’T
- クォータ = 現在の使用量に設定 → スケーリング時に即座に上限に達する
- 全てのサービスで最大クォータ申請 → 不要なコスト増加
- クォータ申請後、放置 → デフォルト値のままのリソースが溜まる
自動化・運用
✅ DO
-
CloudWatch アラーム + Lambda で自動クォータ引き上げ
使用率 85% → Lambda トリガー → 自動引き上げリクエスト -
CI/CD パイプラインに事前クォータチェック
デプロイ前に必要クォータを計算・確認 不足なら自動で申請してデプロイ待機 -
Terraform / CloudFormation でクォータ管理
インフラコードと一緒にクォータ値を version 管理
❌ DON’T
- 手動でのみクォータ申請 → 承認待機期間にデプロイ失敗
- CloudWatch アラーム設定なし → 使用率が高いまま放置
- デプロイ時にクォータ確認なし → 予期しない失敗
セキュリティ
✅ DO
-
Service Quotas API への IAM 権限制限
開発者:list / get 権限のみ SRE:request 権限も付与 管理者:full access -
CloudTrail で Service Quotas API アクセスを記録
誰がいつクォータを変更したか完全監査
❌ DON’T
- 全ユーザーに Service Quotas 管理権限 → 意図しない申請が増える
トラブルシューティング
| 症状 | 原因 | 解決策 |
|---|---|---|
| クォータ引き上げが却下される | アカウント実績不足 / 妥当性欠如 | AWS Support に申し立て。過去 3 ヶ月の使用実績を示す |
| CloudWatch メトリクスに値がない | 使用量が記録されていない | 24h 以上の利用実績が必要。新規リソースは翌日から |
| リージョン別に異なるクォータ | デフォルト値が地域依存 | Service Quotas で各リージョンを個別確認・申請 |
| API レート制限エラー | 40 req/sec 超過 | バッチ処理 / 指数バックオフで再試行 |
Terraform で resource not found |
クォータコードが誤記 | AWS CLI で正確なコード確認後、修正 |
2025-2026 最新動向
自動スケーリングクォータ(Auto-scaling Quota)
AWS は「使用率に基づいて自動的にクォータを引き上げる」機能をロードマップに記載。2026 年中旬に一部サービスで利用可能予定。
- 現在(2025): 手動申請 → AWS 審査 → 承認(1-3 日)
- 将来(2026): 使用率 85% → 自動引き上げ → 即座に有効
ML 駆動の推奨
機械学習で「このアカウントには将来どのクォータが必要か」を予測。AWS がプロアクティブに引き上げを提案。
Real-time Quota API
キャッシング削減のため、使用率のリアルタイム取得 API をリリース予定。CloudWatch の 1-2 分遅延ではなく、0 秒遅延で状態把握。
学習リソース・参考文献
公式リソース
-
AWS 公式ドキュメント
-
チュートリアル・ハンズオン
- Getting started with AWS Service Quotas
- Setting up quota alarms with CloudWatch
- Automation with Lambda and EventBridge
比較・ベンチマーク
実装チェックリスト・導入ロードマップ
導入前チェック
- [ ] 現在のクォータ値と使用率を確認(Service Quotas コンソール)
- [ ] 主要リソース(EC2・Lambda・RDS)のクォータを把握
- [ ] 予想成長率を見積(1 年・3 年・5 年)
- [ ] CloudWatch ダッシュボードの整備
- [ ] SNS Topic の作成(アラート通知先)
Phase 1: 監視(1 週間)
- Service Quotas コンソール・API の基本操作確認
- CloudWatch アラーム設定(80% threshold)
- 現在のクォータ使用率の定期確認習慣
Phase 2: 自動化(2 週間)
- CI/CD パイプラインにクォータチェックステップ追加
- Lambda で自動クォータ引き上げロジック実装
- Terraform / CloudFormation でクォータ管理開始
Phase 3: 最適化(継続)
- 月 1 回のクォータレビュー(使用率 + 成長トレンド)
- Organizations テンプレート化
- Cost Analysis とのクロスリファレンス
まとめ
AWS Service Quotas は「AWS サービス使用制限を一元管理し、キャパシティプランニング・自動スケーリングを実現するサービス」。
強み
- 無料(Service Quotas コンソール・基本 API)
- AWS 全サービス対応
- CloudWatch・EventBridge・Lambda との自動化が容易
- Organizations でマルチアカウント管理可能
弱み
- 使用量データが全サービスで公開されていない(リージョン・リソースレベル)
- リクエスト承認に 1-3 日かかる(自動承認ではない)
採用判断
Service Quotas は本番環境運用の 必須 サービス。
✅ EC2・Lambda・RDS・DynamoDB などの本番環境 ✅ スケーリング予定がある SaaS / アプリケーション ✅ マルチアカウント・マルチリージョン運用 ✅ キャパシティプランニング・コスト最適化
最終更新:2026-04-26 バージョン:v2.0