Railway に CLI を用いてデプロイ(など)をする方法

Railway とは

Heroku のような PaaS です。

railway.app

結論

「トークン生成」→「CLI インストール」→「コマンド実行」の流れです。

1. トークン生成

Project Settings のページの Tokens のメニューに行き、New Token にてトークンを生成します。

トークンの名前は任意に命名することができます。ただし、Railway で実際に使う際にはすべて RAILWAY_TOKEN と指定して使います。つまり、「命名するトークンの名前は人間が区別するためだけに付けられるもの」になります*1

「トークンを目的別や利用者別に複数発行する場合にそれを判別しやすくする名前を付ける」、というのが一般的な命名の目的でしょうか。

gyazo.com

2. CLI インストール

Railway の CLI コマンドを npm や yarn でインストールします*2

$ npm i -g @railway/cli

3. コマンド実行

コマンドを実行します。環境変数 RAILWAY_TOKEN に先ほど作成したトークンを指定して実行します*3

まずは $ railway status を実行して正しくトークンが認識された上で実行できるかを確認しましょう。他にどんなことができるかは $ railway --help で確認できます。

$ RAILWAY_TOKEN=abc-123-def-456 railway status
Project: foobar_project
Environment: production
Plugins:
Services:
hoge_service
fuga_service

デプロイ方法

CLI を用いてデプロイするためには $ railway up を使います。

プロジェクトに複数のサービスが存在する場合には --service サービス名 を付与すると、サービス選択の対話が不要になるので楽です。CI (CD) では対話プロンプトが発生すると実行が止まって失敗してしまうので、必ず指定しておきます*4

# サービス名を指定しない場合
$ RAILWAY_TOKEN=abc-123-def-456 railway up
Use the arrow keys to navigate: ↓ ↑ → ←  and / toggles search
? Select Service:
  ▸ hoge_service
    fuga_service
# サービス名を指定する場合
$ RAILWAY_TOKEN=abc-123-def-456 railway up --service fuga_service
(デプロイが開始される)

補足

CI/CD で $ railway up コマンドを実行してデプロイすると、どうも遅いように感じます。また、連続してデプロイが続くと「詰まる」ことがあり、コンソールからデプロイをキャンセルしないといけないことがありました。「詰まり」があるときにはメモリの使用量が多くなっており、クレジットを大量に消費していました。

今のところ、自動でデプロイする場合には Railway が用意していくれている GitHub 連携を用いるのが無難なようです。

手動ですと $ railway up は早いしとても便利です。

*1:極論を言えば、名前に意味はない

*2:Heroku CLI と同様です

*3:動作が確認できて常用する段階になったら direnv を用いて環境変数を定義するのが楽でしょう

*4:railway up だけではなく、サービス選択の対話が必要になる場所全般で

Powered by はてなブログ