2023-02-28 / @syui

fly / fly

fly.ioのpgがおかしくなった

全体的にfly.ioのappのvm:pgがおかしくなって、それに対応した話。

Could not proxy HTTP request. Retrying in 1000 ms

なんでおかしくなったのかというと、おそらく、fly.io側で仕様変更があったためだと思ってる。pgを新しく作成すると今までの形式とは違ったものになっていて、具体的には、top<number>.nearest.of.<appname>.internal -> [ipv6-private]になってる。

対応としてはpgのfly.tomlを読み込んで、それを修正後にdeployします。

$ mkdir pg
$ cd pg
$ fly config save --app <pg-app-name>
$ vim fly.toml
- [[services]]
- []

+ [[services]]
+   internal_port = 5432 # Postgres instance
+   protocol = "tcp"
+ [[services.ports]]
+   handlers = ["pg_tls"]
+   port = 5432
$ fly image show --app <pg-app-name>
$ fly deploy . --app <pg-app-name> --image flyio/postgres:<major-version>

fly.ioのpgはなかなか厄介で、一度変更があると、detach, attachができなくなります。この変更は内部的なものも含みます。つまり、ユーザー側は、なぜいきなりdetach, attachできなくなったのかわからないでしょうね。今回も同じ構成でfly.ioのpgが動作しなくなりました。

ipv6-private

top<number>.nearest.of.<appname>.internal -> [ipv6]

$ fly ips allocate-v6 --private -a <postgres-app-name>
$ fly pg detach -a $app $app-pg-db
$ fly pg attach -a $app $app-pg-db
postgres://$app:$pass@[:0:0:0:0]:5432/$app?sslmode=disable

restartしても治らなかった。

$ fly pg restart

baackup-restore

pgを残したい方はbackupして、新しいpgを作成し、restoreするのがおすすめですが、detach, attachできない場合は不可能。

$ fly postgres list
$ fly volumes list -a <postgres-app-name>
$ fly volumes snapshots list <volume-id>
$ fly postgres create --snapshot-id <snapshot-id>
$ fly pg detach --app <app-name> <postgres-app-name>
$ fly pg attach --app <app-name> <postgres-app-name>