注: そもそもこういうことを考えなくていいように redshift zero etl とか使った方がよさそう
前提: 別のアカウントから RAM で共有された Aurora cluster をクローンして S3 になんとかしてデータを吐き出したい
(1) Snapshot をエクスポートする
まず共有されたクローンだと、 cluster そのものをエクスポートすることはできない。ドキュメントからは分かりにくい(というか自分はわからんかった)が、サポートに聞いたのでガチ。なので Snapshot を作ってからエクスポートする必要がある。
pros: parquet なので後段の処理でデータが扱いやすい
cons: とにかくおっそい。snapshot をエクスポートするときに裏でクローンを作っているっぽい (by インフラの人) で、 QA 環境の cluster でも 40分くらいかかる。
(2) SELECT INTO OUTFILE S3
で CSV をエクスポートする
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 はさむとか)