Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
クロスアカウントな RDS Snapshot Export による カジュアルなデータ集約の仕組み
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
wa6sn
January 24, 2025
Technology
470
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
クロスアカウントな RDS Snapshot Export による カジュアルなデータ集約の仕組み
https://finatext.connpass.com/event/341248/
で話しました。
wa6sn
January 24, 2025
More Decks by wa6sn
See All by wa6sn
マルチアカウント環境での、そこまでがんばらない RI/SP 運用設計
wa6sn
2
1.4k
dev 補講: プロダクトセキュリティ / Product security overview
wa6sn
2
3.4k
不要な DNS リソースレコードは消そう / Delete unused DNS records
wa6sn
4
4.2k
開発者向け MySQL 入門 / MySQL 101 for Developers
wa6sn
47
13k
Other Decks in Technology
See All in Technology
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
2
460
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
140
protovalidate-es を導入してみた
bengo4com
0
160
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.3k
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
4
1.1k
Rancherの紹介&Update情報(RancherJP Online Meetup #09)
yoshiyuki_kono
0
130
新規事業を牽引する技術選定 〜フルスタックTypeScript開発の実践事例〜
nullnull
3
370
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
230
SIer20年! 培ったスキルがスタートアップで輝く時
shucho0103
0
790
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
590
Agentic Defenseとともにセキュリティエンジニアが輝き続けるには / How Security Engineers Can Keep Excelling with Agentic Defense
yuj1osm
0
130
生成 AI × MCP で切り拓く次世代 SRE!自律型運用への挑戦と開発者体験の進化
_awache
0
170
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
210
Docker and Python
trallard
47
3.9k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
130
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
380
Deep Space Network (abreviated)
tonyrice
0
170
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Marketing to machines
jonoalderson
1
5.4k
Code Reviewing Like a Champion
maltzj
528
40k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
クロスアカウントな RDS Snapshot Export による カジュアルなデータ集約の仕組み 2025/01/24 Finatext TechNight #4
1
$ whoami @wa6sn(わらしな) CCoE っぽいこと、データ基盤、セキュリティ、データベースなど 社内 ISUCON 主催や AWS Gameday
の企画、技術広報っぽいことなども 最近の関心は、歴史的経緯により生まれた負債の解消 https://speakerdeck.com/wa6sn 2
まとめ 十数の AWS アカウントに存在する RDS のデータを 一箇所に集約してクエリをしたいという要件があった 各プロダクト開発者との調整を極力少なくし、 カジュアルに始めるためには RDS
Snapshot Export が便利だった 中小規模で複数のプロダクトがある、といったパターンでアリだと思う 3
背景(2021 年の実装当時) 様々な領域で、複数のプロダクトを展開し、 当時すでに 80 程度の AWS アカウントが存在した 社内にデータ基盤の類が存在しなかった。プロダクト間の連携が前提となる アーキテクチャの一方、プロダクトをまたいだクエリを書くことが出来なかった
主に "販売実績レポートの出力" のようなタスクにおいて、 プロダクト間のデータ連携は温かみのある手渡しが多くあったのじゃ 辛くなってきたのでデータ基盤(仮)を作ることにした 4
イマイチ伝わりづらいかもしれないが規模感 5
プロダクトに対して非侵襲な仕組みにしたい なんせ対象のプロダクト・開発メンバーが異なる文脈で複数存在するので、 リテラシ・採用技術・リリースサイクル・運用体制・etc もそれぞれ異なる 「データは RDS に入っている」ぐらいの共通点はあった DB の負荷に気を配りたくないし、ネットワークの疎通性とか気にしたくないし、 受け入れ側開発者の実装タスクも減らしたい
データ基盤のありがたみをまだ実感していない組織に後付けで導入するので、 実装コストは低ければ低いほどいい リッチな仕組みはありがたみが理解されてから、としたい 6
選ばれたのは、RDS Snapshot Export でした 7
登場人物|RDS Snapshot Export Amazon RDS の Amazon S3 への DB
スナップショットデータのエクスポート RDS(Aurora も含む)内のデータを Parquet という列志向のデータフォーマットに 変換して、S3 バケットに Export してくれる機能 "S3 バケット" ゆえに、当然クロスアカウントに Export できる RDS を使っていれば導入できて、特定のパラメータも、DB ユーザも必要ない Snapshot から AWS 内部のインフラを使って Export しているので、 本番 DB にトラフィックが流れないし、素朴に DB へ接続する種々の アーキテクチャに比べ、疎通性を気にする必要もない "前回の Export からの差分だけを Export" のような器用なことは出来ず、 選択したテーブルに対しては常に全量を Export することになる 8
登場人物|BigQuery Data Transfer Service 今日は AWS ネタの日なので、詳細は割愛 BigQuery Data Transfer
Service とは 各種オブジェクトストレージなどから BigQuery に転送するマネージドサービス S3 に置かれた Parquet 等のデータをほぼシームレスに BigQuery に取り込める 細切れの Parquet ファイルからいい感じにテーブルに復元してくれる (AWS からの流入を狙っていると言わんばかりの手軽さ) Parquet に変換されたデータを流し込むので、意外に転送料金は安い 9
登場人物|Lambda + Step Functions それほど目新しいものではないと思うので、詳細は割愛 「Export タスクを開始する」 「Export タスクが終了していることを確認する」等の 一連の処理を
Lambda で実装し、Step Functions でまとめている それほどデータ鮮度は要求されていないので、日次更新 10
(参考) Lambda + Step Functions のワークフロー 11
RDS Snapshot Export、ここが嬉しい 何よりプロダクト側の実装負担がほとんどない RDS を使っていれば導入でき、スイッチ用の IAM Role(赤線部)だけ作れば OK Policy
には主に Snapshot 作成 + Export 実行 + S3 バケット操作に必要な権限を記述 12
RDS Snapshot Export の地味に便利な副産物 RDS Snapshot Export を実行すると、Export 先にはテーブルデータ以外に 「テーブルメタデータ」としての
json ファイル が副産物として置かれる テーブル名・カラム名・export 前後のデータ型 のような情報が格納されている フォーマットの参考: RDSデータをS3にParquet形式で出力する このファイルをちょっと整形して再利用することで、 プロダクト側とコミュニケーションしやすくて便利(後述) 13
テーブルメタデータを介したデータ加工のすり合わせ 前述の "副産物" 由来のファイルから生成した DDL から、各テーブル・カラムを どのように加工して利用者に見せるか、プロダクト開発者とすり合わせている DDL は「開発者の確認済みテーブル」として、ある種ホワイトリストの役割も果たす プロダクトで追加したカラムが、うっかりそのまま連携されるのを防ぐ
14
テーブルメタデータを介したデータ加工のイメージ それぞれ DDL, 加工設定, SQL CREATE OR REPLACE TABLE `warehouse.users`
AS SELECT `id`, '*' AS `name`, '*' AS `email`, `birthday`, `created_at` FROM `datalake.users` 15
その後…… 現在はおよそ 20 数個の DB クラスタの統合が実現できている 最大の DB で約 400
テーブル、一部の大きいテーブルには数億行ぐらいのレコード それぞれ異なる AWS アカウント プロダクト側の実装箇所・アーキテクチャによる制限がほとんどないのは便利 「IAM Role + Policy を作ったら、データ基盤に連携された」 運用当初(2022 年初頭)は Export タスクがスタックし続けるような障害が たまに発生していたが、現在はそんな障害は観測されずかなり安定している AWS さんの地道な改善がありがたい この仕組みで対応できない部分の隙間家具として、TROCCO® を使っている 16
最近の思い なんやかんやで 3 年ぐらい使い続けてしまったが、そのうちデータ鮮度などの 要求に応えるためのリアーキテクチャの機運があると思っている データエンジニアリングに詳しいひとに加わってほしい(切実) 17