はじめに
仕事をしていると、Cloud SQLの中の一部のデータを毎月保存しておいてくれと言われるのは、稀に良くあると思います。
最初に思いついたアーキテクチャ
私が最初に思いついたのは、以下のようなアーキテクチャです。
- Cloud SQLのエクスポート機能(※1)を使い、必要な情報をCloud Storageに保存するスクリプトを作成
- 先ほどのスクリプトをCloud Functionsに登録
- Cloud Schedulerから先ほど作成したスクリプトを定期実行
※1
Cloud SQL for MySQL から CSV ファイルにデータをエクスポートする
世は大クラウド時代、一見難しそうな依頼もこんな簡単にできてしまうことに、感謝の念を禁じ得ません。
しかし、私は極度に怠惰な人間でございますので、上記のアーキテクチャでも「結構やりたくない」という感情の芽生えを抑えることができなかったのです。
最終的なアーキテクチャ
調査をしていたところ、とんでもない方法が見つかりました。
- BigQueryから、Federated QueriesでCloud SQLの情報を抽出し、EXPORT DATA関数を使ってCloud Storageに保存
- Big QueryのScheduled Queryを使い定期実行
完全に勝利しました。
Cloud Storageを作成し、あとはSQL一本書いて終わりです。
繰り返しますが、完全に勝利です。
全てのエンジニアに幸あれ。
EXPORT DATA
OPTIONS(
uri='gs://bucket/folder/*.csv',
format='CSV',
overwrite=true)
AS (
SELECT
*
FROM
EXTERNAL_QUERY('project-id.locations.connection-id',
'''SELECT * FROM users LIMIT 10;''')
);