Aurora MySQL → S3 の方法比較めも: parquet or csv?

注: そもそもこういうことを考えなくていいように redshift zero etl とか使った方がよさそう

前提: 別のアカウントから RAM で共有された Aurora cluster をクローンして S3 になんとかしてデータを吐き出したい

(1) Snapshot をエクスポートする

まず共有されたクローンだと、 cluster そのものをエクスポートすることはできない。ドキュメントからは分かりにくい(というか自分はわからんかった)が、サポートに聞いたのでガチ。なので Snapshot を作ってからエクスポートする必要がある。

pros: parquet なので後段の処理でデータが扱いやすい

cons: とにかくおっそい。snapshot をエクスポートするときに裏でクローンを作っているっぽい (by インフラの人) で、 QA 環境の cluster でも 40分くらいかかる。

(2) SELECT INTO OUTFILE S3CSV をエクスポートする

pros: まあシンプルに速い

cons: とにかくめんどくさい。クエリを実行するために、いろんなインフラリソースを作らなきゃいけないし、 DB に繋がるまでが大変。クエリもめんどい。

ぱっと覚えてるだけで

  • RDS にアタッチする S3 bucket へのアクセスが許可された IAM Role をつくる
  • DB への接続を確立するための user/password を secrets manager とかに格納 + それ関連のポリシー
  • aws_default_s3_role を cluster parameter group に設定

とか...

しかもうちは RAM なので、DB のパスワードが terraform で二重管理になるらしい (terraform は触らないので)

とはいえ、 parquet の方もそっちはそっちで待ち時間が長いから、パイプライン全体を見ると管理するリソースは増えたりする (eventbridge はさむとか)