

Auroraの負荷検証、S3 ReplicationでFirehose出力を複製するだけで足りた
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
Auroraにインデックスやパーティションを追加するとき、本番相当のデータ量で負荷を確認したくなることがある。でも本番環境には触りたくないし、Firehoseの設定もアプリの実装も変えたくない。
今のデータフロー
flowchart TD A[API Gateway] --> B[Firehose] --> C["S3(CSV)"] --> D[Lambda] --> E[Aurora] classDef gateway fill:#E8EAF6,stroke:#3F51B5,color:#1A237E classDef ingest fill:#E3F2FD,stroke:#1976D2,color:#0D47A1 classDef storage fill:#E8F5E9,stroke:#388E3C,color:#1B5E20 classDef compute fill:#FFF3E0,stroke:#F57C00,color:#E65100 classDef database fill:#FCE4EC,stroke:#C2185B,color:#880E4F class A gateway class B ingest class C storage class D compute class E database
課題
- 本番環境に影響を与えたくない
- Firehoseの設定は変更したくない
- アプリ側の実装変更も避けたい
この制約の中でAuroraだけを検証対象にする方法を考えた。
採用した方式:S3 Replication
FirehoseがCSVを吐き出すS3バケットに対してS3 Replicationを設定して、検証環境のバケットに複製する。複製先には別のLambdaとAuroraを用意して、同じS3 → Lambda → Auroraのパイプラインを再現するだけ。
flowchart TD
subgraph Prod["本番"]
direction TD
A[API GW] --> B[Firehose] --> C["S3(Prod)"]
end
subgraph Shadow["検証"]
direction TD
D["S3(Shadow)"] --> E["Lambda(Shadow)"] --> F["Aurora(Shadow)"]
end
C -->|S3 Replication| D
classDef gateway fill:#E8EAF6,stroke:#3F51B5,color:#1A237E
classDef ingest fill:#E3F2FD,stroke:#1976D2,color:#0D47A1
classDef storage fill:#E8F5E9,stroke:#388E3C,color:#1B5E20
classDef storageShadow fill:#E0F2F1,stroke:#00796B,color:#004D40
classDef compute fill:#FFF3E0,stroke:#F57C00,color:#E65100
classDef database fill:#FCE4EC,stroke:#C2185B,color:#880E4F
classDef prodBox fill:#F5F7FF,stroke:#3F51B5,color:#1A237E
classDef shadowBox fill:#F1FAF9,stroke:#00796B,color:#004D40
class A gateway
class B ingest
class C storage
class D storageShadow
class E compute
class F database
class Prod prodBox
class Shadow shadowBox
API GatewayやFirehoseの挙動は経路に含まれないので、Aurora単体の性能だけを見れる。ファイルサイズやレコード数、データ分布も本番のFirehoseが生成したものそのままなので、本番相当のデータで検証できる。
運用
Replication RuleはデフォルトDisabledにしておいて、検証したいときだけEnabledにする。終わったらまたDisabledに戻す。ルール自体は消さずに残しておけば、次回もすぐ使い回せる。
注意点
- Disabledの間に作られたオブジェクトは、再度Enabledにしても自動では複製されない。過去分が必要ならバッチコピーとかで別途持ってくる必要がある
- 検証用Auroraは本番とは完全に別クラスターにする。インデックス追加やパーティション変更みたいな負荷の高い試験を安全にやるため
結論
Auroraの負荷検証がしたいだけなら、APIレベルでShadow Trafficを流す必要はなかった。S3 ReplicationでFirehoseの出力結果を複製環境に流し込んで、S3 → Lambda → Auroraを再実行するだけで十分だった。