概要
AWSを利用している場合、MetabaseをECSにデプロイすることが多いのかなと思います。
ただ、Fargateで動かした時のデータの永続化をどうするか悩んでしました。
ここでいうデータとは
- ログインユーザー
- Metabaseに保存した質問
等を指します。
デフォルトではアプリケーションの実行環境下にH2データベースを作成し、そこにデータを溜めていきます。しかし、本番運用する際はPostgresにその役割を委託することが推奨されています。
参考:Configuring the Metabase application database
本稿は、「「それでもデフォルトのままがいい!Postgresにデータを保存したくない!」」という熱い気持ち(?)がある私のような方への手順書になります。
手法
前述の通り、デフォルトでデータはアプリケーション内のmetabase.db.h2.db
ファイルに蓄積されていきます。ECS on EC2であれば、このファイルをEC2のファイルシステム、ひいては接続されたEBS等にマウントすれば仮にECSが停止したとしてもデータは永続化されるのですが、Fargateで動作する場合はどうすればいいのでしょうか?
そういえば、EFSがFargateと接続できたような…。。。
Fargate で実行されている Amazon ECS コンテナまたはタスクに Amazon EFS ファイルシステムをマウントする方法を教えてください。
とりあえずPrivateSubnetで動くRDSがあるとして、以下のようなインフラと理解しました。
(一部簡略化しています。)
Terraformも書いてみました✨
結論
「え?もしまたMetabase環境を作る機会があったらって?」
「…」
「Postgresにデータを保存します。」