Amazon RDSのIAMデータベース認証で接続レートがスケールするようになったので、RDS for MySQLで負荷テストしてみた

Amazon RDSのIAMデータベース認証で接続レートがスケールするようになったので、RDS for MySQLで負荷テストしてみた

Amazon RDSのIAMデータベース認証に、インスタンスリソースに応じてパフォーマンスがスケールするアップデートが入りました。従来は固定的な接続レート上限があるとされていたため、RDS for MySQLで新規接続を大量に発生させ、どこまでIAM認証エラーなく接続できるか確認しました。
2026.07.01

はじめに

2026年6月30日、Amazon RDSのIAMデータベース認証に関するアップデートが発表されました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/06/amazon-rds-iam/

公式アナウンスの要点は以下の通りです。

IAM database authentication performance now scales with available instance resources, enabling enterprise workloads to leverage IAM authentication for high-volume connection patterns.

IAMデータベース認証のパフォーマンスが、インスタンスの利用可能なリソースに連動してスケールするようになりました。本記事では特に新規接続レートの観点で検証しています。

アップデート前後の比較

項目 Before After
接続レート制限 固定的な上限あり(例: ~20 conn/sec) インスタンスリソースに連動してスケール
ドキュメント上の記載 固定上限あり(時期により 20/sec、256/sec 等の記載が変動) 具体的な数値の制限記載なし
制約 高並列環境ではプーリング必須 インスタンスのリソース次第

今回のアップデートで実際にどの程度の接続レートが出るようになったのか、負荷テストで確認したところ、ピーク1432 conn/secでもIAM認証エラーはゼロでした。

検証環境

  • RDS: MySQL 8.4.8, シングルAZ, IAMデータベース認証有効
  • インスタンスクラス:
    • db.m8g.large(2 vCPU / 8 GiB)
    • db.m8g.xlarge(4 vCPU / 16 GiB)
    • db.t4g.micro(2 vCPU / 1 GiB)
  • 踏み台 EC2: m7g.large → c8g.2xlarge(負荷生成能力向上のため途中で変更)
  • リージョン: ap-northeast-1

テスト方法

テストスクリプトはPythonで作成し、以下の流れで1接続を処理します。

  1. IAM認証トークンを事前生成(15分有効、全接続で再利用)
  2. mysql-connector-python でSSL接続(mysql_clear_password プラグイン指定)
  3. SELECT 1 を実行
  4. 即座に切断

これを並列で大量に実行し、秒あたりの成功接続数を計測しました。前半のテストではThreadPoolExecutorを使用しましたが、GILを含むPythonプロセス内の処理がボトルネックになりました。後半はmultiprocessing + ThreadPoolExecutorの組み合わせでこれを回避しています。

エラー発生時は種別を記録し、IAM認証拒否(レート制限起因)とmax_connections超過(接続数上限起因)を区別できるようにしました。

なお、本検証では事前生成した同一のIAM認証トークンを全接続で再利用しています。接続ごとにトークンを新規生成するパターンとは条件が異なる点に留意してください。

検証結果

Phase 1: EC2 m7g.large — ThreadPoolExecutor

RDS クラス max_connections テスト条件 成功率 実効レート ピーク エラー
db.m8g.large 630 600並列 × 6000回 100% 210/sec 263/sec なし
db.m8g.xlarge 1289 1000並列 × 10000回 100% 205/sec 未計測 なし
db.t4g.micro 60 30並列 × 3000回 100% 48.8/sec 104/sec なし
db.t4g.micro 60 50並列 × 5000回 96.3% 67.6/sec 未計測 Too many connections (187件)

db.t4g.microで発生した失敗は全て Too many connections(max_connections=60の超過)であり、IAM認証レート制限によるエラーではありません。

この段階ではクライアント側のEC2(m7g.large, 2 vCPU)が律速になっていました。RDSのインスタンスクラスを上げても実効レートはほぼ変わりません(db.m8g.large: 210/sec、db.m8g.xlarge: 205/sec)。

Phase 2: EC2 c8g.2xlarge — multiprocessing + ThreadPoolExecutor

クライアント側をc8g.2xlarge(8 vCPU)にスケールアップし、GILを回避するマルチプロセス構成にしました。

RDS クラス テスト条件 成功率 実効レート ピーク エラー
db.m8g.large 8proc × 50threads × 10000回 100% 360/sec 516/sec なし
db.m8g.large 8proc × 70threads × 10000回 100% 454/sec 819/sec なし
db.m8g.large 8proc × 75threads × 10000回 98.0% 429/sec 803/sec DNS 解決失敗 (202件)

並列数を上げていくと、クライアント側の名前解決処理が追いつかなくなりました。DNS解決失敗が一部で発生しましたが、IAM認証起因のエラーは依然ゼロです。

Phase 3: EC2 c8g.2xlarge + dnsmasq キャッシュ

dnsmasqによるローカルDNSキャッシュを有効化し、DNSボトルネックを解消しました。まずdb.m8g.largeで再テストし、最終的にRDSもdb.m8g.xlargeへスケールアップしています。

RDS クラス テスト条件 成功率 実効レート ピーク エラー
db.m8g.large 8proc × 120threads × 10000回 100% 685/sec 1058/sec なし
db.m8g.xlarge 8proc × 150threads × 20000回 100% 728/sec 1432/sec なし

db.m8g.xlargeの最終テストでは、テスト全体の平均である実効レート728 conn/sec、1秒単位での最大値であるピーク1432 conn/secを記録しました。全20000接続が成功し、IAM認証によるエラーは一切発生していません。

結果のまとめ

全テストケースを通じて、IAM認証レート制限に起因するエラーは ゼロ でした。

発生した失敗は以下の2種類のみで、いずれもIAM認証レートとは無関係です。

  • Too many connections: max_connectionsの上限に達した場合(db.t4g.micro)
  • DNS 解決失敗: 高並列時にクライアント側の名前解決が律速(dnsmasq導入で解消、Phase 2の一部テスト)

従来ドキュメントで言及されていた上限の目安(~20 conn/sec)と比較すると、今回の実測ピーク1432 conn/secは大幅な改善です。

まとめ

今回の検証では、従来ドキュメントで言及されていた固定的な接続レート上限の目安を大きく超え、ピーク1432 conn/secでもIAM認証起因のエラーは発生しませんでした。今回の検証条件では、律速要因はクライアント側の処理能力やmax_connectionsに移っており、RDSのIAM認証レートが先に制約となる状況は確認されませんでした。

LambdaやECSタスクのように短命な接続を大量に生成するワークロードでも、従来よりIAM認証の接続レートが制約になりにくくなったと考えられます。なお、本検証は同一のIAM認証トークンを再利用した条件での結果です。

参考リンク

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事