DEA / ドメイン2 データストア管理
Amazon RDS と Aurora (データソースとして)
と は、業務アプリのデータを保管するです。データエンジニアにとっては、分析パイプラインの代表的なデータソースです。DEA-C01 では、本番の業務を止めずにデータを取り出す方法 (、のエクスポート、 統合)、 などからの接続を安定させる RDS Proxy、データストアとしての RDS/Aurora の選びどころが問われます。
Point
- RDS = Relational Database Service です。MySQL、PostgreSQL、MariaDB、Oracle、SQL Server、Db2 をマネージドで動かします。
- Aurora は、MySQL・PostgreSQL と互換の AWS 独自のデータベースです。ストレージが3つの AZ に6つのコピーを持ち、クラスター単位で扱います。
- 和訳
- Replica: 複製
- Weblio英和辞書「replica」
概要
業務 DB () からデータを取り出すとき、最も避けたいのは本番の応答を遅くすることです。取り出し方は、鮮度と負荷の要件で選びます。
| 取り出し方 | 鮮度 | 本番への負荷 | 向くケース |
|---|---|---|---|
| から抽出 ( の 接続など) | 数秒〜の遅れ | 小さい (ライターに触れない) | 定期的なバッチ抽出 |
| を へエクスポート | スナップショットの時点 | なし | 日次・月次の全件の分析、 |
| 統合 ( へ) | 数秒程度 | 小さい | パイプラインを作らずに最新の運用データを分析 |
| の全ロード + | 継続的 | ログを読む分だけ | S3 や他の DB への継続的な複製 (「AWS DMS」の章) |
主要技術
①リードレプリカからの抽出 ⚠️ 頻出
は、ライターの変更を非同期に複製する読み取り専用のコピーです。抽出ジョブや重い集計をレプリカへ向けると、本番のライターの負荷を増やさずに済みます。
| 観点 | のリードレプリカ | のレプリカ |
|---|---|---|
| 複製の仕組み | エンジンの (非同期) | 共有ストレージを読む (遅れが小さい) |
| レプリカごと | リーダーエンドポイントで複数のレプリカに振り分ける | |
| をまたぐ | クロスリージョンのリードレプリカ | Aurora Global Database |
のスタンバイは障害時の切り替え用で、読み取りには使えません (RDS の Multi-AZ DB インスタンス)。分析の読み取りを逃がす先はリードレプリカです。
②スナップショットの S3 へのエクスポート
と の (および Aurora の DB クラスター) を、 へ 形式でエクスポートできます。データベースに負荷をかけずに、全件を ・・・ で分析できる形にします。
| 観点 | 内容 |
|---|---|
| 形式 | Apache Parquet (圧縮された列指向形式) |
| 対象の絞り込み | データベース、スキーマ、テーブルを指定できる |
| 権限 | S3 へ書く ロールと、暗号化用の キーが必要 |
| 鮮度 | スナップショットの時点のデータ (リアルタイムではない) |
日次の全件スナップショットを分析に使う、古いデータを S3 にしてから DB から消す、といった用途に向きます。
③RDS Proxy と接続の管理
は数に応じて多数の実行環境が立ち上がり、それぞれが DB へ接続を作ります。接続数が DB の上限に達すると、新しい接続が拒否されます。
| 手段 | 内容 |
|---|---|
| Proxy | 接続をプールして再利用し、DB への接続数を抑える。時の切り替えも速くなる。認証情報は で管理し、 認証も使える |
| Lambda の予約同時実行数 | Lambda 側の同時実行の上限を決めて、DB への接続の急増を防ぐ |
| Data () | で を実行し、接続を自分で持たない |
DB への接続数の上限との対処は「スロットリングとレート制限」の章でも扱います。
④zero-ETL 統合と S3 との直接のやり取り
(MySQL・PostgreSQL) と (MySQL・PostgreSQL・Oracle) から への 統合を作ると、初回の全件ロードの後、変更が自動で Redshift へ複製されます。 のジョブを作らず、運用データを数秒程度の遅れで分析できます (「 (CDC) と zero-ETL」の章)。
Aurora と RDS は、 から と直接データをやり取りする機能も持ちます。
| エンジン | S3 から読み込む | S3 へ書き出す |
|---|---|---|
| Aurora MySQL | LOAD DATA FROM S3 | SELECT INTO OUTFILE S3 |
| Aurora / RDS for PostgreSQL | aws_s3 拡張機能の table_import_from_s3 | aws_s3 拡張機能の query_export_to_s3 |
小さな参照データの取り込みや、クエリ結果の S3 への出力を、別のサービスを使わずに行えます。DB には S3 へアクセスする ロールを関連付けます。
⑤データストアとして RDS / Aurora を選ぶとき
| 要件 | 選ぶもの |
|---|---|
| 結合、外部キー、トランザクションが必要な業務データ | / |
| 高い可用性と読み取りのスケール、ストレージの自動拡張 | Aurora (最大15のレプリカ、自動で伸びるストレージ) |
| 負荷が変動し、容量の管理を減らしたい | v2 |
| 既存の商用 DB (Oracle、 Server) をそのまま移す | RDS for Oracle / SQL Server |
| を既存のリレーショナルデータと一緒に扱う | Aurora PostgreSQL / RDS for PostgreSQL の (「とベクトルインデックス」の章) |
| 数十億行の集計 | RDS ではなく |
で を取る場合は、ソースの DB でバイナリログ (MySQL) や論理 (PostgreSQL) を有効にし、ログの保持期間を十分にとります。
試験対策
①判断マトリクス
| 問題文のキーワード | 選ぶもの |
|---|---|
| 本番 DB に負荷をかけずに定期抽出 | から抽出 |
| DB に一切負荷をかけず全件を分析・ | を へ でエクスポート |
| なしで運用データをほぼリアルタイムに で分析 | 統合 |
| から DB への接続数が上限に達する | Proxy |
| から直接 S3 のファイルを読み込みたい | MySQL の LOAD DATA FROM S3、PostgreSQL の aws_s3 拡張 |
| 継続的に変更を S3 や別の DB へ複製 | の |
| 読み取りを のスタンバイへ逃がしたい | スタンバイは読めない。リードレプリカを使う |
②よくある誤答
- 本番のライターに直接重い抽出クエリを流すこと。かエクスポートを使います。
- のエクスポートでリアルタイムの分析ができると考えること。スナップショットの時点のデータです。
- のが増えたときの接続エラーに、DB のインスタンスを大きくするだけで対処すること。 Proxy で接続をプールします。
- RDS を大規模な集計の DWH として使うこと。 へ複製して分析します。
参考文献
- Working with DB instance read replicas
- Exporting DB snapshot data to Amazon S3
- Amazon RDS Proxy
- Aurora zero-ETL integrations with Amazon Redshift
- Loading data into an Amazon Aurora MySQL DB cluster from text files in an Amazon S3 bucket
- Exporting data from an Aurora PostgreSQL DB cluster to Amazon S3