AWS Amplify のビルドが IAM ロール数クォータ上限(1,000)に到達して失敗したので Service Quotas で引き上げた
いわさです。
AWS Amplify Gen2 ではブランチごとにバックエンド環境を自動デプロイする設定が出来ます。
便利なのでこの設定を有効にして開発を進めていたのですが、feature ブランチが増えるにつれてどんどんバックエンド環境が増えていき、ある時から Amplify 上でビルドエラーが発生するようになりました。
原因を調べてみると、IAM ロールがアカウントあたりのクォータ上限(デフォルト 1,000)に達していたことがわかりました。
普段はリソースの棚卸し(不要なものを消す方向)は意識していたのですが、クォータの引き上げ方向はあまり気にしていませんでした。
今回 Service Quotas で引き上げて解決したので、その流れを紹介します。
実際に確認してみる
Amplify のビルドが失敗した
Amplify コンソールで対象ブランチのビルドが失敗していました。
ビルドログを確認すると、以下のエラーが出力されていました。
CREATE_FAILED | AWS::IAM::Role | AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/ServiceRole
Resource handler returned message: "Cannot exceed quota for RolesPerAccount: 1000
(Service: Iam, Status Code: 409, Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
(SDK Attempt Count: 1)" (RequestToken: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HandlerErrorCode: ServiceLimitExceeded)
IAM ロールの作成で ServiceLimitExceeded が発生しています。
CloudFormation がロールバックして、デプロイ全体が失敗した形です。
なぜ IAM ロールが 999 個に膨らんでいたのか
今回エラーが起きたアカウントでは、Amplify のアプリ設定で全ブランチの自動ビルド・自動デプロイを有効にしていました。
amplify- プレフィックスのロールだけで 262 個あり、それ以外のサービスで作成されたロールと合わせて合計 999 個に達していたようです。
feature ブランチを作るたびにロールが増えていくので、ブランチを消さずに残し続けていると知らないうちに上限に近づいていくわけですね。
IAM のダッシュボードを確認すると、ロール数 999 と「使用可能な IAM リソースのクォータに近づいています。」という警告が表示されていました。

Service Quotas で引き上げリクエストを送信する
いつもだったら棚卸しして不要な IAM ロールを削除するのですが、今回はいつもと違うことをやってみようかなと思い、クォータの引き上げで対応してみることにしました。
最初、東京リージョンの Service Quotas コンソールで「AWS Identity and Access Management」を検索したところ、フィルタに一致するサービスがありませんでした。

IAM はグローバルサービスなので、東京リージョンの Service Quotas には表示されません。
CLI で確認しても NoSuchResourceException が返ってきます。
$ aws service-quotas get-service-quota \
--service-code iam --quota-code L-FE177D64 --region ap-northeast-1
An error occurred (NoSuchResourceException) when calling the GetServiceQuota operation:
The request failed because the specified quota and service do not exist.
リージョンをバージニア北部(us-east-1)に切り替えて再度検索すると、「AWS Identity and Access Management (IAM)」が表示されました。

IAM のクォータ一覧から「Roles per account」を確認します。
「グローバル」というラベルがついていました。なるほどね。

デフォルトのクォータ値は 1,000 で、調整可能性は「アカウントレベル」となっています。
引き上げリクエストの送信と即時承認
「アカウントレベルでの引き上げをリクエスト」から、クォータ値を 2,000 に引き上げるリクエストを送信しました。
送信した瞬間に承認されました。

「Roles per account についてのクォータの引き上げリクエストが値 2000 で承認されました。」というバナーが表示されています。
適用されたアカウントレベルのクォータ値が 2,000 に更新されていることが確認できます。
CLI で確認してみても、リクエスト送信から承認まで 1 秒以内で完了しています。
$ aws service-quotas list-requested-service-quota-change-history-by-quota \
--service-code iam --quota-code L-FE177D64 --region us-east-1
{
"RequestedQuotas": [
{
"Id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"ServiceCode": "iam",
"ServiceName": "AWS Identity and Access Management (IAM)",
"QuotaCode": "L-FE177D64",
"QuotaName": "Roles per account",
"DesiredValue": 2000.0,
"Status": "APPROVED",
"Created": "2026-06-21T09:04:37.418000+09:00",
"LastUpdated": "2026-06-21T09:04:38.117000+09:00",
"QuotaArn": "arn:aws:servicequotas::xxxxxxxxxxxx:iam/L-FE177D64",
"GlobalQuota": true,
"Unit": "None",
"QuotaRequestedAtLevel": "ACCOUNT"
}
]
}
公式ドキュメントによると、IAM のクォータ引き上げには自動承認の仕組みがあり、最大クォータ値(Roles per account の場合は 10,000)までのリクエストは数分以内に自動で承認されるみたいです。
You can request an increase to default quotas for adjustable IAM quotas. Requests up to the maximum quota are automatically approved and completed within a few minutes.
| リソース | デフォルトクォータ | 最大クォータ |
|---|---|---|
| Roles per account | 1,000 | 10,000 |
さいごに
本日は AWS Amplify のデプロイが IAM ロール数のクォータ上限に到達して失敗した際に、Service Quotas で引き上げて解決した流れを紹介しました。
Amplify Gen2 のようにブランチごとに環境を自動デプロイする構成だと、feature ブランチを切るたびに IAM ロールが増えていくので、知らないうちに上限に近づいていたりします。
普段は不要なリソースを消す方向の棚卸しを意識していましたが、クォータの引き上げも選択肢として頭に入れておくと良さそうです。
IAM はグローバルサービスなので Service Quotas での検索はバージニア北部リージョンで行う必要がある、というのが地味にハマりポイントでした。
東京リージョンで探しても出てこないので「あれ?」となりますが、クォータの項目に「グローバル」ラベルがついているのでそういうことみたいです。
また、最大値(10,000)の範囲内であれば自動承認されるので、引き上げ自体はすぐに完了します。
Amplify で IAM ロール上限のエラーに遭遇するのは初めてだったので、ブログに書いてみました。







