🪶

Fly.ioをサインアップ〜デプロイまでの備忘録

2024/09/16に公開

Shopifyアプリ開発でインフラを選定する時に、Shopifyの公式ドキュメントにFly.ioというホスティングサービスがあるのを初めて知ったのでサインアップして検証してみました。
今回は利用されなかったのですが、今後何かの開発があったときに利用するかもなので備忘録残します。
備忘録の内容はサインアップ〜デプロイまでの手順、詰まったこと解決したこと、今後よく利用すると思われるコマンド集などになります。

Fly.ioとは

fly.io(フライ・ドット・アイオー)はHeroku・Vercelと同じアプリケーションをデプロイするためのホスティングサービスの事であり、ユーザーの近くでフルスタックのアプリとデータベースを実行するためのプラットフォームです。AWSが開発しているコンテナ用のマイクロVMであるFirecrackerが使われていて、Fly.ioが自動生成 or 自作したDockerfile(イメージ)を利用してデプロイを行います。

管理画面

https://fly.io/

Fly.ioの特徴

Fly.ioの特徴は無料枠で利用できる範囲は以下であり、かなり豊富な所です。

・無料枠ではメモリ256MBのVMが最大3つ使える。
・データベースが最大3GB
・IPアドレスがエニーキャストIPv4アドレス1つと無制限のエニーキャストIPv6アドレス
・SSL証明書が最大10個まで
・データ転送量がアウトバウンドは合計160GBまで・インバウンドは無制限

上記のように豊富ですがデメリットもあります、

提供される仕組みがCLIから操作になりつまりツールでは一切使えないというところです。
また、HerokuのようにGitHubなど連携することもできません。

会員登録・インストール・デプロイ

上記のメリデメを把握しても実感がわかないのでFly.ioの管理画面を開いてサインアップしました。

flyctlのインストール

アカウント作成からアプリケーションのデプロイを、Fly.ioが提供しているCLI(flyctl)で行うためインストールします。

$ brew install flyctl

サインアップ

初めて利用する場合はアカウントのサインアップを行います。
コマンドを実行すると自動でブラウザが立ち上がり、メールアドレスまたはGitHubアカウントを利用してFly.ioのアカウントを作成します。

$ flyctl auth signup

コマンド実行後、以下のの画面が表示されるので「Sign up with GitHub」をクリックします。

アカウント登録とログインが完了すると以下の画面が表示されます。

サインイン

続いてサインインを行います。同じくブラウザが自動で立ち上がりますがサインアップをした直後であれば特別な操作は必要ありません。

$ flyctl auth login

新規でアプリケーション作成・デプロイ

fly launch

これで実行すればtoml・Dockerファイルが生成され、デプロイが完了されます。
上記のようにコマンドを打てばデプロイされ以下のように新たなアプリが追加されるようになります。

トラブルシューティング

初回は会員登録・インストール・デプロイで色々と詰まってしまい、なかなかスムーズ実装できませんでした。
実装に詰まった事を3点記載します。

クレジットカードに関してのエラー

実際にアプリを追加してデプロイしようとした時のトラブルです。
fly launchで実行すると以下のようなエラーが出てきました。

>We need your payment information to continue! Add a credit card or buy credit: https://fly.io/dashboard/3803/billing

こちらはクレジットの設定してくださいという意味でして、
新規アプリケーションデプロイする際はクレジットカードの登録が必要だそうです。

https://fly.io/dashboard/3803/billing
を開いてクレジットカードの設定してください。
これでクレジットカードの設定が完了したらデプロイされます。

再ログイン依頼のエラー

これも、アプリを追加してデプロイしようとした時のトラブルです。
fly launchで実行すると以下のようなエラーが出てきました。

failed to fetch an image or build from source: failed to restart VM xxxxxxxxxxxxxxxx: failed_precondition: unable to restart machine, not currently started or stopped (Request ID: xxxxxx-nrt) (Trace ID: xxxx)
user@USERnoMacBook-Air remix-prisma-json-main % fly auth login
Opening https://fly.io/app/auth/cli/xxx ...

ログイン認証、取れてないから再起動失敗しましたという意味

fly auth login

でログインした後

fly launch

で実行すれば解消されました。

fly.ioのマシンがシャットダウンした時

これはデプロイした時のエラーとは違いますが、
開発中にデプロイしたアプリのディレクトリ構成を確認する時に、以下のようなエラーが出てきました。
この場合は、マシンの起動がストップされている可能性があるので、再起動してエラーを解消させる必要があります。

fly ssh console -a {URL}
Error: app {URL} has no started VMs. It may be unhealthy or not have been deployed yet. Try the following command to verify:

まずは、fly statusとコマンドを打ってステータスがstopになっているか確認します。

fly status

すると以下のように表示され、STATEがstoppedになっている場合はIDを起動する必要があります。

Machines
PROCESS ID              VERSION REGION  STATE   ROLE    CHECKS  LAST UPDATED         
app     xxxxxxxxxxxxxxxx  1       nrt     stopped                 2024-07-27T13:54:44Z

以下の様にIDを指定してアプリケーションを再起動します。

flyctl machine start xxxxxxxxxxxxxxxx

再起動すると、再び利用できるようになりました。

その他のコマンド

再デプロイ

再デプロイする場合、修正後以下のコマンドで再デプロイします。

fly deploy

誤って、fly launchで実行しないように注意してください。
新たなアプリケーションが追加され請求価格が増える可能性があります。

スケールの設定について

実際に利用されることなく終わってしまいましたが、
何かの施策を開始してサーバー負荷が高まった時に以下のコマンドをよく利用されるのではないかと思います。
以下のようにコマンドを打つだけで台数変更できます。

fly scale count 2
Count changed to 2

上記のように台数できるのですが、AWSのように管理画面で台数設定できないっていうのが難点なところです。

価格について

従量課金制であり、ビルド実行・コンテナの使用量によって料金が変動します。
Started Fly Machinesエリアで日本語翻訳してご確認ください。

https://fly.io/docs/about/pricing/

感想

無料で使えるメモリ256MBのVMが最大3つ(256MB × 3)使える、データベースが最大3GBとなかなかいいホスティングサービスですが、提供される仕組みがCLIから操作(ツールでは一切使えない)することになる点は難点なので今後の運用はどうるのか考える必要がありそうです。
小規模の開発でありかつ、最小限に費用を抑えたい場合はこのホスティングサービスがいいかもしれません。
ぜひ、検討してみてください。

Discussion