AIイノベーションズ
Railway/Guides

デプロイのライフサイクルとヘルスチェック

Railway でのデプロイ時のシャットダウンプロセス、ヘルスチェック、再起動ポリシーの設定方法を解説し、ゼロダウンタイムデプロイを実現します。

著者: AIイノベーションズ 阿部隼也X / Twitter

Railwayはこちら

デプロイのライフサイクルとヘルスチェック

Railway は、新しいデプロイが正常に稼働するまで古いデプロイを維持することで、ゼロダウンタイムデプロイを実現します。本記事では、その仕組みの中心となる正常なシャットダウン、ヘルスチェック、再起動ポリシーについて解説します。


正常なシャットダウン (Graceful Shutdown)

新しいデプロイが正常だと判断されると、Railway は古いデプロイに対して SIGTERM シグナルを送信します。アプリケーション側でこのシグナルを補足し、以下の処理を行うことで、安全にシャットダウンできます。

  • 進行中のリクエストを完了させる
  • データベース接続を閉じる
  • その他クリーンアップ処理

SIGTERM をハンドルしない場合、10秒後SIGKILL が送信され強制終了します。

シャットダウンタイムアウトの変更

サービス設定でシャットダウンタイムアウトを調整できます(デフォルト: 10秒)。

  • Service → Settings → Graceful Shutdown Timeout

ヘルスチェック (Healthchecks)

ヘルスチェックは、新しいデプロイが正常にリクエストを受け付けられる状態かを確認する仕組みです。HTTP ベースのサービスの場合、指定したパスに Railway がリクエストを送信し、ステータスコード 200 が返るかで判断します。

設定項目

設定説明デフォルト値
Healthcheck Pathヘルスチェック用エンドポイントのパス/
Healthcheck Portヘルスチェック用ポート(環境変数 PORT)
Healthcheck Hostnameヘルスチェック時の Host ヘッダ(自動生成されたドメイン)
Initial Delayデプロイ後、ヘルスチェック開始までの待機時間0秒
Timeoutヘルスチェックリクエストのタイムアウト5秒
Intervalヘルスチェックの実行間隔5秒
Max Retries失敗時のリトライ回数3回

再起動ポリシー (Restart Policy)

デプロイされたサービスがクラッシュした場合の挙動を定義します。

ポリシー説明
ALWAYS常に再起動を試みます。
ON_FAILURE終了コードが 0 以外の場合に再起動します(最大10回)。
NEVER再起動しません。

デフォルトは ON_FAILURE です。10回失敗すると Crashed 状態になります。


まとめ

ゼロダウンタイムデプロイを実現するために、以下の3点を正しく設定することが重要です。

  1. Graceful Shutdown: アプリケーション側で SIGTERM をハンドルする。
  2. Healthchecks: /health のような専用エンドポイントを用意し、設定する。
  3. Restart Policy: ユースケースに合わせて再起動ポリシーを選択する。

これらの設定を適切に行うことで、ユーザー影響を最小限に抑えながら、安全かつ迅速にデプロイを繰り返すことが可能になります。

Railwayはこちら

PR