+++ date = "2023-02-28" tags = ["fly"] title = "fly.ioのpgがおかしくなった" slug = "flyio" +++ 全体的にfly.ioのappのvm:pgがおかしくなって、それに対応した話。 ```sh Could not proxy HTTP request. Retrying in 1000 ms ``` なんでおかしくなったのかというと、おそらく、fly.io側で仕様変更があったためだと思ってる。pgを新しく作成すると今までの形式とは違ったものになっていて、具体的には、`top.nearest.of..internal -> [ipv6-private]`になってる。 対応としてはpgのfly.tomlを読み込んで、それを修正後にdeployします。 ```sh $ mkdir pg $ cd pg $ fly config save --app $ vim fly.toml ``` ```toml:fly.toml - [[services]] - [] + [[services]] + internal_port = 5432 # Postgres instance + protocol = "tcp" + [[services.ports]] + handlers = ["pg_tls"] + port = 5432 ``` ```sh $ fly image show --app $ fly deploy . --app --image flyio/postgres: ``` - https://fly.io/docs/postgres/connecting/connecting-external/ fly.ioのpgはなかなか厄介で、一度変更があると、detach, attachができなくなります。この変更は内部的なものも含みます。つまり、ユーザー側は、なぜいきなりdetach, attachできなくなったのかわからないでしょうね。今回も同じ構成でfly.ioのpgが動作しなくなりました。 ### ipv6-private `top.nearest.of..internal -> [ipv6]` - https://fly.io/docs/reference/private-networking/#fly-internal-addresses ```sh $ fly ips allocate-v6 --private -a $ 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`しても治らなかった。 ```sh $ fly pg restart ``` ### baackup-restore pgを残したい方はbackupして、新しいpgを作成し、restoreするのがおすすめですが、detach, attachできない場合は不可能。 ```sh $ fly postgres list $ fly volumes list -a $ fly volumes snapshots list $ fly postgres create --snapshot-id $ fly pg detach --app $ fly pg attach --app ```