🕊️

fly.io のアプリケーションをv2にアップグレードしたお話

2023/05/25に公開

ある日fly.ioのダッシュボードを確認しているときにこんな表示が出てきたんです
(fly.ioとはPaaSの一種で、詳しいことは後に記事を書くかもしれない)

ほうほう?"あなたのアプリケーションはApps v1 platformで動いています。v2 platformにマイグレーションすることをお勧めします"とのこと

リンク先のpostをみる限り、v2では動かしているアプリの安定性と信頼性が増えたらしい
メリットがあるということなので、今動かしているアプリケーションをv2にマイグレートしてみよう。そういう記事

公式からはどんなアナウンスがされているのだろう

公式からの投稿をかいつまんで説明するとこんな感じ。要約する前のものはおまけで置いておきます


  • v2 platformでは以下のように安定性と信頼性が増えます
    • 混雑時により安定します
    • ホストに問題が起きたら別の物理マシンで再起動を試みて、常に応答できるマシンを1つ確保するように動きます
    • 自動スケーリングがv1より早くなります
    • v1で起こっている、想定外のリージョンで新しいマシンが起動する事態がなくなりました
  • ダウンタイムなし且つ自動でマイグレートしてくれるコマンドfly migrate-to-v2がある
  • これはプレリリースであり、あなたはちょっとこれによる影響を研究する必要があるかも

なるほど。問題が発生した時には別のマシンに移動する形で不具合への耐性を上げたということか。Azure的にいうと、"可用性を確保のためにAvailableゾーンを用意しました!"に近い感じかしらね(伝わらなさそうな例え)

実際にどうやってマイグレートするの?

さて、v2 platformにマイグレーションする際に、設定ファイルであるfly.tomlに編集が入る都合上、tomlファイルの位置を明確にする形のコマンドが必要みたい
そういうわけで、fly migrate-to-v2 -a APPNAMEみたいなアプリ名を指定してそれを自動でマイグレーションするってことはできないみたい

そこで、fly.tomlはコマンドを打つ時にいるディレクトリに置く、あるいはコマンドでfly migrate-to-v2 --config /path/to/some/cfg.toml のように設定ファイルに関するオプションを設定するようだ

今回はいつもflyのコマンドを打つディレクトリにtomlファイルをおいてある設計のアプリだったので、何も考えずにそのディレクトリでfly migrate-to-v2を実行するだけで済みそうだ
実際に自動マイグレーションコマンドを使ってv2へのマイグレーションをしてみよう

実際にマイグレートしてみる

  1. cdコマンドにてfly.tomlがいるディレクトリへ移動
  2. fly version updateにてflyctlのバージョンアップグレード
  3. fly migrate-to-v2コマンドを実行
  4. flyのlaunchを行った時のように、リージョンを指定。ここでは東京を指定
  5. 以下の順にプロセスが動くけど大丈夫か聞かれるのでyで了承する
    • マイグレーション中は対象のアプリケーションをロックする
    • 新しいマシンを作成してすでにあるvmの設定をコピーする
    • 新しいマシンの起動、ヘルスチェクが通り次第古いマシンを削除する
    • アプリケーションプラットフォームバージョンを新しいマシンに設定する
    • 対象アプリケーションのロックを解除
  6. 了承すると自動マイグレートが走り、しばらく待つとv2にマイグレートされてtomlファイルが書き換えられる

これだけで終わってしまった。リージョン指定まわりもアプリのローンチしたことあれば見たことあるので、考えることは本当に無い
操作後、実際にflyのダッシュボードからアプリケーション情報を見てみるとちゃんとApps v2になってるし、マイグレートに関する注意書きが消えている。やったね

(なお、1つのマシンで複数のアプリが動いている件で警告が出ている模様。まぁ2アプリ間でまったく影響し合わない特殊な運用なので放置でいいかな(よくはないと思う))

一応、マイグレートの前後でtomlファイルを比較すると以下のような文が増えている。おぉお、ちゃんとtomlファイルの編集までできてるみたい

[experimental]
  auto_rollback = true

ということで、ちゃんとマイグレートできたのでこの記事はおしまい!実際に連続動作させてみて、どんな影響があるか問題があったら追記していこうかな

おまけ: 公式からのアナウンスの詳しい翻訳

公式のアナウンスの翻訳、結構量が多くなっちゃったのでおまけ資料としてまとめます。記事でこんな長いの書いてたら、読むのめんどくさくなっちゃうもん

  • v2 platformでは安定性と信頼性が増える
  • v2 platformによる利益が全ての人が得られるか確認している最中である
  • 手動マイグレーションの方法はこちら
  • ダウンタイムなし且つ自動でやってくれるコマンドfly migrate-to-v2があるのでこっちを推奨するよ
  • これはプレリリースであり、あなたはちょっとこれによる影響を研究する必要があるかも
  • もしあなたが以下にないバグに出くわしたときは教えて欲しい。実際、私たちは評価やフィードバックを待っている。
    • リリースバージョンが0のアプリでは表示が崩れる
    • 支払い方法を設定せずに実行すると途中で止まってしまう。もちろん、ロールバックはされるのでアプリが止まってしまうことはない
    • 稀にロールバックプロセスによってアプリがsuspend状態になることがある。その場合はアプリを再起動すれば問題はないです
  • 今はまだアップグレードしない理由として以下のものがある
    • v2はまだ十分な説明がなされていない
    • v2における障害への対応の都合上、ホストに問題がある時にはインスタンスを他のハードウェアに移動して、応答できるホストを1つ確保、確認を試みます
    • HA、水平スケーリング、および自動スケーリングに関するUX、多分ダッシュボードのことかな?は改善の途中です
    • canaryあるいはblue-green deploymentはまだ実装されていません(現状はローリングと即時デプロイのみの対応)
    • v2ではまた新しい問題が出るかもしれない
  • アップデートするべきかの判断材料はこんな感じ
    • 混雑時により安定する
    • Volumeのvm間移動はできないのでVolumeつきのアプリには不向き
    • 自動スケーリングがv1より早くなります
    • v1で起こっている想定外のリージョンで新しいマシンが起動する事態がなくなりました

Discussion