Fly.ioには、「Fly Postgress」というサービスがあります。
こちらは簡単にいうと、Fly.io上で動作させるアプリケーションに対して、PostgreSQLのクラスターを提供するものです。
高可用性のオプションも提供されていたり、単一インスタンスで動作する「開発」用途の構成も提供されていたりします。
ただし、AWSやAzureなどのような"マネージドデータベースサービス"というものではありません。詳細は、以下の説明文を確認ください。
位置付け的には、他のマネージドデータベースは使わずに、Fly.ioだけで完結しておきたかった李、検証用途で利用したり、といったものだという認識です。
今回、このFly Postgressを触ってみたので、内容をメモとして残しておきます。
大前提
- Fly.ioのアカウントを作成済み
- flyctlコマンドをインストール済み
なお、Fly.ioのアカウントについては、以前は「Hobby」という無料枠がありましたが、現在はなくなっています。
2024年4月現在では、「Hobby」枠も月額5ドル分でのアカウントとなっています。 ただし、初回に5ドル分の無料枠が設けられており、その5ドル分を消費してからの課金となるようです。
また、Fly.ioの新規アカウント作成時には、クレジットカードの登録が求められます。
正確な情報は、こちらを参照ください。
Fly Progress クラスターの作成
公式ページの「Create a Fly Postgres Cluster」の内容に従って、実施してみます。
まず、Fly Postgres クラスターの作成コマンドを実行します。
flyctl postgres create
appの名前設定
すると、? Choose an app name (leave blank to generate one):
ときかれますので、アプリケーションの名前を作成してください。
ここでは、pg-realworld-test
と付けました。
リージョン設定
appの名前を入力すると、今度は ? Select region
と リージョンを聞かれます。
リージョンの一覧が出てくるので上下キーでリージョンを選択してリターンキーを押します。
ここでは、Tokyo, Japan (nrt)
を選択しました。
リソース設定
つづいて、? Select configuration:
と、構成を聞かれます。今回は条件を守れば無料枠で使える「Development」(=開発)を選択します。
なお、2024年4月時点のDevelopmentでの構成は「Single node, 1x shared CPU, 256MB RAM, 1GB disk
」です。
接続ゼロ時にスケールダウンする設定
さいごに、Scale single node pg to zero after one hour?
と聞かれます。
これは、「1 時間後に開いている接続がない場合は、ゼロにスケールダウンする」という機能を設定するかどうかを尋ねられています。
ここでは 「y(yes)」で回答しておきました。
コンフィグ情報の表示
しばらく待つとコンテナの作成が完了し、以下のようにconfigの情報が表示されました。
Postgres cluster pg-realworld-test created Username: postgres Password: XXXXXXXXXXXXXXXXXXXX Hostname: pg-realworld-test.internal Flycast: xxxx:0:x0x:0:0::0 Proxy port: 5432 Postgres port: 5433 Connection string: postgres://postgres:XXXXXXXXXXXXXXXXXXXX@pg-realworld-test.flycast:5432 Save your credentials in a secure place -- you won't be able to see them again! Connect to postgres Any app within the MzRyuKa organization can connect to this Postgres using the above connection string Now that you've set up Postgres, here's what you need to understand: https://fly.io/docs/postgres/getting-started/what-you-should-know/
作ったクラスターに接続する
作られたクラスターに接続してみます。
設定したapp名を「-a app名」とオプションで付与したまま、以下のようにflyctl postgres connect
(またはfly pg connect
)コマンドを実行します。
flyctl postgres connect --app pg-realworld-test Connecting to fdaa:2:b1e:a7b:17c:e101:c455:2... complete psql (15.6 (Debian 15.6-1.pgdg120+2)) Type "help" for help. postgres=# \h Available help: ABORT ALTER TEXT SEARCH TEMPLATE CREATE PUBLICATION DROP FUNCTION IMPORT FOREIGN SCHEMA ALTER AGGREGATE ALTER TRIGGER CREATE ROLE DROP GROUP INSERT 〜(省略)〜 ALTER TEXT SEARCH PARSER CREATE PROCEDURE DROP FOREIGN TABLE GRANT WITH postgres=#
接続さえできれば、あとはpsqlコマンドを実行した場合と同じです。
余談1: アカウントのロックのため解除が必要
今回の処理で遭遇した出来事。
クラスター作成コマンドの実行で、エラーが発生。
Your account has been marked as high risk.
なんて書かれているので、ちょっとドキッとしました。
指示通り、以下のURLにアクセス。
https://fly.io/high-risk-unlock
要は、クレジットのカードの登録が必要で、かつ10ドル未満のトランザクションを実行しておかないといけないとのこと。
テストトランザクションを行えば、アカウントのロックは解除される(そして、クレジットカードへの請求はなし)とのこと。
わかりやすいように、日本語翻訳した画面も貼り付けておきます。
アンロックするために、「Add credit card & preauthoize」ボタンをクリック。
自分の場合はすでにクレジットカード自体は登録済みだったので、登録済みのカード情報が表示されました。
このカードを利用するので、「Unlock your account using this card」ボタンをクリック。
無事、アカウントのロックが解除されました。
余談2: 接続ゼロ時にスケールダウンしたマシンの再起動
appと接続せず、クラスターだけ起動している状態で1時間経つと、クラスターは停止しています。 そのため、クラスターを起動する必要があります。
「Dashboard」→「Apps」→「停止中のpostgresクラスター(=app)」を選択します。
クラスターが表示されたら、今度は「Machines」→「Start machine」ボタン(▶️のついたボタン)をクリック。
これで、クラスターが起動します。