みずりゅの自由帳

主に参加したイベントやソフトウェア技術/開発について記録しています

Fly Postgres クラスターを作成

Fly.ioには、「Fly Postgress」というサービスがあります。

fly.io

こちらは簡単にいうと、Fly.io上で動作させるアプリケーションに対して、PostgreSQLクラスターを提供するものです。

高可用性のオプションも提供されていたり、単一インスタンスで動作する「開発」用途の構成も提供されていたりします。

ただし、AWSやAzureなどのような"マネージドデータベースサービス"というものではありません。詳細は、以下の説明文を確認ください。

fly.io

位置付け的には、他のマネージドデータベースは使わずに、Fly.ioだけで完結しておきたかった李、検証用途で利用したり、といったものだという認識です。

今回、このFly Postgressを触ってみたので、内容をメモとして残しておきます。

大前提

  • Fly.ioのアカウントを作成済み
  • flyctlコマンドをインストール済み

なお、Fly.ioのアカウントについては、以前は「Hobby」という無料枠がありましたが、現在はなくなっています。

2024年4月現在では、「Hobby」枠も月額5ドル分でのアカウントとなっています。 ただし、初回に5ドル分の無料枠が設けられており、その5ドル分を消費してからの課金となるようです。

また、Fly.ioの新規アカウント作成時には、クレジットカードの登録が求められます。

正確な情報は、こちらを参照ください。

fly.io

Fly Progress クラスターの作成

公式ページの「Create a Fly Postgres Cluster」の内容に従って、実施してみます。

fly.io

まず、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」ボタン(▶️のついたボタン)をクリック。

これで、クラスターが起動します。